2015-05-14 92 views
0

我們正在爲持續集成工作流運行mesos羣集和jenkins。 Jenkins配置了mesos插件。在docker(dind)中共享docker.sock或docker

以前我們在meos容器中構建了我們的碼頭圖像。現在我們正在切換到碼頭集裝箱以建立我們的碼頭圖像。

我一直在尋找在碼頭集裝箱內建造碼頭圖像的優勢,像碼頭集線器上發現的像這樣一個「dind-jenkins-slave」的後期圖像。

隨着共享主機的docker.sock,你會失去緩存機會。並且,您還必須推送特權參數。

只是共享主機的docker.sock有什麼缺點?

回答

0

我正在使用共享docker.sock方法。我看到的唯一缺點是安全性 - 當您可以運行任何碼頭集裝箱時,您可以用主機完成所有任務。但是,如果您信任創建工作或可以控制哪些碼頭容器可以從jenkins運行哪些選項,那麼允許訪問主碼頭守護程序是一個簡單的解決方案。

0

這取決於你在做什麼,真的。爲了讓我們的詹金斯工作真正地分離開來,以便我們可以並行運行儘可能多的東西,我們切換到了DinD。如果您共享主機套接字,您仍然只有一個docker守護進程衝突,從單獨的作業中拉出/推送多個圖像,以及依賴於另一個作業也混淆的圖像或構建的一個作業都是問題。

爲了解決緩存問題,我創建了dind容器並將其放在一邊。我跑

docker start -a dindslave || docker run -v $ {WORKSPACE}:/ data my/dindimage jenkinscommands.sh

然後jenkins將其命令寫入jenkinscommands.sh並每次重新啓動容器。當你刪除容器時,你也會刪除你的緩存,並且如果你想要的話你不會在作業之間共享緩存......但是你不必考慮相互干擾或者確保它們正在運行的作業在同一主機上。