docker-compose.yml詳細

28540 ワード

デフォルトのテンプレートファイルはdocker-composeです.ymlは、定義された各サービスがimage命令によってミラーまたはbuild命令(Dockerfileが必要)を指定して自動的に構築される必要があります.
他のほとんどの命令はdocker runと似ています.
buildコマンドを使用すると、Dockerfileで設定オプション(例えば、CMD、EXPOSE、VOLUME、ENVなど)が自動的に取得され、docker-composeでは不要となる.ymlで再度設定します.

image


ミラー名またはミラーIDとして指定します.ミラーがローカルに存在しない場合、Composeはこのミラーを削除しようとします.
例:
image: ubuntu
image
: orchardup/postgresql
image
: a4bc65fd

build


Dockerfileが存在するフォルダのパスを指定します.Componentはこのミラーを自動的に構築し、このミラーを使用します.
build: /path/to/build/dir

command


コンテナの起動後にデフォルトで実行されるコマンドを上書きします.
command: bundle exec thin -p 3000


他のサービスのコンテナにリンクします.サービス名(別名としても使用)またはサービス名:サービス別名(SERVICE:ALIAS)形式で使用できます.
links:
 
- db
 
- db:database
 
- redis

使用する別名は、サービスコンテナの/etc/hostsに自動的に作成されます.例:
172.17.2.186  db
172.17.2.186  database
172.17.2.187  redis

対応する環境変数も作成されます.

docker-composeにリンクします.yml外部のコンテナ、さらにはComponentが管理するコンテナではありません.パラメータフォーマットはlinksと似ています.
external_links:
 
- redis_1
 
- project_db_1:mysql
 
- project_db_1:postgresql

ports


ポート情報を露出します.
ホスト:コンテナ(HOST:CONTAINER)形式またはコンテナのポートのみを指定します(ホストはポートをランダムに選択します).
ports:
 
- "3000"
 
- "8000:8000"
 
- "49100:22"
 
- "127.0.0.1:8001:8001"

注意:HOST:CONTAINERフォーマットを使用してポートをマッピングする場合、使用するコンテナポートが60未満の場合、YAMLはxx:yyという数値フォーマットが60進数であることを解析するため、エラーの結果を得る可能性があります.文字列フォーマットを推奨します.

expose


ポートは露出しますが、ホストにマッピングされず、接続されたサービスのみがアクセスされます.
内部ポートのみをパラメータとして指定できます
expose:
 
- "3000"
 
- "8000"

volumes


ボリュームマウントパスの設定.ホストパス(HOST:CONTAINER)を設定するか、アクセスモード(HOST:CONTAINER:ro)を追加できます.
volumes:
 
- /var/lib/mysql
 
- cache/:/tmp/cache
 
- ~/configs:/etc/configs/:ro

volumes_from


別のサービスまたはコンテナからすべてのボリュームをマウントします.
volumes_from:
 
- service_name
 
- container_name

environment


環境変数を設定します.配列や辞書の2つのフォーマットを使用できます.
指定した名前の変数だけが自動的に取得され、不要なデータの漏洩を防ぐことができます.
environment:
  RACK_ENV
: development
  SESSION_SECRET
:

environment
:
 
- RACK_ENV=development
 
- SESSION_SECRET

env_file


ファイルから環境変数を取得します.個別のファイルパスまたはリストです.
docker-compose-f FILEでテンプレートファイルを指定した場合env_fileのパスはテンプレートファイルのパスに基づいています.
変数名がenvironmentコマンドと競合している場合は、以降が準です.
env_file: .env

env_file
:
 
- ./common.env
  - ./
apps/web.env
 
- /opt/secrets.env

環境変数ファイルの各行はフォーマットに合致し、#の先頭にあるコメント行をサポートする必要があります.
# common.env: Set Rails/Rack environment
RACK_ENV
=development

extends


既存のサービスに基づいて拡張します.例えば、テンプレートファイルがcommonであるwebappサービスがあります.yml.
# common.yml
webapp
:
  build
: ./webapp
  environment:
    - DEBUG=
false
    - SEND_EMAILS=
false

新しいdevelopmentを作成します.ymlファイル、commonを使用します.ymlのwebappサービスが拡張されます.
# development.yml
web
:
 
extends:
    file
: common.yml
    service
: webapp
  ports
:
   
- "8000:8000"
  links
:
   
- db
  environment
:
   
- DEBUG=true
db
:
  image
: postgres

後者は自動的にcommonを継承します.ymlのwebappサービスおよび関連する一環変数.

net


ネットワークモードを設定します.docker clientの–netパラメータと同じ値を使用します.
net: "bridge"
net
: "none"
net
: "container:[name or id]"
net
: "host"

pid


ホストシステムとプロセスネーミングスペースを共有します.このオプションを開いたコンテナは、プロセスIDを介して相互にアクセスおよび操作することができる.
pid: "host"

dns


DNSサーバを構成します.値でもリストでも構いません.
dns: 8.8.8.8
dns
:
 
- 8.8.8.8
 
- 9.9.9.9

cap_add, cap_drop


コンテナのLinux機能(Capability)を追加または放棄します.
cap_add:
 
- ALL

cap_drop
:
 
- NET_ADMIN
 
- SYS_ADMIN


DNS検索ドメインを構成します.値でもリストでも構いません.
dns_search: example.com
dns_search
:
 
- domain1.example.com
 
- domain2.example.com

working_dir, entrypoint, user, hostname, domainname, mem_limit, privileged, restart, stdin_open, tty, cpu_shares


これらはdocker runがサポートするオプションと似ています.
cpu_shares: 73

working_dir
: /code
entrypoint: /
code/entrypoint.sh
user
: postgresql

hostname
: foo
domainname
: foo.com

mem_limit
: 1000000000
privileged
: true

restart
: always

stdin_open
: true
tty
: true