##Docker Composeとは
マルチコンテナのdockerアプリケーションを定義して実行するためのツール。よく使われる用途として開発環境や、自動テストの実行環境を立ち上げる際に使用される。使い方としてはwebサーバ、DBサーバ、キャッシュサーバなどの定義を、1つのymlファイルに記述しておくことで、そのymlファイルを元にアプリケーション実行に必要なコンテナを、まとめて起動することができる。ymlとは構造化されたデータを表現するためのフォーマットで、ymlを使ったことがなくても、直感的に記述することができる。ファイルを見れば構造を理解できる。
##Conpose実行のステップ
1 Dockerfileを用意するか、使用するイメージをDockerHubなどに用意する。
2 docker-compose.ymlを定義する
コンテナごとに起動時の設定を書き込む。これはdocker runコマンドでイメージ名や、各種フラグを指定するようなもの。
3 docker-compose upを実行する
docker-composeが置いてあるディレクトリでdocker-compose upを指定する。しかしそのままだとフォアグラウンドで実行されるので、-dオプションでデタッチで実行することも多い。実行するとdocker-compose.ymlの定義に従って、各コンテナが実行される。
##docker-compose.yml
version: '3' -#docker-composeのファイル形式のバージョン
services:
web: -#サービス名、任意の名前をつけることができる
build: . -#docker-compose.ymlと同じディレクトリをビルドコンテキストとしている。そのためymlファイルと同じディレクトリにwebサービス用のdockerfileを作成する必要がある
ports: -#コンテナ外部に公開するポートとマッピング先のポートを示している。
- "5000:5000"
volumes:
- .:/code -#bind mountでdocker-compose.ymlの存在するディレクトリをコンテナの/codeディレクトリにマウントしている。
- logvolume01:/var/log -#volumesに定義したlogvolume01のvolumeをwebサービスのコンテナの/var/logにマウントしている。
links:
- redis -#webサービスからredisサービスへのリンクを設定している
redis:
image: redis -#redisサービスでは単純にredisイメージを使ってコンテナを立ち上げている。
volumes:
logvolume01 -#名前を付けたvolumeをマウントする場合は、volumesに定義しておく必要がある。
明示的に{}としているが書かなくても良い。volumeに使用するdriverなどの設定を書く場合は、
volume名の下に設定を続けて書くことができるが、単純にデフォルトのvolumeを使う場合は設定は不要。
##docker-composeの確認
% docker-compose -v
docker-compose version 1.26.2, build eefe0d31
ダウンロードされていればdocker-composeのバージョンが表示される。