一、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
二、环境描述
以容器方式运行 Consul:
通过 http://192.168.56.131:8500 访问 Consul
修改 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安装的一般都不会有,如果没有此文件,并且创建此文之后有如下报错
可以修改/lib/systemd/system/docker.service
将docker01和docker02主机进行更改,添加如下内容:
--cluster-store=consul://192.168.56.131:8500 指定需要连接的consul数据库;
--cluster-advertise=ens33:2376 指定通过哪个网口进行连接;
重启 docker daemon
systemctl daemon-reload
systemctl restart docker
三、overlay实验
可以看到将两台docker主机docker01和docker02添加到了docker-mgr主机的consul数据库中
第一步:在docker01主机中创建overlay网络over_net01
docker02主机中确认
第二步:网卡信息确认以docker01主机为例
从这里可以确认docker0网卡的IP地址为172.17.0.1,是172.17.0.0网段
第三步:运行容器在over_net01网络中,本次实验容器排布如下
第四步:创建容器
做任何事情都有先后顺序,我们从container--host的顺序来解释网络情况,篇幅较长,跟住别丢
第五步:容器网络信息以xbox1为例
6: eth0@if7 10.0.0.2/24
9: eth1@if10 172.18.0.2/16
有两条路由,分别是:
10.0.0.0 下一跳 10.0.0.2 6: eth0@if7
172.18.0.0 下一跳 172.18.0.2 9: eth1@if10
第六步:docker01主机端的网卡信息
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为例
可以访问外网,那又是如何出去的呢?通过traceroute进行测试
可以发现容器是通过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
至此,容器的其中一个网卡的数据走向已经明确,具体如下:
eth0网卡:
那eth0网卡又是什么情况呢?我们并没有看到eth0网卡的信息?
这里涉及到另外一个概念容器的namespace,不妨我们大胆的想象,另一条网络就是通过namespace进行的,依据这个想象,我们进行验证
docker network inspect over_net01
信息查看,这次我们依据host-------namespace的顺序进行
可以看到信息
10: veth5b93e51@if9 link-netnsid 1
14: vethada8f0e@if13 link-netnsid 2
是不是发现 7: veth2@if6 这个网卡有点眼熟?这正是我们eth0网卡的连一个虚拟网卡,我们继续往下看
发现所有网卡都被桥接到了br0上,正是这样,我们容器之间通信可以完成了
具体结构如下:
至此overlay网络单节点关系梳理清楚。