Compose ファイル・リファレンス¶
Compose ファイルは YAML ファイルであり、全てのトップ・レベルのキー(key)はサービスの名前であり、値(value)はサービスの定義です。Compose ファイルのデフォルトのパスは ./docker-compose.yml
です。
docker-compose.yml
で定義される各サービスは、 image
か build
のどちらかを指定する必要があります。他のキーはオプションであり、それらは docker run
コマンド・ラインに対応するものに似ています。
docker run
では、 Dockerfile で指定したオプション(例: CMD
、 EXPOSE
、 VOLUME
、ENV
)はデフォルトとして尊重されます。そのため、 docker-compose.yml
で再び指定する必要がありませ。
サービス設定リファレンス¶
このセクションは、サービスを定義するためにサポートされている設定オプションの一覧を含みます。
build¶
Dockerfile を含むディレクトリのパスか Git レポジトリの URL を指定します。
相対パスで値を指定する時は、Compose ファイルの場所に対する相対パスとして扱われます。また、このディレクトリは構築コンテキスト(build context)であり、Docker デーモンに送られます。
Compose は構築を行い、生成時の名前でタグ付けし、その後にイメージとして使います。
build: /path/to/build/dir
build
と image
は同時に使えません。実行してもエラーになります。
cap_add, cap_drop¶
コンテナの機能(capabilities)を追加・削除します。機能の一覧については man 7 capabilities
をご覧ください。
cap_add:
- ALL
cap_drop:
- NET_ADMIN
- SYS_ADMIN
container_name¶
デフォルトで生成される名前ではなく、カスタム・コンテナ名を指定します。
container_name: my-web-container
Docker コンテナ名はユニークである必要があるので、カスタム名を指定すると、サービスは複数のコンテナにスケールできなくなります。
devices¶
デバイス・マッピングの一覧を表示します。docker クライアントで作成する際の --device
と同じ形式を使います。
devices:
- "/dev/ttyUSB0:/dev/ttyUSB0"
dns_search¶
DNS の検索ドメインを変更します。単一の値、もしくはリストになります。
dns_search: example.com
dns_search:
- dc1.example.com
- dc2.example.com
dockerfile¶
別の Dockerfile を指定します。
Compose は構築時に別のファイルを使います。 build
キーを使い、構築時のパス指定が必須です。
build: /path/to/build/dir
dockerfile: Dockerfile-alternate
dockerfile
と image
は同時に使えません。実行してもエラーになります。
env_file¶
ファイル上の定義から環境変数を追加します。単一の値、もしくはリストになります。
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
environment¶
環境変数を追加します。配列もしくは辞書形式(dictionary)で指定できます。boolean 値は true、false、yes、no のいずれかであり、YML パーサによって True か False に変換されるよう、クォート( ‘ 記号)で囲む必要があります。
キーだけの環境変数は、Compose の実行時にマシン上で指定するもので有り、シークレット(訳注:API鍵などの秘密情報)やホスト固有の値を指定するのに便利です。
environment:
RACK_ENV: development
SHOW: 'true'
SESSION_SECRET:
environment:
- RACK_ENV=development
- SHOW=true
- SESSION_SECRET
expose¶
ホストマシン上で公開するポートを指定せずに、コンテナの公開(露出)用のポート番号を指定します。これらはリンクされたサービス間でのみアクセス可能になります。内部で使うポートのみ指定できます。
expose:
- "3000"
- "8000"
extends¶
現在のファイルから別のファイルにサービスを拡張するもので、設定のオプションを追加します。
他の設定用のキーと一緒にサービスを extends
(拡張)できます。 extends
値には service
の定義が必要であり、オプションで file
キーを指定します。
extends:
file: common.yml
service: webapp
サービスを拡張する service
の名前とは、たとえば、 web
や database
です。 file
はサービスを定義する Compose 設定ファイルの場所です。
file
を省略すると、Compose は現在の設定ファイル上からサービスの定義を探します。 file
の値は相対パスまたは絶対パスです。相対パスを指定すると、Compose はその場所を、現在のファイルからの相対パスとして扱います。
自分自身を他に対して拡張するサービス定義ができます。拡張は無限に可能です。Compose は循環参照をサポートしておらず、もし循環参照があれば docker-compose
はエラーを返します。
extends
に関するより詳細は、 extends ドキュメント をご覧ください。
external_links¶
対象の docker-compose.yml
の外にあるコンテナだけでなく、Compose の外にあるコンテナとリンクします。特に、コンテナが共有サービスもしくは一般的なサービスを提供している場合に有用です。 external_links
でコンテナ名とエイリアスを指定すると( コンテナ名:エイリアス名
)、 link
のように動作します。
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"
コンテナ内の /etc/hosts
に IP アドレスとホスト名のエントリが追加されます。例:
162.242.195.82 somehost
50.31.209.229 otherhost
image¶
タグもしくはイメージ ID の一部を指定します。ローカルでもリモートでも指定できます。Compose はローカルにイメージが存在しなければ、リモートからの取得を試みます
image: ubuntu
image: orchardup/postgresql
image: a4bc65fd
labels¶
Docker ラベル を使いコンテナにメタデータを追加します。配列もしくは辞書形式で追加できます。
他のソフトウェアとラベルが競合しないようにするため、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"
links¶
コンテナを他のサービスとリンクします。サービス名とリンク用エイリアスの両方を指定できます( サービス名:エイリアス名
)。あるいはサービス名だけの指定もできます(このサービス名はエイリアス名としても使われます)。
links:
- db
- db:database
- redis
エイリアス名として指定したエントリは、 /etc/hosts
ファイルの中でサービス名を示すものとして追加されます。例:
172.17.2.186 db
172.17.2.186 database
172.17.2.187 redis
また、環境変数も作成されます。詳細は 環境変数リファレンス をご覧ください。
log_driver¶
docker run 実行時、サービスのコンテナに対するログ記録ドライバを --log-driver
で指定します( ドキュメントはこちらです
)。
デフォルト値は json-file(JSON ファイル形式)です。
log_driver: "json-file"
log_driver: "syslog"
log_driver: "none"
注釈
docker-compose up
で実行したあと、 docker-compose logs
コマンドでログを直接表示できるのは json-file
ドライバのみです。他のドライバを使うとログは表示されません。
log_opt¶
docker run
用の --log-opt
オプションと同じように、 log_opt
でログ記録ドライバのオプションを指定します。
ログ記録オプションは、キー・バリューのペアです。次の例は syslog
のオプションです。
log_driver: "syslog"
log_opt:
syslog-address: "tcp://192.168.0.42:123"
net¶
ネットワーキング・モードを指定します。これは docker クライアントで --net
パラメータを指定するのと同じものです。
net: "bridge"
net: "none"
net: "container:[name or id]"
net: "host"
pid¶
pid: "host"
PID モードはホストの PID モードを設定します。有効化すると、コンテナとホスト・オペレーティング・システム間で PID アドレス空間を共有します。コンテナにこのフラグを付けて起動すると、他のコンテナからアクセスできるだけでなく、ベアメタル・マシン上の名前空間などから操作できるようになります。
ports¶
公開用のポートです。ホスト側とコンテナ側の両方のポートを指定( ホスト側:コンテナ側
)できるだけでなく、コンテナ側のポートのみも指定できます(ホスト側はランダムなポートが選ばれます)。
注釈
ホスト側:コンテナ側
の書式でポートを割り当てる時、コンテナのポートが 60 以下であればエラーが発生します。これは YALM が xx:yy
形式の指定を、60 進数(60が基準)の数値とみなすからです。そのため、ポートの割り当てには常に文字列として指定することを推奨します(訳者注: ” で囲んで文字扱いにする)。
ports:
- "3000"
- "3000-3005"
- "8000:8000"
- "9090-9091:8080-8081"
- "49100:22"
- "127.0.0.1:8001:8001"
- "127.0.0.1:5000-5010:5000-5010"
security_opt¶
各コンテナに対するデフォルトのラベリング・スキーマ(labering scheme)を上書きします。
security_opt:
- label:user:USER
- label:role:ROLE
ulimits¶
コンテナのデフォルト ulimits を上書きします。単一の整数値で上限を指定できるだけでなく、ソフト/ハード・リミットの両方も指定できます。
ulimits:
nproc: 65535
nofile:
soft: 20000
hard: 40000
volumes, volume_driver¶
ボリュームとしてマウントするパス(場所)を指定します。オプションでホスト・マシン上のパス( ホスト側:コンテナ側
)の指定や、アクセス・モードの指定( ホスト側:コンテナ側:ro
)も可能です。
volumes:
- /var/lib/mysql
- ./cache:/tmp/cache
- ~/configs:/etc/configs/:ro
ホスト上を相対パスでマウント可能です。このとき、Compose 設定ファイルがあるディレクトリ基準にして扱われます。相対パスの場合は、常に .
もしくは ..
で始まります。
(ボリューム・パスの代わりに)ボリューム名を設定するには、 volume_driver
でも指定できます。
volume_driver: mydriver
注釈
volume_driver
を指定すると、パスの拡張は行われません。
より詳細な情報は Docker ボリューム や ボリューム・プラグイン をご覧ください。
volumes_from¶
他のサービスやコンテナ上のボリュームをマウントします。オプションで、読み込み専用のアクセス( ro
)や読み書き( rw
)を指定できます。
volumes_from:
- service_name
- container_name
- service_name:rw
その他¶
cpu_shares、 cpuset、 domainname、 entrypoint、 hostname、 ipc、 mac_address、 mem_limit、 memswap_limit、 privileged、 read_only、 restart、 stdin_open、 tty、 user、 working_dir は、それぞれ単一の値を持ちます。いずれも docker run に対応します。
cpu_shares: 73
cpuset: 0,1
entrypoint: /code/entrypoint.sh
user: postgresql
working_dir: /code
domainname: foo.com
hostname: foo
ipc: host
mac_address: 02:42:ac:11:65:43
mem_limit: 1000000000
memswap_limit: 2000000000
privileged: true
restart: always
read_only: true
stdin_open: true
tty: true
変数の置き換え¶
設定オプションでは環境変数も含めることができます。シェル上の Compose は docker-compose
の実行時に環境変数を使えます。例えば、シェルで POSTGRES_VERSION=9.3
という変数を設定ファイルで扱うには、次のようにします。
db:
image: "postgres:${POSTGRES_VERSION}"
この設定で``docker-compose up`` を実行すると、Compose は POSTGRES_VERSION
環境変数をシェル上で探し、それを値と置き換えます。この例では、Compose が設定ファイルを実行する前に、 image
に対して postgres:9.3
を与えます。
環境変数が設定されていなければ、Compose は空の文字列に置き換えます。先の例では、 POSTGRES_VERSION
が設定されなければ、 image
オプションは postgres:
となります。
$変数
と ${変数}
の両方がサポートされています。シェルの拡張形式である $変数-default
と ${変数/foo/bar}
はサポートされません。
$$
(二重ドル記号)を指定する時は、設定ファイル上でリテラルなドル記号の設定が必要です。Compose は値を補完しないので、 $$
の指定により、 Compose によって処理されずに環境変数を参照します。
web:
build: .
command: "$$VAR_NOT_INTERPOLATED_BY_COMPOSE"
もしも間違えてドル記号( $
)だけにすると、 Compose は環境変数の値を解釈し、次のように警告を表示します。
The VAR_NOT_INTERPOLATED_BY_COMPOSE is not set. Substituting an empty string.