image
タグや image ID の一部です。ローカルでもリモートでも構いません。ローカルに存在しなければ、Compose はイメージを取得(pull)します。
image: mysql:5.7
build
Dockerfile のあるディレクトリのパスを指定します。この値が相対パスで指定された場合は、yml ファイル自身がある場所からの相対パスになります。また、ディレクトリは内容構築のため、Docker デーモンにも送られます。
Compose は構築し、生成した名前をタグ付けし、以後のイメージでも使われます。
build: /path/to/build/dir
dockerfile
代替用の Dockerfile です。
Compose は構築時に指定されたファイルを使います。
dockerfile: Dockerfile-alternate
command
デフォルトのコマンドを上書きします。
command: bundle exec thin -p 3000
links
コンテナを他のサービスにリンクします。サービス名とリンク・エイリアス(サービス:エイリアス)を指定できるだけでなく、あるいは、サービス名(エイリアスとしても使われます)でも指定できます。
links:
- db
- db:database
- redis
エイリアス名を記述すると、コンテナ内の /etc/hosts の中にサービス名が追加されます。例:
172.17.2.186 db
172.17.2.186 database
172.17.2.187 redis
環境変数も作成されます。詳細は環境変数リファレンスをご覧ください。
external_links
この docker-compose.yml や、とりわけ Compose の外にある共有ないし共通サービスが提供するコンテナとリンクします。external_links はコンテナ名やリンク・エイリアス(CONTAINER:ALIAS)の指定時に links と似たような意味あいを持ちます。
external_links:
- redis_1
- project_db_1:mysql
- project_db_1:postgresql
extra_hosts
ホスト名のマッピングを追加します。docker クライアントの --add-host パラメータと同じ値です。
extra_hosts:
- "somehost:162.242.195.82"
- "otherhost:50.31.209.229"
入力した IP アドレスとホスト名は、コンテナ内の /etc/hosts にサービスと記載されます。例:
162.242.195.82 somehost
50.31.209.229 otherhost
ports
ポートを公開(expose)します。ホストとポートを指定(ホスト:コンテナ)するか、コンテナのポートのみ指定します(ホスト側のポートはランダムに選ばれます)。
メモ:ポートのマッピングに ホスト:コンテナ の形式を使うとき、コンテナのポートが 60 以下の場合はエラーが表示されるでしょう。これは YTML がxx:yy 形式を60進数と認識するためです。そのため、常に明確なポートのマッピングを文字列で指定することを推奨します。
ports:
- "3000"
- "8000:8000"
- "49100:22"
- "127.0.0.1:8001:8001"
expose
ホストマシン上にポートを露出(expose)しますが、公開はしません。リンクされたサービスのみアクセスできます。内部ポートのみ指定できます。
expose:
- "3000"
- "8000"
volumes
パスをボリュームとしてマウントします。オプションとしてホスト側のパスを指定(ホスト:コンテナ)したり、アクセスモードを指定します(ホスト:コンテナ:ro)。
volumes:
- /var/lib/mysql
- cache/:/tmp/cache
- ~/configs:/etc/configs/:ro
volumes_from
他のサービスやコンテナから、全てのボリュームをマウントします。
volumes_from:
- service_name
- container_name
environment
環境変数を追加します。配列や dictionary(訳注;YAML のハッシュ)を使えます。
キーだけの環境変数は、Compose 起動時に用いられる値があてられますので、秘密にしたい値やホスト固有の値を指定しやすいです。
environment:
RACK_ENV: development
SESSION_SECRET:
environment:
- RACK_ENV=development
- SESSION_SECRET
env_file
ファイルから環境変数を追加します。リストには1つの値です。
Compose でファイルを docker-compose -f ファイル名 で指定した場合は、env_file のパスはそのファイルがあるディレクトリからの相対パスになります。
environment で指定した環境変数は、これらの値に上書きされます。
env_file: .env
env_file:
- ./common.env
- ./apps/web.env
- /opt/secrets.env
Compose は環境変数で指定されたファイルの各行が 変数=値 の形式とみなします。#` で始まる行は無視され(例:コメント)、空白行として扱われます。
# 環境変数 Rails/Rack の設定
RACK_ENV=development
extends
現在のファイルや別のファイルから、他のサービスを拡張します。オプションで設定を上書きします。
以下は簡単な例です。2つのファイル common.ylm と development.yml があります。extends を使って development.yml のサービスを定義します。このサービスとは common.yml で定義されているものです:
common.yml
webapp:
build: ./webapp
environment:
- DEBUG=false
- SEND_EMAILS=false
development.yml
web:
extends:
file: common.yml
service: webapp
ports:
- "8000:8000"
links:
- db
environment:
- DEBUG=true
db:
image: postgres
ここでは、development.yml の web サービスは、common.yml の webapp サービスの設定を継承します。build、environment のキーと、ports と links 設定を追加します。新しい値を持つ環境変数(DEBGUG)が定義されると、既存のものを上書きします。
他の環境変数(SEND_EMAILS)はそのままです。
extends の詳細は、チュートリアルやリファレンスをご覧ください。
lables
Docker lables を使ってコンテナにメタデータを追加します。配列やハッシュが使えます。
逆引き DNS の概念を使い、他のソフトウェアが使うラベルと衝突しないようにすることをお勧めします。
labels:
com.example.description: "Accounting webapp"
com.example.department: "Finance"
com.example.label-with-empty-value: ""
labels:
- "com.example.description=Accounting webapp"
- "com.example.department=Finance"
- "com.example.label-with-empty-value"
log driver
docker 実行時のオプションで(ドキュメントはこちら(英語)です) --log-driver を使い、ログ記録用のドライバを指定します。
現時点で使える値は json-file、syslog、none です。暫くすると Docker エンジンにドライバが更に追加され、一覧が変わる可能性があります。
デフォルトの値は json-file です。
log_driver: "json-file"
log_driver: "syslog"
log_driver: "none"
net
ネットワーキング・モードを指定します。Docker クライアントで --net パラメータを指定したときと同じです。
net: "bridge"
net: "none"
net: "container:[name or id]"
net: "host"
pid
pid: "host"
PID モードを host PID モードにセットします。これにより、コンテナとホスト・オペレーティング・システム上の PID アドレス空間を共有します。ベアメタルマシンの名前空間などで、他のコンテナにアクセス・操作できるように、コンテナ起動時にこのフラグを使います。
dns
DNS サーバーを設定します。1つまたはリストで記述します。
dns: 8.8.8.8
dns:
- 8.8.8.8
- 9.9.9.9
cap_add, cap_drop
コンテナの性能を追加したり下げたりします。man 7 capabilities で詳細をご覧ください。
cap_add:
- ALL
cap_drop:
- NET_ADMIN
- SYS_ADMIN
dns_search
DNS の search ドメインを設定します。1つまたはリストで記述します。
dns_search: example.com
dns_search:
- dc1.example.com
- dc2.example.com
devices
デバイス・マッピングの一覧です。Docker クライアントで作成時のオプション --device と同じ形式の使い方です。
devices:
- "/dev/ttyUSB0:/dev/ttyUSB0"
security_opt
それぞれのコンテナ毎に、デフォルトのラベリング・スキーマを上書きします。
security_opt:
- label:user:USER
- label:role:ROLE