Compose ファイル・リファレンス

Compose ファイルは YAML ファイルであり、全てのトップ・レベルのキー(key)はサービスの名前であり、値(value)はサービスの定義です。Compose ファイルのデフォルトのパスは ./docker-compose.yml です。

docker-compose.yml で定義される各サービスは、 imagebuild のどちらかを指定する必要があります。他のキーはオプションであり、それらは docker run コマンド・ラインに対応するものに似ています。

docker run では、 Dockerfile で指定したオプション(例: CMDEXPOSEVOLUMEENV )はデフォルトとして尊重されます。そのため、 docker-compose.yml で再び指定する必要がありませ。

サービス設定リファレンス

このセクションは、サービスを定義するためにサポートされている設定オプションの一覧を含みます。

build

Dockerfile を含むディレクトリのパスか Git レポジトリの URL を指定します。

相対パスで値を指定する時は、Compose ファイルの場所に対する相対パスとして扱われます。また、このディレクトリは構築コンテキスト(build context)であり、Docker デーモンに送られます。

Compose は構築を行い、生成時の名前でタグ付けし、その後にイメージとして使います。

build: /path/to/build/dir

buildimage は同時に使えません。実行してもエラーになります。

cap_add, cap_drop

コンテナの機能(capabilities)を追加・削除します。機能の一覧については man 7 capabilities をご覧ください。

cap_add:
  - ALL

cap_drop:
  - NET_ADMIN
  - SYS_ADMIN

command

デフォルトのコマンドを上書きします。

command: bundle exec thin -p 3000

cgroup_parent

コンテナに対し、オプションの親グループを指定します。

cgroup_parent: m-executor-abcd

container_name

デフォルトで生成される名前ではなく、カスタム・コンテナ名を指定します。

container_name: my-web-container

Docker コンテナ名はユニークである必要があるので、カスタム名を指定すると、サービスは複数のコンテナにスケールできなくなります。

devices

デバイス・マッピングの一覧を表示します。docker クライアントで作成する際の --device と同じ形式を使います。

devices:
  - "/dev/ttyUSB0:/dev/ttyUSB0"

dns

DNS サーバの設定を変更します。単一の値、もしくはリストになります。

dns: 8.8.8.8
dns:
  - 8.8.8.8
  - 9.9.9.9

dockerfile

別の Dockerfile を指定します。

Compose は構築時に別のファイルを使います。 build キーを使い、構築時のパス指定が必須です。

build: /path/to/build/dir
dockerfile: Dockerfile-alternate

dockerfileimage は同時に使えません。実行してもエラーになります。

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 の名前とは、たとえば、 webdatabase です。 file はサービスを定義する Compose 設定ファイルの場所です。

file を省略すると、Compose は現在の設定ファイル上からサービスの定義を探します。 file の値は相対パスまたは絶対パスです。相対パスを指定すると、Compose はその場所を、現在のファイルからの相対パスとして扱います。

自分自身を他に対して拡張するサービス定義ができます。拡張は無限に可能です。Compose は循環参照をサポートしておらず、もし循環参照があれば docker-compose はエラーを返します。

extends に関するより詳細は、 extends ドキュメント をご覧ください。

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"

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.