日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

从零开始学习docker(八)多台机器通信

發布時間:2024/9/16 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从零开始学习docker(八)多台机器通信 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

擼了今年阿里、頭條和美團的面試,我有一個重要發現.......>>>

在上一節中,我們介紹了在同一個機器里面同一個docker里面不同的容器如何進行通信的。這一節我們介紹如何在不同的Linux機器上面的容器通信。

分布式存儲有很多工具,今天選擇etcd工具,這個是開源的免費分布式存儲。

準備實驗環境:

docker node1 ip:?192.168.0.109??

docker node2 ip:?192.168.0.107

在docker node1 上,下載解壓https://github.com/etcd-io/etcd/releases/tag/v3.3.13

vincent@swarm-manager:~/etcd-v3.3.13-linux-amd64$ nohup ./etcd --name docker-node1 --initial-advertise-peer-urls http://192.168.0.109:2380 \ > --listen-peer-urls http://192.168.0.109:2380 \ > --listen-client-urls http://192.168.0.109:2379,http://127.0.0.1:2379 \ > --advertise-client-urls http://192.168.0.109:2379 \ > --initial-cluster-token etcd-cluster \ > --initial-cluster docker-node1=http://192.168.0.109:2380,docker-node2=http://192.168.0.107:2380 \ > --initial-cluster-state new & [1] 3870 vincent@swarm-manager:~/etcd-v3.3.13-linux-amd64$ nohup: ignoring input and appending output to 'nohup.out'

?--name 表示這個名字是docker-node1

--initial-advertise-peer-urls 表示本地地址

./etcdctl cluster-health member 72400c6f5c5691f3 is healthy: got healthy result from http://172.16.247.131:2379 member dc0810ee9a06524d is healthy: got healthy result from http://172.16.247.132:2379 cluster is healthy

在docker node2上也去執行:

wget https://github.com/coreos/etcd/releases/download/v3.0.12/etcd-v3.0.12-linux-amd64.tar.gz vincent@swarm-worker-1:~/etcd-v3.3.13-linux-amd64$ ./etcd --name docker-node2 --initial-advertise-peer-urls http://192.168.0.107:2380 \ > --listen-peer-urls http://192.168.0.107:2380 \ > --listen-client-urls http://192.168.0.107:2379,http://127.0.0.1:2379 \ > --advertise-client-urls http://192.168.0.107:2379 \ > --initial-cluster-token etcd-cluster \ > --initial-cluster docker-node1=http://192.168.0.109:2380,docker-node2=http://192.168.0.107:2380 \ > --initial-cluster-state new &

如何確定我們的cluster已經成功建立了:

在node1上執行:?

vincent@swarm-manager:~/etcd-v3.3.13-linux-amd64$ ./etcdctl cluster-health member beb7fd3596aa26eb is healthy: got healthy result from http://192.168.0.109:2379 member e6bdc10e37172e00 is healthy: got healthy result from http://192.168.0.107:2379 cluster is healthy

然后在node2上執行:

vincent@swarm-worker-1:~/etcd-v3.3.13-linux-amd64$ ./etcdctl cluster-health member beb7fd3596aa26eb is healthy: got healthy result from http://192.168.0.109:2379 member e6bdc10e37172e00 is healthy: got healthy result from http://192.168.0.107:2379 cluster is healthy

這樣我們就在兩臺機器上搭建了一個分布式存儲

重啟docker服務

因為我們要讓docker知道我們要去使用分布式存儲。

在docker-node1上執行:

vincent@swarm-manager:~/etcd-v3.3.13-linux-amd64$ sudo service docker stop [sudo] password for vincent: vincent@swarm-manager:~/etcd-v3.3.13-linux-amd64$ docker --version Docker version 17.12.0-ce, build c97c6d6

然后手動啟動docker:

vincent@swarm-manager:~/etcd-v3.3.13-linux-amd64$ sudo /usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=etcd://192.168.0.109:2379 --cluster-advertise=192.168.0.109:2375& [2] 4153

在docker-node2上執行:

sudo service docker stop sudo /usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=etcd://192.168.0.109:2379 --cluster-advertise=192.168.0.109:2375&

創建overlay network

在docker-node1上創建一個demo的overlay network

sudo docker network ls NETWORK ID NAME DRIVER SCOPE f6acf1d69b7c bridge bridge local c051f46f8a15 host host local 4caf51fb3438 none null local docker network create -d overlay demo 1607f5636b8515d7e06d2f13261d32d8370c72de99ffb688ccdce3f6d8bce898 docker network ls NETWORK ID NAME DRIVER SCOPE f6acf1d69b7c bridge bridge local 1607f5636b85 demo overlay global c051f46f8a15 host host local 4caf51fb3438 none null local

查看overlay網絡的詳細信息:

docker network inspect demo [{"Name": "demo","Id": "1607f5636b8515d7e06d2f13261d32d8370c72de99ffb688ccdce3f6d8bce898","Created": "2019-07-01T07:52:43.137469208-07:00","Scope": "global","Driver": "overlay","EnableIPv6": false,"IPAM": {"Driver": "default","Options": {},"Config": [{"Subnet": "10.0.0.0/24","Gateway": "10.0.0.1"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {},"Options": {},"Labels": {}} ]

我們會看到在node2上,這個demo的overlay network會被同步創建:

docker network ls NETWORK ID NAME DRIVER SCOPE e944ecd3d81f bridge bridge local 1607f5636b85 demo overlay global ca2b5e91ee2f host host local cfb09007c0ce none null local

創建連接demo網絡的容器

在docker-node1上創建容器

docker run -d --name test1 --network demo vincent/ubuntu-base /bin/bash -c "while true; do sleep 3600; done" c86061fd856cca0d157cc602cd9b98edd9f0fa4db9a26aa77ae2b054d6d804f1 docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c86061fd856c vincent/ubuntu-base "/bin/bash -c 'while…" About a minute ago Up About a minute

查看test1的ip:

docker exec test1 ifconfig eth0 Link encap:Ethernet HWaddr 02:42:0a:00:00:02inet addr:10.0.0.2 Bcast:10.0.0.255 Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST MTU:1450 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)eth1 Link encap:Ethernet HWaddr 02:42:ac:12:00:02inet addr:172.18.0.2 Bcast:172.18.255.255 Mask:255.255.0.0UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:16 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:1308 (1.3 KB) TX bytes:0 (0.0 B)lo Link encap:Local Loopbackinet addr:127.0.0.1 Mask:255.0.0.0UP LOOPBACK RUNNING MTU:65536 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

在docker-node2上新建容器test2:

docker run -d --name test2 --network demo vincent/ubuntu-base /bin/bash -c "while true; do sleep 3600; done" 31f87913be02db7a8033b407c559a7a213445384d735239ff6504318c5077e46

在docker-node2上測試連通性

docker exec -it test2 ifconfig eth0 Link encap:Ethernet HWaddr 02:42:0a:00:00:03inet addr:10.0.0.3 Bcast:10.0.0.255 Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST MTU:1450 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)eth1 Link encap:Ethernet HWaddr 02:42:ac:12:00:02inet addr:172.18.0.2 Bcast:172.18.255.255 Mask:255.255.0.0UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:16 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:1308 (1.3 KB) TX bytes:0 (0.0 B)lo Link encap:Local Loopbackinet addr:127.0.0.1 Mask:255.0.0.0UP LOOPBACK RUNNING MTU:65536 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

這兩個container之間可以連通。

?

https://blog.csdn.net/qq_37880968/article/details/86747883

https://www.imooc.com/article/47152

https://blog.csdn.net/u013641234/article/details/83964251

總結

以上是生活随笔為你收集整理的从零开始学习docker(八)多台机器通信的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。