2015-04-17 86 views
5

我很难搞清楚如何互连属于同一主机上运行的不同码头工程项目的容器。如何使用docker-compose在同一主机上的不同部署中连接Docker容器?

比方说,我有在部署一组容器的

[email protected]:~# docker ps | awk '{print $2}' | grep "cl" 
cl-worker:latest 
cl-nginx:latest 
cl-app:latest 
cl-rabbitmq:latest 
cl-memcached:latest 
cl-db:latest 

所有这些容器,其中来自一个单独的配置文件deployment-a.yml推出。现在,我们也有不同的部署乙,拥有自己的`部署-b.yml:

[email protected]:~# docker ps | awk '{print $2}' | grep "stockagents" 
stockagents-app:latest 

是否有可能从stockagents-app通过一些特定的配置在deployment-b.yml Access数据库(cl-db容器)和/或deployment-a.yml

注:我知道如何使用纯docker命令,并通过--link链接容器它做的事,但有实现仅用docker-compose和它的配置文件相同的行为的方法?

+0

您可以使用skydns和调节器在创建Docker容器时执行自动DNS注册。这很酷。那么你的容器可以通过名字相互引用。 – Greg

+0

@Greg快速谷歌搜索显示skydns需要'etcd'运行,这又需要它自己的配置。此外,我在ubuntu上运行,默认情况下它没有启用etcd :(这看起来像是一个复杂的解决方案,用于容器之间的主机间通信的一般情况。 –

+0

这是一个复杂的问题,但是,对吗?你想要“发现”彼此的组合,是否只有一个docker实例,或者是否有潜在的许多(swarm,fleet,k8s等)?听起来你想要一些轻量级的东西。你想要的是每个作品可以装入的通信量,你知道,也许是一个目录,一个写'我在X地址',另一个读取? – Greg

回答

2

看来docker-compose(至少1.5.2)的最新版本支持"external_links" optiondocker-compose.yml文件,该文件允许指定在当前配置之外启动的容器。

这正是我试图在不同部署中的容器之间共享公共服务(例如MySQL)时所寻找的功能。

0

似乎你的需求超出了码头合成的机会。你需要混淆编排工具(或多或少的复杂)。我们也使用Ubuntu,并为我们的环境SkyDNS + SkyDock似乎是一个很好的和简单的解决方案(当然没有etcd需要)。部署包括三个步骤:您只需要拉取图像,重新配置docker守护进程并启动SkyDNSSkyDock。如果你熟悉俄语,你可以找到很好的部署指南here

此解决方案的主要优势是Docker环境中提供了新的DNS区域。容器可以通过名称互相呼叫。但由于反向查找是缺乏SkyDNS,你需要明确地传递主机名:

web: 
    image: django 
    hostname: web.django.dev.skydns.local 
    build: ./webapp 
    ports: 
    - "8000:8000" 
    environment: 
    - DEBUG=true 
    - SEND_EMAILS=false 

在这种方式下您的容器将可通过名称web.django.dev.skydns.local从任何容器内。

+0

“SkyDNS”确实不需要'etcd'吗? [主页上的''Setup/Install'部分](https://github.com/skynetservices/skydns#setup--install)的第一行明确提到使用'etcd'的配置。此外,我很快浏览了您提到的文章,并且提供的解决方案需要在现有配置旁边运行两个不同的容器。无论如何,感谢提及这些服务,我可能会进一步探讨“服务自动发现”的方向。 –

+0

@AndrewDruchenko您指出的是“SkyDNS2”。但我建议你先试用老版本'''SkyDNS''(实际上它在文章中有描述)。它不需要'etcd'。 –

相关问题