一、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網絡單節點關係梳理清楚。