概要
2014年末の DockerCon EUで発表された公式のオーケストレーションツール Machine, Swarm, Compose のうち Compose についてのまとめ。
2015年02月26日にダウンロード可能な最初のバージョンが出た
Compose を一言で説明するならば、複数のサービス(コンテナ)からなるアプリケーションを管理できるツール。
Machine, Swarm については以下参照
Compose とは
Compose は複数の要素からなるアプリケーション、つまり複数のコンテナからなるアプリケーションを 1 つの YAML ファイルに定義し、1 つのコマンドラインでアプリケーションの起動や管理ができるツール。
(1 つ 1 つの要素を "サービス" 、そのサービスが組み合わさって動くのが "アプリケーション" と呼ぶことにする。)
Compose ができること
- 各サービスのスタート・ストップ・リビルド
- 動いているサービスのステータス確認
- 動いているサービスのログのストリーミング
- one-off コンテナの実行
大まかに 3 つのステップで使う。
- アプリケーションの各要素の環境を
Dockerfile
に定義する - その各要素をどう動かし、どう協調させたいかを
docker-compose.yml
に定義する -
docker-compose up
コマンドでアプリケーションを起動する
インストール
OSX x86_64
GitHub リポジトリの releases から OSX x86_64 用のバイナリをダウンロードする。
例: https://github.com/docker/compose/releases/download/1.2.0/docker-compose-Darwin-x86_64
$ COMPOSE_VERSION=1.2.0
$ curl -L https://github.com/docker/compose/releases/download/$COMPOSE_VERSION/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
Linux x86_64
GitHub リポジトリの releases から Linux x86_64 用のバイナリをダウンロードする。
例: https://github.com/docker/compose/releases/download/1.2.0/docker-compose-Linux-x86_64
$ COMPOSE_VERSION=1.2.0
$ curl -L https://github.com/docker/compose/releases/download/$COMPOSE_VERSION/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
CoreOS
CoreOS は /usr
は Read-Only な領域なので、/opt
以下にコマンドを置く。
$ COMPOSE_VERSION=1.2.0
$ curl -L https://github.com/docker/compose/releases/download/$COMPOSE_VERSION/docker-compose-`uname -s`-`uname -m` > ~/docker-compose
$ sudo mkdir /opt/bin
$ sudo mv ~/docker-compose /opt/bin/docker-compose
$ sudo chown root:root /opt/bin/docker-compose
$ sudo chmod +x /opt/bin/docker-compose
Hello World
Docker Compose を使って Sinatra と Redis コンテナを 1 コマンドで立ち上げる
[WIP] Compose コマンドリファレンス
[WIP] docker-compose.yml リファレンス
[WIP] 環境変数リファレンス
LINK 機能を使ってリンクしたコンテナの接続情報を環境変数を使って受け取るのはもう推奨ではないもよう。その代わりリンクしたサービスの "名前" で /etc/hosts
に追記してくれている。
Compose の設定
COMPOSE_PROJECT_NAME
プロジェクト名の設定。デフォルトでは YAML ファイルのあるディレクトリの basename
になる。
$ export COMPOSE_PROJECT_NAME=hello_world
COMPOSE_FILE
YAML ファイルのパス。デフォルトはカレントディレクトリの docker-compose.yml
$ export COMPOSE_FILE=docker-compose.production.yml
DOCKER_HOST
docker CLI と同じく docker デーモンの URL を指定できる。デフォルトは unix:///var/run/docker.sock
$ export DOCKER_HOST=tcp://172.17.8.101:2375
Compose コマンドの補完
OSX
bash-completion のインストール
# for OSX
$ brew install bash-completion
# for RedHat, CentOS, Fedora
$ yum install bash-completion
# for Debian, Ubuntu
$ apt-get install bash-completion
# [TODO] for CoreOS
compose
用の補完ファイルのインストール
# for OSX
$ curl -L https://raw.githubusercontent.com/docker/compose/1.1.0/contrib/completion/bash/docker-compose > /usr/local/etc/bash_completion.d/docker-compose
# for Linux
$ curl -L https://raw.githubusercontent.com/docker/compose/1.1.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
これで docker-compose
コマンドの補完が利く
$ docker-compose
build help kill logs port ps pull restart rm run scale start stop up
Swarm 連携
Swarm と組み合わせて Compose(Fig) をマルチホスト環境で使う