JOIN容器:container(共享網絡協議棧)html
容器和容器之間。linux
[root@localhost ~]# docker pull busyboxweb
[root@localhost ~]# docker run -itd --name web5 busybox:latest docker
把網卡指定web5:數據庫
[root@localhost ~]# docker run -itd --name web6 --network container:web5 busybox:latest bootstrap
Web6:vim
[root@localhost ~]# docker exec -it web6 /bin/sh瀏覽器
/ # echo 123456 > /tmp/index.html安全
/ # httpd -h /tmp/網絡
Web5:
[root@localhost ~]# docker exec -it web5 /bin/sh
/ # wget -O - -q 127.0.0.1
這時會發現,兩個容器的ip地址同樣。
PS:這種方法的使用場景:因爲這種網絡的特殊性,通常在運行同一個服務,而且合格服務須要作監控,以及日誌收集,或者網絡監控的時候,能夠選擇這種網絡。
docker的跨主機網絡解決方案
Overlay的解決方案(覆蓋型解決方案)
實驗環境:
Docker01:1.10
Docker02:1.20
Docker03:1.30
暫時不考慮防火牆和selinux安全問題。
將3臺Dockerhost防火牆和selinux所有關閉,而且分別更改主機名稱
[root@localhost ~]# hostnamectl set-hostname docker01
[root@localhost ~]# su -
[root@docker01 ~]# systemctl stop firewalld
[root@docker01 ~]# systemctl disable firewalld
[root@docker01 ~]# setenforce 0
Docker01:
[root@docker01 ~]# rz
導入鏡像包:
[root@docker01 ~]# docker load -i myprogrium-consul.tar
-h:hostname,主機名 -server -bootstrap:集羣
啓動consul服務:consul:分佈式,數據庫,數據中心,集羣的方式存儲東西
[root@docker01 ~]#docker run -d -p 8500:8500 -h consul --name consul --restart always progrium/consul -server -bootstrap
報錯重啓服務:
[root@docker01 ~]# systemctl restart docker
PS:容器生產以後,咱們能夠經過瀏覽器訪問consul服務,驗證consul服務是否正常。訪問dockerHost加映射端口。
訪問:
http://192.168.1.10:8500/
修改Docker02和Docker03的配置文件
Docker02:
[root@docker02 ~]# vim /usr/lib/systemd/system/docker.service
13行:
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376 --cluster-store=consul://192.168.1.10:8500 --cluster-advertise=ens33:2376
[root@docker03 ~]# systemctl daemon-reload
[root@docker03 ~]# systemctl restart docker
Docker03同上
PS:返回瀏覽器consul服務界面沒找到KEY/VALUE----->DOCKER------>NODES會看到剛剛加入的docker02的信息。
在docker02上建立自定義網絡: global(全局)
在docker02上建立的網絡,咱們能夠看到它的SCOPE定義的是global(全局),意味着加入到consul這個服務的docker服務,均可以看到咱們自定義的網絡。
同理若是是用此網絡建立的容器,會有兩張網卡。
默認這張網卡的網段是10.0.0.0網段,若是想要docker01也能夠看到這個網絡,那麼也只需在docker01的配置文件添加相應內容便可。
同理,由於是自定義網絡,符合組定義網絡的特性,能夠直接經過docker容器的名稱相互通訊,固然也能夠在自定義網絡的時候,指定它的網段,那麼是用此網絡
docker network create -d overlay ov_net1
在docker03上查看網卡:
在docker01上修改配置文件,重啓docker查看:
[root@docker01 ~]# vim /usr/lib/systemd/system/docker.service
13行:
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376 --cluster-store=consul://192.168.1.10:8500 --cluster-advertise=ens33:2376
[root@docker01 ~]# systemctl daemon-reload
[root@docker01 ~]# systemctl restart docker
[root@docker01 ~]# docker network ls
Docker01:
[root@docker01 ~]# docker run -itd --name t1 --network ov_net1 busybox
[root@docker01 ~]# docker exec -it t1 /bin/sh
/ # ip a
Docker02:
[root@docker02 ~]# docker run -itd --name t2 --network ov_net1 busybox
[root@docker02 ~]# docker exec -it t1 /bin/sh
/ # ip a
Docker03:
[root@docker03 ~]# docker run -itd --name t3 --network ov_net1 busybox
[root@docker03 ~]# docker exec -it t1 /bin/sh
/ # ip a