1. ホーム
  2. docker

開発用と本番用で異なるdockerfileを構成する方法

2023-10-15 10:36:49

質問

laravelのプロジェクトで、開発用と本番用のdockerを使用しています。開発用と本番用で若干異なるdockerfileを持っています。例えば、私は開発環境のDockerコンテナにローカルディレクトリをマウントして、コードの変更のたびにDockerビルドを行う必要がないようにしています。

マウントされたディレクトリは、Dockerコンテナの実行時にのみ利用可能なので、開発用のdockerfileに "composer install" や "npm install" のようなコマンドを入れることができません。

現在、2つのdockerファイルを管理していますが、これを1つのdockerファイルで行い、docker build時に実行するコマンドをパラメータで決める方法はないでしょうか。

私が達成しようとしていることは

ドッカーファイルで

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

dockerビルド時

docker build [PROD] -t mytag .

どのように解決するのですか?

UPDATE(2020年)です。 これが3年前に書かれて以来、多くのことが変わりました(このトピックに関する私の意見も含めて)。私が提案する方法は 1つのdockerfile を使用し、スクリプトを使用することです。詳しくは yamenk さんの回答 .

ORIGINAL:

2種類のDockerfilesを使用することができます。

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