2015-04-17 83 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'。 –

相關問題