2017-04-24 15 views
2

我都可能有一個碼頭工人文件看起來像這樣:我應該運行作曲家安裝我的泊塢窗內建立

COPY . ./ 
RUN composer install --no-dev --no-interaction -o 

,但我有私人回購我composer.json,這需要我的SSH複製碼頭構建的鍵可以正常工作。我感到不舒服,在我的PHP應用程序泊塢窗圖像中打包我的ssh密鑰。

可替換地,我可以運行作曲家安裝搬運工構建(在例如build.sh bash腳本)的外側和供應商之後副本的目錄/已被填充。這是一個正確的方法嗎?

有沒有其他方法可以解決這個問題?

回答

5

這是一個介紹,我已經遇到了幾次了,實際上是一個原則一個很好的問題在兩個獨立但相關問題:

1)如何最好地處理臨時文件在泊塢

碼頭工人在ENCA是偉大的規劃一個環境的全部和全部娛樂。如果您在容器外「處理」部分流程,即在docker build流程之外運行composer install,那麼您的可移植構建流程便宜,因爲您可能引入了您不知道的機器/環境依賴關係。

如果你總是在Docker中重建完整的環境,那麼你可以保證你的依賴關係總是滿足的,你可以將dockerfile給予任何其他人,他們也會很有信心在本地重建而不會出現問題。

的臨時文件是理想的內泊塢建設!所以我會盡可能在容器內構建它們。

2)如何進行去耦授權,泊塢建造過程

這使我們對第二個問題,如何去夫婦建立的授權?

選項1 - 烘烤在作曲家身份驗證。JSON與creds對於一個新建的用戶:

至於其他的答案說,你可以「烤在」憑據,然後再刪除它們。但是你不想'像'ssh鍵那樣敏感。 Composer支持auth.json文件,那麼爲什麼不創建專用的構建用戶並將其聲明(而不是您的聲明)存儲在auth.json文件中?如果它被破壞,你可以改變密碼。一旦作曲家安裝完成刪除或覆蓋文件。

COPY . ./ 
RUN composer install --no-dev --no-interaction -o 
RUN rm -f ./auth.json 

選項2 - 讓vim的信任狀本身瞬變和泊塢窗EXEC它們傳遞到多克爾容器:

我還沒有完全測試這種方法,但我不明白爲什麼東西像這樣不行。

1)你建基地PHP容器中,使得它在運行

,其能夠運行「作曲家安裝」(或使用一個從搬運工集線器)

2.)你旋轉起來此基礎容器的

3.)您使用docker exec將您的信用傳遞給已經烘焙到容器中的包裝腳本。包裝程序腳本將運行作曲家使用HTTP基本身份驗證安裝 - 它已經在用戶名出爐的,所以你只需要爲每http-basic technique

docker exec -d my_base_php_container php -f /my_wrapper_script.php ${PASSWORD} 

4.提供密碼)您提交此容器,一個新的形象

docker commit --change "composer install" ${CONTAINER_ID} my_installed_image:1.0 
+0

因此,您在內部構建的主要參數是在圖像內部具有所需的所有依賴關係?爲什麼不建立一個私人的建築圖像,然後複製出創建的工件。這樣 - 我有一個一致的構建過程,沒有任何信譽或SSH密鑰,並且我的部署映像也沒有像composer這樣的不必要的圖層。 – NiRR

+0

是的,擁有圖像內的所有依賴性可以提供一致性和可移植性。爲什麼不讓我們的碼頭容器創建工件?好問題,這是另一個好方法!這是我以前使用Maven Docker鏡像嘗試過的,您可以將POM文件傳遞給它,它可以工作,注意事項是1.)如果auth在docker外部,您如何獲得其他人(包括構建服務器/管道)也建立你的形象?和2.)你如何從容器中提取神器? (你可以使用卷掛載來實現這一點,但這可能會引入env特定的依賴關係) – GreensterRox

2

我想在你所描述的情理之中的事作曲家安裝泊塢窗構建的外部的情況。

你通常有構建您的應用程序代碼的初始構建過程。這個版本可能會運行一些測試或自動化測試,然後生成包含運行應用程序所需的所有代碼的工件。這將包含您的源代碼,以及您的供應商文件夾和任何自動生成的代碼(ORM類,緩存等)。這些工件通常是tar文件。

你會那麼僞代碼複製到你的碼頭工人容器在隨後的泊塢窗的構建。

+0

我傾向於這種方法。我可能想在測試完圖像之後測試圖像,而不是之前,甚至考慮到我可能需要運行一個mysql容器。我爲什麼要tar文件?我的最終圖像可能是一個php/apache圖像。 – NiRR

0

您可以隨時進行構建,這將複製〜/ .ssh,運行作曲家安裝,然後rm鍵...之後,如果將來需要使用ssh - 在docker-compose(或正常通過-v)你只是安裝的.ssh本地使用量/ -v運行:)