Docker 新手入门:容器的连接

相信看了前几篇文章,大家对 Docker 有了一定的了解,也掌握了 Docker 的基本使用方法。

很多时候,我们需要的不只是单独的一个服务,而是需要很多服务连接起来的,比如要搭建个博客系统,博客系统的镜像可能只包含 PHP 和 Web 服务器,但是数据的存储还需要用到服务器,这就需要再创建一个数据库容器。

但是默认情况下,每个容器都是独立的,都是不可互相访问的,如何将容器连接起来呢?

相信有一些小伙伴看了上篇《网络驱动》的文章后已经有了些想法。

小山在这篇文章就教大家如何优雅的将容器连接起来,有两种方法,为了演示方便,我会用两个基于 alpine 的容器相互 PING。

Docker 容器的连接

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 新手入门系列的最后一篇(暂定)。

如果有任何不懂的地方,欢迎加入 QQ 群与小山进行探讨。

微信公众号二维码

微信扫描二维码关注我们

点赞

  1. 泵扽百分比说道:

    你好。请问你可以收费帮我解决一个问题吗?
    就是根据https://tomford1986.blogspot.com/2019/02/dockershadowsocks-liev.html
    的教程,如何实现开自启动55 ?期待回复邮件。谢谢

    1. 小山说道:

      仔细看我的 Docker 系列文章,你会找到你想要的答案。

  2. 萧丶默说道:

    建议修改下友链打开方式,新开标签

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据