2017-09-27 44 views
1

我使用docker進行開發和生產laravel項目。我有一些不同的dockerfile用於開發和生產。例如,我在開發環境中將本地目錄掛載到docker容器,以便我不需要爲代碼中的每個更改都執行docker build。如何爲開發和生產配置不同的dockerfile

由於掛載的目錄將只在運行docker容器時可用我不能在dockerfile中爲「開發」放置「composer install」或「npm install」等命令。

目前我正在管理兩個docker文件,有沒有什麼辦法可以通過單個docker文件來做到這一點,並決定在通過發送參數進行docker構建時運行哪些命令。

我所試圖實現的是

在泊塢窗文件

... 
IF PROD THEN RUN composer install 
... 

在碼頭工人建立

docker build [PROD] -t mytag . 
+0

最好是使用相同的,並overl您的設備對生產圖像的要求。 – Matt

+0

[當我的開發環境將我的代碼庫裝入容器時,如何構建docker映像?](https://stackoverflow.com/questions/40914696/how-do-i-build-docker-images-when- my-development-environment-mounts-my-codebase) – Matt

回答

1

正如你應該試着瞄準最佳實踐使用一個Dockerfile來避免不同環境之間的意外錯誤。然而,你可能有一個用例,你不能這樣做。

Dockerfile語法不夠豐富,無法支持這種情況,但是您可以使用shell腳本來實現該功能。

創建一個shell腳本,稱爲install.sh,做一樣的東西:

if [ ${ENV} = "DEV" ]; then 
    composer install 
else 
    npm install 
fi 

在你Dockerfile添加此腳本,然後執行它建立

... 
COPY install.sh install.sh 
RUN chmod u+x install.sh && ./install.sh 
... 

當在構建通過構建ARG指定環境,例如:

docker build --build-arg "ENV=PROD" ... 
0

您可以使用兩種不同的Dockerfiles。

# ./Dockerfile (non production) 
FROM foo/bar 
MAINTAINER ... 

# .... 

,第二個:

# ./Dockerfile.production 
FROM foo/bar 
MAINTAINER ... 

RUN composer install 

在呼籲構建命令,你可以知道哪些文件應該使用:

$> docker build -t mytag . 
$> docker build -t mytag-production -f Dockerfile.production . 
+0

對不起,我讀過你現在正在做的! 但您也可以使用ENV變量,如下所示:https://stackoverflow.com/a/34545644/6849366 –

相關問題