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