温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

docker如何在不同的Linux机器上实现容器通信

发布时间:2021-11-16 14:03:02 来源:亿速云 阅读:243 作者:iii 栏目:大数据

这篇文章主要讲解了“docker如何在不同的Linux机器上实现容器通信”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“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:02           inet addr:10.0.0.2  Bcast:10.0.0.255  Mask:255.255.255.0           UP BROADCAST RUNNING MULTICAST  MTU:1450  Metric:1           RX packets:0 errors:0 dropped:0 overruns:0 frame:0           TX packets:0 errors:0 dropped:0 overruns:0 carrier:0           collisions:0 txqueuelen:0           RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B) eth2      Link encap:Ethernet  HWaddr 02:42:ac:12:00:02           inet addr:172.18.0.2  Bcast:172.18.255.255  Mask:255.255.0.0           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1           RX packets:16 errors:0 dropped:0 overruns:0 frame:0           TX packets:0 errors:0 dropped:0 overruns:0 carrier:0           collisions:0 txqueuelen:0           RX bytes:1308 (1.3 KB)  TX bytes:0 (0.0 B) lo        Link encap:Local Loopback           inet addr:127.0.0.1  Mask:255.0.0.0           UP LOOPBACK RUNNING  MTU:65536  Metric:1           RX packets:0 errors:0 dropped:0 overruns:0 frame:0           TX packets:0 errors:0 dropped:0 overruns:0 carrier:0           collisions:0 txqueuelen:1           RX 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:03           inet addr:10.0.0.3  Bcast:10.0.0.255  Mask:255.255.255.0           UP BROADCAST RUNNING MULTICAST  MTU:1450  Metric:1           RX packets:0 errors:0 dropped:0 overruns:0 frame:0           TX packets:0 errors:0 dropped:0 overruns:0 carrier:0           collisions:0 txqueuelen:0           RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B) eth2      Link encap:Ethernet  HWaddr 02:42:ac:12:00:02           inet addr:172.18.0.2  Bcast:172.18.255.255  Mask:255.255.0.0           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1           RX packets:16 errors:0 dropped:0 overruns:0 frame:0           TX packets:0 errors:0 dropped:0 overruns:0 carrier:0           collisions:0 txqueuelen:0           RX bytes:1308 (1.3 KB)  TX bytes:0 (0.0 B) lo        Link encap:Local Loopback           inet addr:127.0.0.1  Mask:255.0.0.0           UP LOOPBACK RUNNING  MTU:65536  Metric:1           RX packets:0 errors:0 dropped:0 overruns:0 frame:0           TX packets:0 errors:0 dropped:0 overruns:0 carrier:0           collisions:0 txqueuelen:1           RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

这两个container之间可以连通。

感谢各位的阅读,以上就是“docker如何在不同的Linux机器上实现容器通信”的内容了,经过本文的学习后,相信大家对docker如何在不同的Linux机器上实现容器通信这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI