docker的容器间通信

引言

在使用docker的过程中,每创建一个容器都会为其分配一个ip地址,如果直接使用ip地址通讯的话,虽然能够通讯,但也太麻烦了,最重要的是这个ip地址还会变化,下次重启容器说不准程序就跑不通了,与是乎就出现了以下两种通信的方式,其本质上也是通过访问容器名称这个域名经过docker的dns服务器自动解析成ip地址。

使用–link

这种方式适用于,已经有一个容器正在运行,在第二个容器启动时加上参数--link 容器名称,就可以访问第一个正在运行的容器了。

例如:

当前有一个容器名称为centos_1的容器正在运行

lxy@DESKTOP-74EDKD3:~$ docker ps
CONTAINER ID   IMAGE            COMMAND       CREATED        STATUS         PORTS     NAMES
7e0c0f7a46f9   centos:centos7   "/bin/bash"   17 hours ago   Up 2 seconds             centos_1

现要创建另一个容器去连接第一个容器

docker run -id --name centos_2  --link centos_1 centos:centos7
  • --link centos_1 :表示当前要创建的容器要连接centos_1这个容器

测试:

lxy@DESKTOP-74EDKD3:~$ docker exec -it centos_2 bash # 进入centos_2容器
[root@2879a10f92f1 /] ping centos_1 # 访问centos_1容器
PING centos_1 (172.17.0.2) 56(84) bytes of data.
64 bytes from centos_1 (172.17.0.2): icmp_seq=1 ttl=64 time=0.133 ms
64 bytes from centos_1 (172.17.0.2): icmp_seq=2 ttl=64 time=0.074 ms
64 bytes from centos_1 (172.17.0.2): icmp_seq=3 ttl=64 time=0.043 ms
64 bytes from centos_1 (172.17.0.2): icmp_seq=4 ttl=64 time=0.039 ms
64 bytes from centos_1 (172.17.0.2): icmp_seq=5 ttl=64 time=0.045 ms
^C
--- centos_1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4172ms
rtt min/avg/max/mdev = 0.039/0.066/0.133/0.036 ms

使用自定义网络

docker默认的bridge网络是不能把容器名称作为ip进行通讯的,只有自定义网络才行。在自定义网络中的容器之间可以相互通讯。

  • 创建自定义网络
docker network create -d bridge my-net
# y
docker network create my-net  # 参数可以省略,默认创建的就是桥接类型的网络
  • 启动容器时明确指定使用哪个网络
docker run -id --name centos_2  --network my-net centos:centos7
  • 启动容器后加入到某个网络
docker network connect my-net centos_1 # 把容器centos_1加入自定义网络my-net
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值