2017-09-27 12 views
1

私はドッカーを開発用に、そして生産用にlaravelプロジェクト用に使用しています。私は開発と生産のために少し違うドッカーファイルを持っています。たとえば、コードの変更ごとにドッカーのビルドを行う必要がないように、開発環境のドッキング・コンテナーにローカル・ディレクトリーをマウントしています。開発と生産のために異なるドッカーファイルを構成する方法

ドッキング用のコンテナを実行するときにのみマウントされたディレクトリは、開発者用のdockerfileに "composer install"や "npm install"のようなコマンドを置くことはできません。

現在、私は2つのドッカーファイルを管理しています。単一のドッカーファイルでこれを実行し、パラメータを送信してドッキングビルドを実行するときに実行するコマンドを決める方法はありますか?私が達成しようとしています何

は、ドッキングウィンドウの間に

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

は、次の2つの異なるDockerfilesを使用することができます

docker build [PROD] -t mytag . 
+0

同じものを使用するのが最適ですプロダクションイメージ上のあなたのdev要件。 – Matt

+0

[開発環境でコードベースがコンテナにマウントされたときにドッキング画像を作成するにはどうすればよいですか?](https://stackoverflow.com/questions/40914696/how-do-i-build-docker-images-when-私の開発環境マウント-my-codebase) – Matt

答えて

1

あなたが目指してみてくださいベストプラクティスとして1つのDockerファイルを使用して、異なる環境間の予期しないエラーを回避します。しかし、あなたはそれをすることができないユースケースを持っているかもしれません。

Dockerfileのシンタックスでは、このようなシナリオをサポートするには十分ではありませんが、シェルスクリプトを使用してそのようなシナリオをサポートできます。指定するには、ビルド引数を渡す構築する場合

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

を構築するときに、あなたのDockerfileで

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

は、このスクリプトを追加し、それを実行します。

のような何かをすることinstall.shと呼ばれ、シェルスクリプトを作成します。環境:例:

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

を構築ドッカファイルで

です。

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

# .... 

2つ目:

# ./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 –

関連する問題