一、docker注意事项

    1、不要私自创建docker用户和组。

    2、做实验时,给虚拟机做快照,尽量在安装完成操作系统、ssh、vim、docker、docker images下载之后。(之前的写了一半的章,表示。。。)

    3、docker daemon文件注意如下;

        /etc/systemd/system/docker.service.d/xxx..conf

        /lib/systemd/system/docker.service

        /etc/docker

二、环境描述

19、《每天5分钟玩转Docker容器技术》学习--Overlay Network内部结构详解_第1张图片

以容器方式运行 Consul:

图片.png

通过 http://192.168.56.131:8500 访问 Consul

19、《每天5分钟玩转Docker容器技术》学习--Overlay Network内部结构详解_第2张图片

修改 docker02 和 docker03 的 docker daemon 的配置文件,将docker02和docker03注册到consul数据库中

注意:docker v1.11版本之后,以systemd方式管理docker,默认没有创建配置文件,需要自己创建/etc/systemd/system/docker.service.d/docker.conf,详情参考官网文档:

https://docs.docker.com/engine/admin/systemd/

https://docs.docker.com/engine/admin/

启动参数说明:https://docs.docker.com/engine/reference/commandline/dockerd/

       sudo mkdir /etc/systemd/system/docker.service.d
  实际情况中使用docker-machine安装的docker host都会有此文件,使用apt-get或yum安装的一般都不会有,如果没有此文件,并且创建此文之后有如下报错

19、《每天5分钟玩转Docker容器技术》学习--Overlay Network内部结构详解_第3张图片

图片.png

可以修改/lib/systemd/system/docker.service

19、《每天5分钟玩转Docker容器技术》学习--Overlay Network内部结构详解_第4张图片

将docker01和docker02主机进行更改,添加如下内容:

--cluster-store=consul://192.168.56.131:8500   指定需要连接的consul数据库;

--cluster-advertise=ens33:2376  指定通过哪个网口进行连接;

重启 docker daemon

systemctl daemon-reload

systemctl restart docker

19、《每天5分钟玩转Docker容器技术》学习--Overlay Network内部结构详解_第5张图片

三、overlay实验

        可以看到将两台docker主机docker01和docker02添加到了docker-mgr主机的consul数据库中

 第一步:在docker01主机中创建overlay网络over_net01

图片.png

19、《每天5分钟玩转Docker容器技术》学习--Overlay Network内部结构详解_第6张图片

docker02主机中确认

19、《每天5分钟玩转Docker容器技术》学习--Overlay Network内部结构详解_第7张图片

第二步:网卡信息确认以docker01主机为例

19、《每天5分钟玩转Docker容器技术》学习--Overlay Network内部结构详解_第8张图片

从这里可以确认docker0网卡的IP地址为172.17.0.1,是172.17.0.0网段

第三步:运行容器在over_net01网络中,本次实验容器排布如下

19、《每天5分钟玩转Docker容器技术》学习--Overlay Network内部结构详解_第9张图片

第四步:创建容器

图片.png

19、《每天5分钟玩转Docker容器技术》学习--Overlay Network内部结构详解_第10张图片

做任何事情都有先后顺序,我们从container--host的顺序来解释网络情况,篇幅较长,跟住别丢

第五步:容器网络信息以xbox1为例

19、《每天5分钟玩转Docker容器技术》学习--Overlay Network内部结构详解_第11张图片

6: eth0@if7        10.0.0.2/24

9: eth1@if10      172.18.0.2/16

图片.png

有两条路由,分别是:

10.0.0.0            下一跳         10.0.0.2                6: eth0@if7

172.18.0.0       下一跳         172.18.0.2            9: eth1@if10

第六步:docker01主机端的网卡信息

19、《每天5分钟玩转Docker容器技术》学习--Overlay Network内部结构详解_第12张图片

图片.png

8: docker_gwbridge            172.18.0.1/16            overlay网络新创建了一个网络

10: veth5b93e51@if9           虚拟网卡                可以得知此网卡桥接至docker_gwbridge

14: vethada8f0e@if13          虚拟网卡               可以得知此网卡桥接至docker_gwbridge

第七步:容器和主机之间的网卡关系

eth1网卡在第五步时我们分析到xbox1有两个网卡,可以得到如下信息:

6: eth0@if7        10.0.0.2/24

9: eth1@if10      172.18.0.2/16

至此第一条网络梳理可以明确,如下:

容器中:        9: eth1@if10      172.18.0.2/16            -------            docker主机中:            10: veth5b93e51@if9             172.18.0.1           -----            8: docker_gwbridge

这是桥接的基础知识,不了解的同学请尽快掌握,这是docker网络学习的基础

这里测试下容器是否可以访问外网,这里以访问www.baidu.com为例

图片.png

可以访问外网,那又是如何出去的呢?通过traceroute进行测试

图片.png

可以发现容器是通过172.18.0.0网段出去,即通过docker_gwbridge出去,其中192.168.56.2是vmware的NAT网卡地址,发现172.18.0.1直接跳转了192.168.56.2,这里是NAT,又通过NAT跳转到192.168.1.1,路由器的地址,然后出去到运营商,最后到www.baidu.com

至此,容器的其中一个网卡的数据走向已经明确,具体如下:

19、《每天5分钟玩转Docker容器技术》学习--Overlay Network内部结构详解_第13张图片

eth0网卡

那eth0网卡又是什么情况呢?我们并没有看到eth0网卡的信息?

这里涉及到另外一个概念容器的namespace,不妨我们大胆的想象,另一条网络就是通过namespace进行的,依据这个想象,我们进行验证

19、《每天5分钟玩转Docker容器技术》学习--Overlay Network内部结构详解_第14张图片

docker network inspect over_net01

19、《每天5分钟玩转Docker容器技术》学习--Overlay Network内部结构详解_第15张图片

信息查看,这次我们依据host-------namespace的顺序进行

19、《每天5分钟玩转Docker容器技术》学习--Overlay Network内部结构详解_第16张图片

可以看到信息

10: veth5b93e51@if9            link-netnsid 1

14: vethada8f0e@if13            link-netnsid 2

19、《每天5分钟玩转Docker容器技术》学习--Overlay Network内部结构详解_第17张图片

19、《每天5分钟玩转Docker容器技术》学习--Overlay Network内部结构详解_第18张图片

19、《每天5分钟玩转Docker容器技术》学习--Overlay Network内部结构详解_第19张图片

是不是发现    7: veth2@if6    这个网卡有点眼熟?这正是我们eth0网卡的连一个虚拟网卡,我们继续往下看

图片.png

发现所有网卡都被桥接到了br0上,正是这样,我们容器之间通信可以完成了

具体结构如下:

19、《每天5分钟玩转Docker容器技术》学习--Overlay Network内部结构详解_第20张图片

至此overlay网络单节点关系梳理清楚。