相信看了前几篇文章,大家对 Docker 有了一定的了解,也掌握了 Docker 的基本使用方法。
很多时候,我们需要的不只是单独的一个服务,而是需要很多服务连接起来的,比如要搭建个博客系统,博客系统的镜像可能只包含 PHP 和 Web 服务器,但是数据的存储还需要用到服务器,这就需要再创建一个数据库容器。
但是默认情况下,每个容器都是独立的,都是不可互相访问的,如何将容器连接起来呢?
相信有一些小伙伴看了上篇《网络驱动》的文章后已经有了些想法。
小山在这篇文章就教大家如何优雅的将容器连接起来,有两种方法,为了演示方便,我会用两个基于 alpine 的容器相互 PING。
LINK 大法
这个方法应该是 Docker 最常用、简单的方法,在创建的时候指定需要连接的容器,但是局限性比较大,官方目前也不推荐使用这种方法。
先创建一个名为 mivm1 的容器:sudo docker run -dit --name mivm1 alpine /bin/sh
再创建一个名为 mivm2 的容器并连接 mivm1 :sudo docker run -dit --name mivm2 --link mivm1:mivm1 alpine /bin/sh
,这个命令新增了--link
参数,冒号前面的是需要连接的容器名称或 ID,冒号后面的是容器别名,也就是在这个容器里用什么名称来访问被连接容器,可以连接多个容器。
然后使用 mivm2 向 mivm1 发送 ping 请求:sudo docker exec mivm2 ping mivm1
这样子是可以成功 ping 的,但是如果反过来,让 mivm1 向 mivm2 发送 ping 请求,是不可以的:sudo docker exec mivm1 ping mivm2
而且如果 mivm1 被重新创建,也是不可以的。
这个方法可能会在以后被删除。
自定义网络
上一篇文章我们介绍网络驱动的时候说了 Docker 有四种网络驱动,默认使用的是桥接网络模式。
但是桥接网络驱动默认创建的和用户自定义创建的,在功能上会有所区别,最显著的区别就是,用户创建的桥接网络支持 DNS 解析,如果处于同一网络下的容器,可以直接使用容器名互相访问,比上面的 LINK 大法扩展性更高。
创建自定义桥接网络:sudo docker network create mivm-bridge
,创建网络的时候,不指定网络驱动的话,默认创建的是桥接网络。
创建两个容器并且加入我们刚刚创建的桥接网络:sudo docker run -dit --name mivm1 --network mivm-bridge alpine /bin/sh && sudo docker run -dit --name mivm2 --network mivm-bridge alpine /bin/sh
现在 mivm1 和 mivm2 可以互相的使用容器名来发送 PING 请求:sudo docker exec mivm1 ping mivm2
和sudo docker exec mivm2 ping mivm1
而且容器被重新创建也不影响,只要目标容器在这个网络里。
当然,如果容器在同一个网络里,你如果直接 ping 每个容器的 IP 地址也是可以的,但是为了管理方便,小山还是推荐大家使用以上两种方法。
好了,以上就是 Docker 容器如何相互连接的教程,也是 Docker 新手入门系列的最后一篇(暂定)。
微信扫描二维码关注我们
如果觉得文章有帮助到你,可以点击下方的打赏按钮赞助下服务器费用。
文章评论
你好。请问你可以收费帮我解决一个问题吗?
就是根据https://tomford1986.blogspot.com/2019/02/dockershadowsocks-liev.html
的教程,如何实现开自启动55 ?期待回复邮件。谢谢
@泵扽百分比 仔细看我的 Docker 系列文章,你会找到你想要的答案。
建议修改下友链打开方式,新开标签