質問: すみません。 Docker初学者です。 Dockerfileでイメージを生成し、docker-compose.ymlファイルに記述して、その2つのファイルをチームの人に共有させることで、チームの環境開発ができるという認識で大丈夫でしょうか? また、Dockerfileはわかってきたのですが、docker-compose.ymlにはイメージやコンテナ名以外に何を記述するものなのかがわかりません。コンテナを連携させるということを聞いたのですが、掴めません。 どうぞよろしくお願いします。 ちなみに今はLaravel5.6、php7.2,mysql5.7系の環境を作ろうと思っています。
回答: ### 開発イメージ 結論から書きますが、ざっくり以下のように共有して開発を進めることが多いです。 1. Dockerfileでイメージ作成 2. DockerイメージをDockerレジストリ(Docker Hub等)にプッシュ 3. プロジェクトにdocker-compose.ymlを含め、Gitリポジトリ(Github等)にプッシュ 4. Dockerfileとdocker-composeを含んだプロジェクトをGitリポジトリからプル 5. docker-composeを実行(ここで2でプッシュしたイメージが自動的にプルされます) ※1,2に関しては、Dockerの基礎知識が必須な上、学習コストも低くはないので、 kawaxさんの言うようにlaradockのようなオープンソースを利用する人も多いと思います。 ### 回答 > > Dockerfileでイメージを生成し、docker-compose.ymlファイルに記述して、その2つのファイルをチームの人に共有させることで、チームの環境開発ができるという認識で大丈夫でしょうか? > > > 上記の通り、認識は合っているように思います。 > > Dockerfileはわかってきたのですが、docker-compose.ymlにはイメージやコンテナ名以外に何を記述するものなのかがわかりません。 > > > 前提として`別にDocker Composeを使わなくても開発できます`。 それなのに、`なぜDocker Composeを使って開発するかというと作業を効率化するため`です。(みんな使ってるから使ってるという人も多いと思いますが。。。) イメージやコンテナ名以外に`docker-compose.ymlに何を記述するかというと、基本的にはdocker実行コマンドと同等の内容`です。 だからDocker Composeを使わなくても開発できるのです。 例えば、docker-composeのportsはdocker runコマンドの-pオプションに該当します。 上記は数多くのオプションの中の一例ですが、このようなオプションをdocker実行の度にコマンドで実行するのは面倒だと思いませんか? しかも自分だけでなくみんなに実行方法を共有するとなるとなおさら面倒ですよね。 そこでDocker Composeが登場するわけです。 可読性の高いyml形式で、あらかじめ実行時のオプションを定義し、それをメンバーと共有することで、開発作業の効率化が図れるわけです。 上記の他にもdocker-composeには多くの機能がありますが、ここでは質問に対する回答にとどめさせていただきます。