docker 容器之间通信_每天5分钟|轻松掌握开发必会的docker套路-容器间通信

7c0b79a29a9dae34a769f1393d1dee3c.png

容器之间的通信

前面介绍了单个容器的配置和一些简单的操作,但是实际运用中肯定不止一个容器。

当安装lnmp环境的时候,根据一个服务一个容器的规则,我们就需要3个容器,分别是nginx容器,php-fpm容器和mysql容器。

而且这三个容器之间要相互通信,nginx要能够访问php-fpm,php-fpm需要能访问mysql。

那今天我们就来看看,容器之间如何访问?


用容器的ip互相通信

我们先启动两个容器,分别为:nginx-1和nginx-2,如下:

8f585f040b5ccef40cca01c94f503ebf.png

fe12e9223c67eb6afb890fa7b947ed1c.png

当docker容器启动的时候,docker会默认给当前容器被分配一个随机的ip。

分别进入两个容器,通过查看容器的本地host文件,可以查看两个容器自身的ip!

nginx-1容器获得的ip是172.18.0.2

700f2ecae280467dfaba223bc125350c.png

nginx-2容器获得的ip是172.18.0.3

541d5839da6f9155106fb7f497364f8a.png

在容器nginx-2中,访问容器nginx-1,我们执行curl看一下

02ede9ed43286497d5cc9e6e68323cf2.png

可以看到,成功的输出了结果,说明通过ip,容器nginx-1是可以和容器nginx-2之间访问的。

但ip访问的方式存在一个问题,就是docker服务一旦重启之后容器的ip就会变更。

ip一旦变更,容器之间就会访问不了,因此,我们来看看docker推荐的容器间互相通信的方式。


用link进行互相通信


通过link的方式(官方已经不推荐,故不作说明)

通过自定义网络使容器互相通信

Docker从1.12版本以后提供了docker network的方式,来建立两个容器的连接。

其原理很简单,用户自定义创建一个网络,然后把容器加入到这个网络中,则该网络中的容器可以互相通信。

操作概述:用docker network命令创建一个自定义的桥接网络,然后在docker run命令执行的时候加上几个参数即可将容器加入这个网络中。

具体操作步骤如下

(1)通过docker network命令创建一个名叫my-test-net的网络。

docker network create my-test-net

效果:

15ba0b74be1fe6db7ff6da37defe2594.png

(2)启动我们的容器nginx-1,并将容器nginx-1加入到网络my-test-net,注意命令参数

docker run -d -p 8080:80 --name nginx-1 --network my-test-net --network-alias net-nginx-1 nginx

我们会看到,这一次docker run命令后面多了两个选项参数分别是--network和--network-alias。

--network 代表你要加入的网络叫什么,这里我们填写的是上面刚创建的my-test-net。

-net--network-alias 可传可不传,代表你加入桥接网络之后你的名称叫什么,这里取名叫做net-nginx-1,别人连接你的时候也是通过这个标识来识别,也可以不设置别名,连接的时候用容器名去连接。

效果如下:

ecbe0c114d38064e68761264c5ed8f31.png

(3)启动我们的容器nginx-2,并将容器nginx-2加入到网络my-test-net,同样注意命令参数

docker run -d -p 8181:80 --name nginx-2 --network my-test-net --network-alias net-nginx-2 nginx

效果如下:

9ba11dfbcdff35e00bf44a43ab6e2248.png

(4)两个容器都加入到同一个桥接网络,那容器之间就可以互相通信了,我们怎么访问呢?

来到nginx-2容器中,不再是访问对方的ip了而是访问容器nginx-1在网络中的别名或者容器名。

curl net-nginx-1

或者也可以直接连接这个容器的名字:

curl nginx-1

效果如下:

2ad5626f35686ad3a9a3deacf742903a.png

通过自定义网络,我们在docker重启之后,只需要将容器加入到网络中,就可以互相通信,也就不用担心ip变更的问题了。

最后,附上整理的docker network命令的列表:

create创建一个网络
用法:docker network create [OPTIONS] NETWORK

ls显示网络列表
用法:docker network ls


inspect显示现有网络的详细信息
用法:docker inspect [OPTIONS] NAME|ID [NAME|ID...]


rm移除指定的网络
用法:docker network rm NETWORK [NETWORK...]


prune移除所有无用的网络
用法:docker network prune


connect将容器连接到一个网络
用法:docker network connect [OPTIONS] NETWORK CONTAINER


disconnect将容器断开一个网络
用法:docker network disconnect [OPTIONS] NETWORK CONTAINER

好啦,这就是今天的全部内容,如果您有疑问,可以在下方留言哦~

公众号:老何漫话

id:laohemanhua

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值