Docker新手入门:容器的连接

教程分享 [db:作者] 4个月前 (06-26) 144次浏览 0个评论

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

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

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

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

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

Docker 新手入门:容器的连接

LINK 大法

这个方法应该是 Docker 最常用、简单的方法,在创建的时候指定需要连接容器,但是局限性比较大,官方目前也不推荐使用这种方法。

先创建一个名为 mivm1 的容器:

1
sudo docker run -dit --name mivm1 alpine /bin/sh

再创建一个名为 mivm2 的容器并连接 mivm1 :

1
sudo docker run -dit --name mivm2 --link mivm1:mivm1 alpine /bin/sh

这个命令新增了

1
--link

参数,冒号前面的是需要连接的容器名称或 ID,冒号后面的是容器别名,也就是在这个容器里用什么名称来访问被连接容器,可以连接多个容器。

然后使用 mivm2 向 mivm1 发送 ping 请求:

1
sudo docker exec mivm2 ping mivm1

这样子是可以成功 ping 的,但是如果反过来,让 mivm1 向 mivm2 发送 ping  请求,是不可以的:

1
sudo docker exec mivm1 ping mivm2

而且如果 mivm1 被重新创建,也是不可以的。

这个方法可能会在以后被删除。

自定义网络

上一篇文章我们介绍网络驱动的时候说了 Docker 有四种网络驱动,默认使用的是桥接网络模式。

但是桥接网络驱动默认创建的和用户自定义创建的,在功能上会有所区别,最显著的区别就是,用户创建的桥接网络支持 DNS 解析,如果处于同一网络下的容器,可以直接使用容器名互相访问,比上面的 LINK 大法扩展性更高。

创建自定义桥接网络:

1
sudo docker network create mivm-bridge

,创建网络的时候,不指定网络驱动的话,默认创建的是桥接网络。

创建两个容器并且加入我们刚刚创建的桥接网络:

1
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 请求:

1
sudo docker exec mivm1 ping mivm2

和 s

1
udo docker exec mivm2 ping mivm1

而且容器被重新创建也不影响,只要目标容器在这个网络里。

当然,如果容器在同一个网络里,你如果直接 ping 每个容器的 IP 地址也是可以的,但是为了管理方便,小山还是推荐大家使用以上两种方法。


好了,以上就是 Docker 容器如何相互连接的教程,也是 Docker 新手入门系列的最后一篇(暂定)。

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


速通主机速通主机
转载请注明原文链接:Docker 新手入门:容器的连接
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址