Dockerとコンテナ技術 その4:Docker Composeで複数のコンテナ操作

Dockerを使ってコンテナの作成・起動・停止・削除という基本的な動作を実施しました。
しかし、実際の開発ではより詳細な設定を、複数のコンテナに対して記述する事になります。
そうなった場合、docker containerコマンドで1つ1つ起動していくのは手間ですし、ミスにもつながります。
そこで、それらの設定をファイルにまとめて、複数のコンテナを同時に操作できるソフトウェアを利用する事になります。
それが、今回のテーマであるDocker Composeになります。

Docker Composeとは

Docker Composeとは、一度に複数のコンテナを作成・実行できるソフトウェアのことです。
Docker内に同梱されており、Dockerをインストールしていればそのまま利用することができます。
Docker ComposeではYAML形式の設定ファイルに詳細なオプションを記述し、それを基にコンテナの作成・実行を行います。
この設定ファイルには複数コンテナの作成やネットワークなどのコンテナの動作に必要な機能を記述することができるため、複雑な設定や構成も管理することができ、開発環境の統一やテストなどをより簡単に行うことができます。
Docker Composeはdocker composeコマンドを使って操作していきます。

YAML形式の設定ファイル

Docker Composeではコンテナの設定内容を定義するYAML形式の設定ファイルを用意する必要があります。
YAMLはキーと値を:で繋ぎ、データの入れ子関係をインデントで表すテキスト形式のデータの記法です。
拡張子は.yaml.ymlが利用できますが、私の主観では.yamlの方がよく見ます。
具体的には以下のような記述をします。

key1: value1

key2:
    key2-1: value2-1
    key2-2: value2-2

Docker Composeでは、デフォルトでcompose.yamlというファイル名のYAMLファイルがコンテナの設定として利用されます。
YAMLファイルに設定を保存しておくことができるため、コンテナ起動時にはいちいちオプションを記述する必要がなく、チーム内で共通したコンテナの作成を行うことなどができるようになります。

Docker Composeでコンテナを作成してみる

実際にDocker Composeを作成してみましょう。
前回同様にhttpdというコンテナイメージでApacheのコンテナを作成していきます。

compose.yamlを作成する

Docker Composeではコマンドを実行したフォルダ配下に存在するcompose.yamlファイルを読み込んでコンテナを作成していきます。
コマンド上で任意のフォルダに移動してからcompose.yamlを作成していきましょう。

cd 任意のフォルダパス
touch compose.yaml

任意のフォルダの中にcompose.yamlが作成されました。
このファイルにコンテナの設定を記述していきます。
ちなみに、compose.yamlがあるフォルダ名がデフォルトでのプロジェクト名となり、Docker Composeではプロジェクト名によって個々の環境を分離します。
では、compose.yamlに以下の設定を記述していきましょう。

services:
  web:
    image: httpd:2.4
    ports:
      - "8080:80"

YAMLファイルはインデントによって階層構造を表すのでスペース1つでもズレがあるとエラーとなるので注意しましょう。
半角スペースでインデントを揃えますが、その個数は決められていないのでファイル内で2個と決めたら全体で揃えるようにします。
キーの後のコロン:に続けて値を記述する場合は1つ半角スペースを入れる必要があります。
また、- "8080:80"のようにハイフンの後にも半角スペースを入れる必要があります。
YAMLファイルの記述方法も覚えておきましょう。

コンテナの作成・起動

これで最低限の準備は整ったのでdocker composeコマンドでコンテナの作成・起動をしてみます。
ターミナル上で先ほどcompose.yamlを作成した階層に行き、以下のコマンドを実行しましょう。

docker compose up -d

以下のように表示されれば成功しています。

-dというオプションがついていますが、これはコンテナをバックグラウンドで起動させるためのオプションです。
付けずに実行した場合、フォアグラウンドでの実行となりターミナル上でコンテナのログ画面が表示されます。
続けてコマンドを実行したい場合などは-dオプションを利用します。
Docker desktop上の表示も見てみましょう。

コンテナが作成され起動しているのがわかります。

コンテナを停止する

次にコンテナを停止させてみます。
以下のコマンドを実行しましょう。

docker compose stop

以下のように表示されれば成功です。

Docker desktop上でも停止していることがわかります。

作成済みのコンテナの起動

最後に作成済みのコンテナを起動させていきます。
先ほど停止させたコンテナを以下のコマンドを実行して起動させましょう。

docker compose start

成功したら以下のように表示されます。

Docker desktopからも確認できますね。

まとめ

今回はDocker Composeを利用してコンテナの作成から停止、再起動までを実施してみました。
簡単な構成のコンテナであったため、docker containerコマンドとさほど労力が変わらない、むしろファイルを作成する分面倒にみえたかもしれません。
しかし、これが規模が大きく複数のより複雑なコンテナを扱うような状況であった場合、compose.yamlファイルに設定を記述しておけばコマンド一つでコンテナを操作できるということのありがたみがわかるのではないかと思います。
ここまで読んでいただきありがとうございました。
それでは、また。