Docker 新手入门:容器的连接

2019-06-26 4479点热度 3条评论

相信看了前几篇文章,大家对 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 群小山进行探讨。

微信公众号二维码

微信扫描二维码关注我们

如果觉得文章有帮助到你,可以点击下方的打赏按钮赞助下服务器费用。

小山

一个什么都不会但要装作很厉害的人

文章评论

  • 泵扽百分比

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

    2019-07-11
    • 小山

      @泵扽百分比 仔细看我的 Docker 系列文章,你会找到你想要的答案。

      2019-07-12
  • 萧丶默

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

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