撸了今年阿里、头条和美团的面试,我有一个重要发现.......>>>

在上一节中,我们介绍了在同一个机器里面同一个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(八)多台机器通信相关推荐

  1. 从零开始学习jQuery (八) 插播:jQuery实施方案

    本系列文章导航 从零开始学习jQuery (一) 开天辟地入门篇 从零开始学习jQuery (二) 万能的选择器 从零开始学习jQuery (三) 管理jQuery包装集 从零开始学习jQuery ( ...

  2. ROS学习笔记-多机器人通信(1)-实现两台机器通信

    ROS是一个分布式的计算环境.一个正在运行的ROS可以在多个机器人之间分布成几十甚至上百个节点.取决于系统的配置方式,任何节点可能需要随时与任何其他节点进行通信,为实现使用同一个master控制多台机 ...

  3. [297]从零开始学习Docker

    这篇文章是我学习 Docker 的记录,大部分内容摘抄自 <<Docker - 从入门到实践>> 一书,并非本人原创. 学习过程中整理成适合我自己的笔记,其中也包含了我自己的实 ...

  4. 从零开始学习docker(十七)Swarm mode ---service

    撸了今年阿里.头条和美团的面试,我有一个重要发现.......>>> 上一节中,我们学习了如何搭建一个swarm集群.本节中,我们介绍如何操作service. service,大家应 ...

  5. 从零开始学习docker(六)部署一个稍微复杂一点的应用

    我们之前讲过部署一个简单的Python程序. 这一节我们将这个Python程序进行一个扩展,连接redis数据库,并对redis进行一些操作, 新建App.py,内容如下: from flask im ...

  6. 从零开始学习docker(十五)Swarm mode 介绍

    撸了今年阿里.头条和美团的面试,我有一个重要发现.......>>> 一般情况下,我们都在一台机器下部署容器,但实际情况下,应用如果只在一台机器上无法满足我们的需求,包含的容器比较多 ...

  7. 多个php一个机器,如何利用docker在同一台机器上搭建多套php开发环境?

    首先是一个容器要包含完整的程序加依赖(出去中间件),拿 LNMP 举例子:docker 提供的是 Linux 环境,容器中要包含 Nginx 和 Php,然后再单独部署一个 MySQL 其次,如果多个 ...

  8. 从零开始学习docker(十八)Swarm mode 部署wordpress

    撸了今年阿里.头条和美团的面试,我有一个重要发现.......>>> 本次我们部署一个稍微负复杂的application--wordpress. 之前我们使用docker run分别 ...

  9. 从零开始学习docker(十九)Swarm mode 集群服务间通信--RoutingMesh

    撸了今年阿里.头条和美团的面试,我有一个重要发现.......>>> 在上一节中,我们介绍了通过service create部署了wordpress和mysql,我们发现了几个问题: ...

最新文章

  1. python数列分段_按范围分段的Python数组
  2. 常见的新算法的标准测试函数(Ackely,Rastrigin,Griewangk,SumSquartes,Sphere,Quartic,Schwefel' Problem等)
  3. 飞鸽传书是企业网络营销管理专家
  4. ninjala服务器维护,Ninjala2.0版本更新内容一览
  5. 【C++】C++为什么要引入引用这个复合类型?
  6. 枫之谷m平板玩服务器维护,枫之谷 M无法连接服务器是什么原因
  7. 已知平面上两点坐标及半径,求过两点圆弧的圆心坐标
  8. 「大数据成神之路」第四版更新完毕
  9. HTML5 学习总结(一)——HTML5概要与新增标签
  10. 写bat文件,报系统找不到指定文件的处理方式
  11. Internet Download Manager(V6.37版本IDM)免费序列号密钥激活版使用过程中的一些常见问题
  12. 小程序和钉钉发版后老版缓存的问题调研
  13. 工作仅一年就被迫跳槽的感想
  14. FFmpeg修改源码支持H265
  15. k8s 1.24.0版本使用nfs-provisioner4.0.0动态创建PV
  16. 微信大改版,不止炸群、放烟花,这些有趣功能你也需要了解下
  17. 常用putty命令汇总
  18. BASE64加密解密及乱码问题
  19. VB.net 微信公众平台开发(一) Token验证
  20. 《趣学CCNA——路由与交换》一6.2 Cisco设备的管理与配置

热门文章

  1. 在sql server2000的查询分析器里查询oracle的数据
  2. 23种基本设计模式简介
  3. python 百度词典_python在线抓取百度词典的翻译结果翻译单词
  4. 实体类(VO,DO,DTO)的划分
  5. SpringBoot-@RequestParam
  6. RabbitMQ的消息确认ACK机制
  7. Golang CSP并发模型
  8. PHP的xdebug安装步骤以及遇到的坑
  9. PHP数组推入弹出的函数:头进头出array_unshift/array_shift 尾进尾出array_push/array_pop
  10. 在线apt-get安装mysql_Linux Debain 通过apt-get 方式快速安装Mysql