簡體   English   中英

我應該在我的docker build中運行composer install

[英]should I run composer install inside my docker build

我可能有一個看起來像這樣的docker文件:

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

但我在我的composer.json中有私有存儲庫,這要求我復制ssh鍵以使docker構建正常工作。 我覺得在我的php應用程序docker鏡像中包裝我的ssh鍵感到很不舒服。

或者,我可以在docker build之外運行composer install(例如在build.sh bash腳本中),並在填充vendor /之后復制目錄。 這是正確的方法嗎?

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

這是一個非常好的問題,它描述了我現在面對過幾次的原則,實際上是兩個獨立但相關的問題:

1.)如何最好地處理Docker中的瞬態文件

Docker非常擅長封裝環境的全部和完全重新創建。 如果您在容器“外部”處理部分進程,即在docker build過程之外運行composer install ,那么您的可移植構建過程就會減少,因為您可能已經引入了您不了解的機器/環境依賴性。

如果你總是在Docker中重建完整的環境,那么你可以保證你的依賴關系總是得到滿足,並且你可以將dockerfile提供給其他任何人,並且他們也很有信心能夠在沒有問題的情況下在本地重建。

瞬態文件非常適合在Docker中構建! 所以我會嘗試盡可能在容器內構建它們。

2.)如何從Docker構建過程中解除授權

這引出了我們的第二個問題,如何從構建中解除授權?

選項1 - 在作曲家auth.json中烘焙,其中包含專用構建用戶的信用卡:

正如其他答案所說,您可以“烘焙”憑據,然后再次刪除它們。 但是你不想像你的ssh鍵一樣“烘烤”敏感的東西。 Composer支持auth.json文件,那么為什么不創建一個專用的構建用戶並在auth.json文件中存儲其cred(而不是你的)? 如果它受到損害,您可以更改密碼。 編輯器安裝完成后刪除或覆蓋文件。

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

選項2 - 使信用卡本身成為瞬態並使用docker exec將它們傳遞到Docker容器中:

我還沒有完全測試過這種方法,但我不明白為什么這樣的東西不起作用。

1.)你構建了一個基本的PHP容器,它能夠運行'composer install'(或者使用docker hub中的一個)

2.)你旋轉這個基礎容器,使其運行

3.)您使用docker exec將您的信用卡傳遞給已經烘焙到容器中的包裝腳本。 包裝器腳本將使用HTTP基本身份驗證運行composer install - 它已經具有用戶名,因此您只需要根據http-basic技術提供密碼

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

滑稽。 發布此問題僅幾天后,Docker 17.05就發布了,並為此提供了一個解決方案: 多階段構建 只需將您的作曲家內容放入dockerfile並構建您的應用程序即可。 然后,開始第二階段並將您的應用程序復制為第一階段的構建工件。

我認為在你描述的情況下,在docker build之外進行composer安裝是有意義的。

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

然后,您可以將該代碼工件復制到后續docker構建中的docker容器中。

您可以隨時進行構建,即COPY~ / .ssh,運行composer install然后運行rm鍵......之后,如果以后需要使用ssh - 在docker-compose中(或通常由-v)你只需在運行期間使用volume / -v在本地掛載.ssh :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM