【Dockerの最新機能を使ってみよう】複数のDockerコンテナを自動で立ち上げる構成管理ツール「Docker Compose」
複数のコンテナを組み合わせた構成でサービスを運用している場合、コンテナに対し特定のパラメータを指定したり、特定の順序での起動が必要となるケースがある。こういった作業を自動化するツールが「Docker Compose」だ。今回はこのDocker Composerの使い方を紹介する。
Dockerコンテナの管理を支援する純正ツール「Docker Compose」
Docker ComposeはDockerが開発するコマンドラインツールで、あらかじめ用意しておいた設定ファイルに従ってコンテナを起動するツールだ。設定ファイルには複数のコンテナに関する記述が可能で、コンテナの起動オプションやコンテナに与える環境変数など、さまざまな設定も同時に記述できる。
また、コンテナ同士の依存関係を設定することも可能で、これによって関連するコンテナを複数まとめて起動することも可能だ(図1)。
この場合、設定された依存関係に応じて適切な順番でコンテナが起動されるようになっており、コマンド1つで簡単に必要なサービスを開始できるようになっている。逆にコンテナを停止させる際も、自動的に適切な順番でコンテナを停止させるようになっている。
また、以前紹介したDocker Swarmとの統合機能も提供されており、コンテナを複数実行させる(スケールさせる)操作も可能だ。コンテナの実行だけでなくビルド操作もサポートされている。
Docker Composeの利用ケース
Docker Composeを活用できるケースとしては、まずソフトウェアの開発/テスト環境が挙げられる。昨今ではデータベースやキャッシュ、フロントエンドといった役割毎に複数のサーバーを用意し、それらを組み合わせてサービスを構築する例が多い。こういった場合、開発/テスト環境でもそれらをすべて用意する必要がある。それらをコンテナの形で用意しておき、それらを起動するためのオプション設定などをDocker Composeの設定ファイルに記述しておけば、コマンドを1つ実行するだけでテスト環境を立ち上げられるようになる。
また、Docker 1.13以降では「docker stack」という機能が導入された。これを利用することで、Docker Compose向けに定義したコンテナの設定等をそのまま利用してDockerクラスタ内でコンテナを稼動させられるようになる。これにより、Docker Composeを使って作ったテスト環境を、容易に実運用環境に移行させることができる。
Docker Composeのインストールと使い方
それでは、Docker Composeの使い方について紹介していこう。Docker Composeは現在WindowsおよびLinux、Mac OS X向けのバイナリファイルが提供されており、GitHubのdocker/composeプロジェクトのリリースページから入手が可能だ。
なお、WindowsおよびMac OS X向けのDockerパッケージである「Docker for Windows」や「Docker for Mac」にはDocker Composeが含まれているので、こちらを使ってDockerをインストールした場合は別途Docker Composeをインストールする必要はない。ただし、バージョンが古い可能性はあるので、以下の例のように「docker-compose」コマンドを「-v」オプション付きで実行してバージョンを確認しておこう。
$ docker-compose -v docker-compose version 1.8.0, build f3628c7
Docker ComposeはDockerやほかのDocker関連ツールと同様にGo言語で実装されており、バイナリファイル1つで動作する。GitHubで公開されているバイナリファイルは圧縮されていないので、これをダウンロード後適当な名前にリネームし、/usr/local/binなどのパスが通ったディレクトリにコピーすれば利用が可能になる。
Docker Composeのサブコマンド
「docker-compose」コマンドでは、表1のサブコマンドが用意されている。このうち「build」や「create」、「exec」、「kill」など、dockerコマンドのサブコマンドと同じ名称のものは基本的に同様の処理を行うものと考えて良い。ただし、docker-composeではあらかじめ設定ファイルに記述しておいたコンテナのみを対象とする点が異なる。また、「down」や「up」、「scale」、「bundle」といったdocker-compose特有のコマンドもある。こちらについては後述する。
コマンド名 | 説明 |
---|---|
build | 設定ファイルに従ってコンテナのビルドを実行する |
bundle | クラスタ環境でコンテナを起動するためのbundleファイルを作成する |
config | 設定ファイルの内容を表示する |
create | 設定ファイルに従ってコンテナを作成する |
down | 作成したコンテナを停止し、コンテナおよび関連リリースを削除する |
events | コンテナから受信したイベントを表示する |
exec | 実行中のコンテナ内でコマンドを実行する |
help | ヘルプを表示する |
kill | コンテナにシグナルを送信して停止させる |
logs | コンテナが出力するログを表示する |
pause | コンテナを一時停止させる |
port | 公開ポートに関する情報を表示する |
ps | 管理しているコンテナの一覧を表示する |
pull | 管理しているコンテナをPullする |
push | 作成したコンテナイメージをPushする |
restart | 管理しているコンテナを再起動する |
rm | 管理しているコンテナを削除する |
run | 設定ファイルに記述されたコンテナを起動する |
scale | コンテナのインスタンス数を変更する |
start | 設定ファイルに従ってコンテナを起動する |
stop | 設定ファイルに従ってコンテナを停止される |
top | 稼動中のプロセス情報を表示する |
unpause | 停止させたコンテナを再開させる |
up | 設定ファイルに従ってコンテナを作成し実行させる |
version | docker-composeのバージョンを表示する |
Docker Composeの設定ファイルとプロジェクト、サービス
Docker Composerでは、YAMLもしくはJSON形式で起動するコンテナなどの設定をファイルに記述する。デフォルトではカレントディレクトリ内の「docker-compose.yml」ファイルが設定ファイルとして使われるが、「-f <ファイル名>」オプションでそれ以外のファイルを設定ファイルとして使用することも可能だ。
なお、Docker Composeでは「サービス」と「プロジェクト」という単位でコンテナを管理する。コンテナとサービスは単に名前を言い換えただけで、基本的には同じものと考えて良い。また、「プロジェクト」は関連するコンテナをまとめて管理するための仕組みだ。Docker Composeの設定ファイルには複数のコンテナに関する設定が記述可能で、通常は同一の設定ファイルに記述されているコンテナは同じプロジェクトに属することになる。
デフォルトではプロジェクト名はdocker-composeコマンド実行時のカレントディレクトリが使用される。また、起動されるコンテナには次のような命名規則に従った名前が付けられて管理される。
<プロジェクト名>_<サービス名>_<インスタンス番号>
たとえば「test01」というディレクトリ内でdocker-composeコマンドを実行して「foobar」というサービスのコンテナを作成した場合、作成されたコンテナには「test01_foobar_1」という名前が付けられる。
なお、プロジェクト名は「-p <プロジェクト名>」オプションで明示的に指定することも可能だ。