链接在不同主机上运行的Docker容器?

时间:2016-01-22 11:19:47

标签: docker

我开始使用Docker进行基于容器的架构,我怀疑这可能是一个废话。

链接在不同主机上运行的Docker容器是否有意义?

假设我们有两个容器:

  1. barDatabase
  2. fooService
  3. 如果两者都在同一主机中,我们会将barDatabase链接到fooService,这样就可以在主机名之间进行通信。

    但如果他们在不同的机器上运行:

    1. barDatabase - > machine1.company.local
    2. fooService - > machine2.company.local
    3. 还有必要将它们联系起来吗?我们不能使用原始主机名而不链接它们吗?

      感谢。

2 个答案:

答案 0 :(得分:1)

在这种情况下,您必须从machine1中的数据库容器中公开要访问的端口,然后在machine2中,您只需指向暴露端口上的machine1,如您所料。没有必要(和AFAIK没办法)直接链接来自不同机器的容器。

答案 1 :(得分:1)

是和否。较新版本的Docker具有docker网络 - 这需要一些额外的配置,例如 - etcd来管理配置。

这样做,您可以:

docker network create sometnetname
docker run -d --net somenetname --name barDatabase yourimage

在你的另一位主持人身上:

docker run -d -p 8080:8080 --net somenetname --name fooService service_image

然后,您就可以从fooService“ping”barDatabase,就像它是主机名一样。并且fooService将附加到外部网络,并充当网关。

这适用于我的1.9.1码头工具,而不是我的1.8.2 - 在centos上。 (所以我认为这是一个1.9+的功能,但我找不到直接来源)。

更多细节: https://docs.docker.com/engine/userguide/networking/get-started-overlay/

需要设置更多的faff,因为你必须配置etcd(或其他键值存储)

我一直在使用它来在专用网络上放置一个多节点的elasticsearch实例,我认为这类似于你的用例。 (3个主机上的3个节点,其中有logstash,而kibana充当网关,以及执行某些安全/重写的nginx管理代理)