death114 发表于 2019-2-22 06:57:41

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]
查看完整版本: 19、《每天5分钟玩转Docker容器技术》学习