質問: docker-composeに以下のように書くものをよく見ます。 ``` services: web: build: Dockerfileパス ``` これはDockerfileパスにあるDockerfileからイメージを作成するということだと思いますが、なぜimageを使わないのでしょうか。 配布されているimageでは自分が使いたいimageがない。そこでDockerfile経由で使いたいimageを作成する、これを意図しているのでしょうか? もしこの推測が正しいならDockerfileから作成したimageをdocker-compose.ymlにimage: 以前Dockerfileで作成したimageなんてことをしても良いのでしょうか? つまり以下のようなことです。 ``` services: web: image: (以前Dockerfileで作成したImage) ```
回答: > > 配布されているimageでは自分が使いたいimageがない。そこでDockerfile経由で使いたいimageを作成する、これを意図しているのでしょうか? > > > 実際の意図はプロジェクトの作成者次第ですが、 `docker-compose.yml` で `Dockerfile` を使わざるを得ない理由としては、 そのとおりです。 Docker Hub などで公開されている既存のイメージを利用して問題ないのであれば、 利用した方が車輪の再発明を防ぐことができます > > Dockerfileから作成したimageをdocker-compose.ymlにimage: 以前Dockerfileで作成したimageなんてことをしても良いのでしょうか? > > > `Dockerfile` を使ったイメージのビルドに時間がかかるようであれば、 そのようにした方が開発時の生産性が上がります 一方で、イメージの仕様の変更が度々必要な状況では、 都度、イメージの事前ビルドが必要になります なので、`Dockerfile` 内の命令のうち、 仕様があまり変わらない部分を事前ビルド用の `Dockerfile` に移して事前ビルドし、 まだ仕様があまり固まっていない部分は Docker Compose 側の `Dockerfile` で都度編集すると 開発中にビルドにかかる時間を最小化でき、生産性が上がるのでおすすめです