目次
docker-composeとは
docker-composeとは複数のコンテナから成るサービスを自動的に構築、起動してくれる便利なツールです。
イメージとしては画像のように2つのコンテナがあるとして、コンテナ同士はネットワークといわれるもので通信状態にすることが可能です。
その結果、コンテナ1で記事を作成すればコンテナ2のDBにデータを保存することができるわけです。

docker-composeを使うメリット
複数のコンテナがネットワークといわれるもので通信し、データのやり取りをしているということは理解頂けたかと思います。
では何故、DockerFileで一つのコンテナに集約するのではなく、docker-composeを使いコンテナを分けるのか。
それには下記のようなありがたいメリットがあるからなんですね。
① コンテナを分けるため管理がしやすい
② 実行コマンドが簡潔
他にもメリットと言われるものはありますが、分かりやすく大きなメリットは上記2つが挙げられますね。
では①から見ていきましょう。
コンテナを分けるため管理がしやすい
例えば、centOSのイメージをベースにWordPress、MySQLのインストール情報等を一つのDockerFileに記述していくとしましょう。
しかし、それではどこに何が書いてあるのか一目で判断し辛く、MySQLに関する情報を変更するつもりが間違えてWordPressの方を変更してしまった・・・
なんてことが絶対にないとは言い切れません。
ですが、WordPress、MySQL用とDockerFileを分けることで、そのような手違い、ミスをなくすことができ、バージョン管理等も容易に行うことができます。
MySQLについて変更したければ、MySQL用のDockerFileを開けばいいですからね。
では、ここでちょっとしたポイント。 DockerFileとdocker-composeの違いを簡単に確認しておきましょう。
DockerFile
DockerImageの作成手順、構成情報
docker-compose
コンテナの作成と起動方法、ネットワークを使ったコンテナ同士の連携
イメージを元にコンテナは作成されるので、流れとしては下記のようになります。

この手順を一括で行ってくれるのがdocker-composeということなんですね。
実行コマンドが簡潔
前述の通り、docker-composeはbuild~runを基本的に一つのコマンドで行ってくれます。
1 |
docker-compose up -d |
設定ファイルに情報を記述し、後は上記実行コマンドを打つだけなので誰でも簡単にコンテナを作ることが可能ですね。
docker-composeの書き方
docker-composeはヤムルといわれるkey valueの形式で記述していくことができます。
そのため作成するファイルはdocker-compose.ymlとなりますね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
version: '3' services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: somewordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: wordpress:latest ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress volumes: db_data: |
上記はWord Pressの公式docker-compose.ymlとなります。
ではこちらのdocker-compose.ymlを参考に一つずつ分解して見ていきましょう。
version
Docker Composeで使用するバージョンとなります。
バージョンは3まであります。
services
こちらのservicesに分けられた項目ごとに記述した構成情報に従いコンテナが作成されます。
なので、今回はdbとwordpressという二つのコンテナが作成されますね。
image
コンテナを作成するためのイメージですね。
今回はimageを直接指定していますが、DockerFileを指定することも勿論可能です。
volumes
データの永続化を目的とした機能であり、コンテナが削除されても volume が明示的に破棄されない限り、volume 中のデータは保持され続けます。
ホスト側のディレクトリをキー、コンテナ側のディレクトリをバリューとして記述します。
既存のプロジェクトがあるホスト側のディレクトリをコンテナ側のディレクトリにマウントすることで、コンテナ側からもRWXを行うことが可能となります。
restart
Docker単体でOSの起動時にコンテナを起動させる。
restart: alwaysと記述する必要がありますね。
environment
コンテナ内で利用する環境変数の設定です。
データベースの定義などを記述します。
depends_on
サービス同士の依存関係を設定することができ、これによりコンテナの起動タイミングを変更することができます。
今回はdbが起動したあとにwordpressが起動するように設定しています。
ports
ホストマシンとコンテナのポートを設定です。
ホスト側の値がキーであり、コンテナ側の値はバリューとなります。
ホスト側ではポートが被らないように注意が必要ですね。
いかがでしょうか?
これで何となくはdocker-composeについて理解できたのではないかと思います。
更に一歩踏み込んでDockerについて知りたいというあなたには下記参考書がオススメです。
Dockerを使用する会社は年々増加傾向にあるかと思いますので、今、Dockerについて学んでおいて損はないかと思いますね。