Docker网络管理机制实例解析+创建自己Docker网络
实例解析Docker网络管理机制(bridge network,overlay network),介绍Docker默认的网络方式,并创建自己的网络桥接方式,将开发的容器添加至自己新建的网络,提高Docker网络安全和通信.
1.给自己的docker (Dcoker1.12GA)容器起个名称
给docker名称的好处是: 
  - 容易记 
  - 可以通过特殊命令,使得名称可以在容器和容器之间使用
1.1.查看docker已经存在的镜像
wxl@wxl-pc:~$ docker images1.2.选择training/webapp这个镜像,通过–name命令设置名称
wxl@wxl-pc:~$ docker run -d -P --name wangxiaoleiweb training/webapp python app.py最后一行可以看到wangxiaoleiweb已经命名成功
可以使用docker inspect通过刚刚设置的名称来查看wangxiaoleiweb
wxl@wxl-pc:~$ docker inspect wangxiaoleiweb1.3.删除docker名称,docker的名称都是唯一的,即一但使用了就不能在另一个镜像使用该名称,可以删除后重新命名.(只删除名字,镜像不会被删除)
#停止运行中的镜像
wxl@wxl-pc:~$ docker stop wangxiaoleiweb
#删除自定义的名称
docker rm wangxiaoleiweb
web
wxl@wxl-pc:~$ docker rm web
web
wxl@wxl-pc:~$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              50dae1ee8677        2 weeks ago         196.7 MB
hello-world         latest              c54a2cc56cbb        4 weeks ago         1.848 kB
training/webapp     latest              6fae60ef3446        14 months ago       348.8 MB
training/sinatra    latest              49d952a36c58        2 years ago         447 MB2.默认的容器的网络
2.1.Docker通过网络驱动(network driver),默认网络驱动分别是桥接(bridge)和覆盖(overlay)两种.
#查看Docker默认的三种网络
wxl@wxl-pc:~$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
7f6b9cbd3eec        bridge              bridge              local
0cb106f52e66        host                host                local
cfb50541161b        none                null                local为一个容器桥接网络
wxl@wxl-pc:~$ docker run -itd --name=networktest ubuntu:14.04
2a433c9467d3d35474daa544dcac665ecc4b71b202b82d0bd59049f7d52e397fwxl@wxl-pc:~$ docker network inspect bridge
[
    {
        "Name": "bridge",
        "Id": "7f6b9cbd3eece7301d196363b5250c44fd0b275f3c3d38a952af2ad8b2fd38c2",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Containers": {
            "2a433c9467d3d35474daa544dcac665ecc4b71b202b82d0bd59049f7d52e397f": {
                "Name": "networktest",
                "EndpointID": "d0b94ec934b390784faa5ad8946e9ba6031afe4467889e1f7fe0eda5d79deac1",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]可以看到通过检查网络可以看到容器的IP地址,名称等信息.
2.2.从网络中删除某个容器,可以通过该容器的网络名称,容器名称,id来作为删除的标示,但是通过网络名称是方便的,如networktest
wxl@wxl-pc:~$ docker network disconnect bridge networktest再用docker network inspect bridge会发现已经没有networktest信息了
3.自定义容器的网络
容器的网络(network)是用来隔离容器和容器之间或者网络与网络之间的方法,所以,所以我们通过建立网络来隔离容器.其中,内置的bridge网络是无法删除的.
3.1.创建网络
Docker Engine 支持两种网络桥接网络(bridge network)和覆盖网络(overlay network),桥接的网络局限于单个主机运行的Docker Engine,而覆盖网络可以包含多个主机.
wxl@wxl-pc:~$ docker network create -d bridge my-bridge-network
3bfde1ba62a75e38236517f4f0731f48c281cec107e976039773be134968c453其中,-d指使用Dockerbridge(桥接)方式的网络,如果没有加默认的也是桥接网络. 
通过docker network ls来查看已经创建好的网络
3.2.将一个容器添加至新创建的网络中
#这里创建了一个db的容器(若本地没有该镜像会自动拉取)
wxl@wxl-pc:~$ docker run -d --network=my-bridge-network --name db training/postgres
通过inspect命令查看已经添加至网络的db容器
wxl@wxl-pc:~$ docker inspect --format='{{json .NetworkSettings.Networks}}'  db
{"my-bridge-network":{"IPAMConfig":null,"Links":null,"Aliases":["237e0f7060b6"],"NetworkID":"3bfde1ba62a75e38236517f4f0731f48c281cec107e976039773be134968c453","EndpointID":"33516faca38c0f76bd2c6ebb6e8c2574c62e242d5a0c10b77c49e14b2549f3e5","Gateway":"172.18.0.1","IPAddress":"172.18.0.2","IPPrefixLen":16,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"MacAddress":"02:42:ac:12:00:02"}}3.3.通过ping的方式验证网络连通性,将两个容器(db容器和web容器)从不同的网络,放置同一个网络.
3.3.1.把training/webapp容器命名为web,方便后续操作
wxl@wxl-pc:~$ docker run -d --name web training/webapp python app.py
8f12cfaaedda2b348bef437fa2eeed19ef69ad07cd98aa72e0c2113710413e6f3.3.2.查看web容器的ip
wxl@wxl-pc:~$ docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' web
172.17.0.23.3.3.进入db容器并且尝试ping一下web容器,发现是ping不通,ctrl+c终止ping,如下图
#进入db容器
wxl@wxl-pc:~$ docker exec -it db bash
#首次尝试ping web容器
root@237e0f7060b6:/# ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
^C
--- 172.17.0.2 ping statistics ---
24 packets transmitted, 0 received, 100% packet loss, time 23183ms
root@237e0f7060b6:/# exit
3.3.4.现在,将web容器添加至db容器的网络(即my-bridge-network),然后在ping,即可ping通
wxl@wxl-pc:~$ docker network connect my-bridge-network web#再次进入db容器
wxl@wxl-pc:~$ docker exec -it db bash
#ping web容器,发现已经可以ping通
root@237e0f7060b6:/# ping web
PING web (172.18.0.3) 56(84) bytes of data.
64 bytes from web.my-bridge-network (172.18.0.3): icmp_seq=1 ttl=64 time=0.097 ms
64 bytes from web.my-bridge-network (172.18.0.3): icmp_seq=2 ttl=64 time=0.110 ms
64 bytes from web.my-bridge-network (172.18.0.3): icmp_seq=3 ttl=64 time=0.109 ms
^C
--- web ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1998ms
rtt min/avg/max/mdev = 0.097/0.105/0.110/0.010 ms
可见,不同的容器在不同的网络是可以起到隔离作用的,所以,自定义一个网络可以保证容器和容器之间通信安全.
Docker网络管理机制实例解析+创建自己Docker网络的更多相关文章
- Docker镜像构建原理解析(不装docker也能构建镜像)
		在devops流程里面 构建镜像是一个非常重要的过程,一般构建镜像是写dockerfile文件然后通过docker client来构建的image. docker client 会先检查本地有没有im ... 
- Java反射机制实例解析
		1.获取想操作的访问类的java.lang.Class类的对象 2.调用Class对象的方法返回访问类的方法和属性信息 3.使用反射API来操作 每个类被加载后,系统会为该类 ... 
- 如何修改Docker已运行实例的端口映射
		如何修改Docker已运行实例的端口映射 Docker的端口映射,往往出现在两个阶段需要处理: 1.是在docker启动前就已经确定好,哪个docker实例映射哪个端口(往往这个情况比较,需要提前做规 ... 
- Docker系统六:Docker网络管理
		Docker网络 I. Docer的通信方式 默认情况下,Docker使用网桥(brige)+ NAT的通信模型. Docker启动时会自动创建网桥Docker0,并配置ip 172.17.0.1/1 ... 
- Docker部署tomcat+nginx+mysql,创建一个tomcat集群
		Docker的部署可以选择虚拟机或者云服务器,我自己选择的是本机安装centos7虚拟机: 1.虚拟机安装登录成功后开始部署docker: 首先了解docker是一个开源应用容器引擎,基于Go语言遵循 ... 
- Docker++:从 0 到 1 学习Docker(笔记)
		本篇文章有点长 ... 知识点如下:下 ↓ ↓ ↓ ~ 初识 Docker ~ Docker 命令 ~ Docker 容器的数据卷 ~ Docker 应用部署 ~ Dockerfile ~ Dock ... 
- Docker & k8s 系列一:快速上手docker
		Docker & k8s 系列一:快速上手docker 本篇文章将会讲解:docker是什么?docker的安装,创建一个docker镜像,运行我们创建的docker镜像,发布自己的docke ... 
- 实例解析Docker数据卷+数据卷容器+flocker数据共享+DockerHub操作
		Docker内部数据管理和Docker之间的数据共享为数据卷和数据卷容器,实例解析1.将本地的文件作为容器的数据卷,2.数据卷flocker插件实现容器集群(或者Docker Swarm)的数据共享3 ... 
- docker 实践十:docker 网络管理
		本篇是关于 docker 网络管理的内容,同时也包含了 docker 网络的高级应用. 注:环境为 CentOS7,docker 19.03. docker 网络基础 docker 网络模型 在 do ... 
随机推荐
- 论文阅读 | FCOS: Fully Convolutional One-Stage Object Detection
			论文阅读——FCOS: Fully Convolutional One-Stage Object Detection 概述 目前anchor-free大热,从DenseBoxes到CornerNet. ... 
- sql 简单语法
			1.数据库操作 create database student_info -- 创建数据库 drop database student_info -- 删除数据库 2.表操作 -- 创建表 creat ... 
- 【Python 解决错误】selenium.common.exception.WebDriverException
			近来准备写个脚本去搜索某端游的官网交易平台.因为也不懂高端的爬虫技术,决定用selenium去戳.这里采用的是chrome浏览器,链接网页时报错: File "C:\Python37\lib ... 
- final学习
			类加载过程 1.装载:查找和导入Class文件 2.链接:其中解析步骤是可以选择的 (a)检查:检查载入的class文件数据的正确性 (b)准备:给类的静态变量分配存储空间 (c)解析:将符号引用转成 ... 
- CDH集群安装配置(四)- mysql 的安装
			安装mysql,并且创建相关的表(只需要在chd1上面安装而且需要root权限)1.1 查看Centos自带mysql是否已经安装 yum list installed | grep mysql 卸载 ... 
- Ubuntu18.04安装thunderbird并设置中文
			Ubuntu18.04安装thunderbird并设置中文 安装thunderbird sudo apt-get install thunderbird 安装中文包 sudo apt-get inst ... 
- 构造函数与普通函数关于“new”操作符
			javascript中构造函数与普通函数的区别还有关于“new”操作符的一些原理 有一种创建对象的方法叫做工厂模式,例如: 1 function person(name,age){ 2 var o ... 
- VUE安装步骤1
			文件结构 用官方的 vue-cli 生成的项目文件结构如上图所示,简单介绍下上面图中各文件的作用. src 文件夹 : 1. assets 文件夹:存放各种资源文件,如图片等 2. component ... 
- DIY FRDM-KL25Z开发环境 -- 基于GNU工具链
			IDE大行其道的今天,一键make极大的便利了开发的同时,也每每让各种半路出家的猿们遇到工具链的问题感到束手无策(不就是说自己嘛?^_^!!!).也玩过不少板子了,始终没去深究工具链方面的问题,对于嵌 ... 
- 【Web开发】一、页面布局
			一.Frame <frameset id="topFrameSet" rows="69,*" border="0" framespac ... 
