テンプレート ファイルを作成する
テンプレート ファイルは、多くのコマンド キーワードを含む使用Compose
のあり、そのほとんどはdocker run
関連するパラメーターと同様の意味を持ちます。
デフォルトのテンプレート ファイル名は でdocker-compose.yml
、形式は YAML 形式です。
version: "3"
services:
webapp:
image: examples/web
ports:
- "80:80"
volumes:
- "/data"
ミラーを自動的に構築および生成するには、各サービスがimage
コマンドまたはbuild
コマンド (Dockerfile が必要) などでミラーを指定する必要があることに注意してください。
build
コマンドを使用すると、 で設定Dockerfile
したオプション (例: CMD
、EXPOSE
、など) が自動的に取得され、 で設定を。VOLUME
ENV
docker-compose.yml
以下に各コマンドの使い方を紹介します。
build
Dockerfile
が配置されているフォルダーのパスを指定します(絶対パスまたは docker-compose.yml ファイルへの相対パスを指定できます)。Compose
これは、このイメージを自動的に構築するために使用され、次にこのイメージを使用します。
version: '3'
services:
webapp:
build: ./dir
context
ディレクティブを使用して、Dockerfile
があるフォルダーへのパスを指定することもできます。
dockerfile
ディレクティブを使用してDockerfile
ファイル名を指定します。
arg
イメージをビルドするときに、ディレクティブを使用して変数を指定します。
version: '3'
services:
webapp:
build:
context: ./dir
dockerfile: Dockerfile-alternate
args:
buildno: 1
cache_from
ビルドされたイメージのキャッシュを指定するために使用します
build:
context: .
cache_from:
- alpine:latest
- corp/web_app:3.14
cap_add, cap_drop
コンテナーのカーネル容量の割り当てを指定します。
たとえば、コンテナーにすべての機能を持たせるには、次のように指定できます。
cap_add:
- ALL
NET_ADMIN を削除する機能は、次のように指定できます。
cap_drop:
- NET_ADMIN
command
コンテナの起動時にデフォルトで実行されるコマンドをオーバーライドします。
command: echo "hello world"
configs
ここでは
Swarm mode
詳しく説明されていません。
cgroup_parent
親
cgroup
グループそのグループのリソース制限が継承されます。
たとえば、cgroup グループ名が作成されますcgroups_1
。
cgroup_parent: cgroups_1
container_name
コンテナ名を指定します。
项目名称_服务名称_序号
この形式はデフォルトで使用されます。
container_name: docker-web-container
注: Docker は同じ名前の複数のコンテナーを許可しないため、コンテナー名を指定した後、サービスはスケーリング (スケーリング) できません。
deploy
ここでは
Swarm mode
詳しく説明されていません。
devices
デバイス マッピング関係を指定します。
devices:
- "/dev/ttyUSB1:/dev/ttyUSB0"
depends_on
コンテナーの依存関係と起動シーケンスの問題を解決します。次の例では、最初に起動して
redis
db
から起動しますweb
version: '3'
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
注:
web
サービスは、redis
db
開始する前に「フル スタート」を待機しません。
dns
カスタム
DNS
サーバー。値またはリストを指定できます。
dns: 8.8.8.8
dns:
- 8.8.8.8
- 114.114.114.114
dns_search
DNS
検索ドメインを構成します。値またはリストを指定できます。
dns_search: example.com
dns_search:
- domain1.example.com
- domain2.example.com
tmpfs
tmpfs ファイル システムをコンテナーにマウントします。
tmpfs: /run
tmpfs:
- /run
- /tmp
env_file
ファイルから環境変数を取得します。これは、単一のファイル パスまたはリストにすることができます。
Compose テンプレート ファイルが
docker-compose -f FILE
way、env_file
変数のパスはテンプレート ファイルのパスに基づきます。
変数名が
environment
ディレクティブ、慣例により、後者が優先されます。
env_file: .env
env_file:
- ./common.env
- ./apps/web.env
- /opt/secrets.env
環境変数ファイルの各行は、 #
.で始まる。
# common.env: Set development environment
PROG_ENV=development
environment
環境変数を設定します。配列形式と辞書形式の両方を使用できます。
指定された名前のみを持つ変数は、Compose を実行しているホスト上の対応する変数の値を自動的に取得します。これを使用して、不要なデータ漏洩を防ぐことができます。
environment:
RACK_ENV: development
SESSION_SECRET:
environment:
- RACK_ENV=development
- SESSION_SECRET
などのブール値を表す単語がtrue|false,yes|no
変数名または値で使用されている場合、YAML が特定のコンテンツを対応するブール値セマンティクスに自動的に解析するのを防ぐために、それらを引用符で囲むことをお勧めします。これらの特定の単語には、
y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF
expose
ポートは公開されますが、ホストにはマッピングされず、接続されたサービスのみがアクセスします。
パラメータとして指定できるのは内部ポートのみです
expose:
- "3000"
- "8000"
external_links
が管理する
docker-compose.yml
外部コンテナへのリンクではなく、 の外部のコンテナへのリンク。Compose
注: このコマンドは非推奨です。
external_links:
- redis_1
- project_db_1:mysql
- project_db_1:postgresql
extra_hosts
Docker の
--add-host
パラメーター、追加のホスト名マッピング情報を指定します。
extra_hosts:
- "googledns:8.8.8.8"
- "dockerhub:52.1.157.61"
次の 2 つのエントリは、起動後にサービス コンテナー内の/etc/hosts
ファイル。
8.8.8.8 googledns
52.1.157.61 dockerhub
healthcheck
コマンドを使用して、コンテナーが正常に実行されているかどうかを確認します。
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 1m30s
timeout: 10s
retries: 3
image
イメージ名またはイメージ ID として指定します。ミラーがローカルに存在しない場合は、
Compose
ミラーのプルが試行されます。
image: ubuntu
image: orchardup/postgresql
image: a4bc65fd
labels
コンテナーの Docker メタデータ (メタデータ) 情報を追加します。たとえば、補助的な説明情報をコンテナに追加できます。
labels:
com.startupteam.description: "webapp for a startup team"
com.startupteam.department: "devops department"
com.startupteam.release: "rc3 for v1.0"
links
注: このコマンドは非推奨です。
logging
ログ オプションを構成します。
logging:
driver: syslog
options:
syslog-address: "tcp://192.168.0.42:123"
現在、3 つのログ ドライバ タイプがサポートされています。
driver: "json-file"
driver: "syslog"
driver: "none"
options
ログ ドライバの関連パラメータを設定します。
options:
max-size: "200k"
max-file: "10"
network_mode
ネットワークモードを設定します。のパラメータと同じ値を
docker run
使用します。--network
network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"
networks
コンテナーが接続されているネットワークを構成します。
version: "3"
services:
some-service:
networks:
- some-network
- other-network
networks:
some-network:
other-network:
pid
プロセスの名前空間をホスト システムと共有します。このオプションが有効になっているコンテナーは、コンテナーとホスト システムと同様に、プロセス ID を介して相互にアクセスし、操作できます。
pid: "host"
ports
ポート情報を公開します。
hostport:containerport(HOST:CONTAINER)
形式か、コンテナーのポートを指定します (ホストはランダムにポートを選択します)。
ports:
- "3000"
- "8000:8000"
- "49100:22"
- "127.0.0.1:8001:8001"
注: _HOST:CONTAINER_
format を使用してポートをマップする場合、60 未満のコンテナー ポートを使用し、それを引用符で囲まないと、間違った結果になる可能性があります。これは、 この数値形式がbase 60 として_YAML_
自動的に解析されるためです。 _xx:yy_
この種の問題を回避するには、すべての数値文字列で引用符で囲まれた文字列形式を使用することをお勧めします。
secrets
mysql
サービスパスワードなどの機密データを保存します。
version: "3.1"
services:
mysql:
image: mysql
environment:
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password
secrets:
- db_root_password
- my_other_secret
secrets:
my_secret:
file: ./my_secret.txt
my_other_secret:
external: true
security_opt
コンテナー テンプレート ラベル (ラベル) メカニズムの既定の属性 (ユーザー、ロール、タイプ、レベルなど) を指定します。たとえば、ラベルのユーザー名とロール名を構成します。
security_opt:
- label:user:USER
- label:role:ROLE
privileged
このパラメーターを使用すると、コンテナー内のルートに実際のルート権限が与えられ、一部の特権コマンドをコンテナー内で実行できるようになります。
それ以外の場合、コンテナ内のルートは権限外の通常のユーザーです。特権で起動されたコンテナは、ホスト上の多くのデバイスを認識し、マウントを実行できます。docker コンテナ内で docker コンテナを起動することもできます。
privileged: true
stop_signal
コンテナーを停止する別のシグナルを設定します。デフォルトでは、SIGTERM を使用してコンテナーを停止します。
stop_signal: SIGUSR1
sysctls
コンテナー カーネル パラメーターを構成します。配列形式と辞書形式の両方を使用できます。
sysctls:
net.core.somaxconn: 1024
net.ipv4.tcp_syncookies: 0
sysctls:
- net.core.somaxconn=1024
- net.ipv4.tcp_syncookies=0
ulimits
コンテナーの ulimits 制限値を指定します。
たとえば、プロセスの最大数を 65535 に指定し、ファイル ハンドルの数を 20000 (ソフト リミット。アプリケーションによっていつでも変更でき、ハード リミットを超えることはできません) および 40000 (システムのハード リミット。 root ユーザーのみが増やすことができます)。
ulimits:
nproc: 65535
nofile:
soft: 20000
hard: 40000
volumes
データボリュームがマウントされるパス設定。
HOST:CONTAINER
ホスト パス ( ) またはデータ ボリューム名 (VOLUME:CONTAINER
)、およびアクセス モード (HOST:CONTAINER:ro
)として設定できます。
このディレクティブのパスは、相対パスをサポートしています。
volumes:
- /var/lib/mysql
- cache/:/tmp/cache
- ~/configs:/etc/configs/:ro
パスがデータ ボリューム名の場合、データ ボリュームはファイルで構成する必要があります。
version: "3"
services:
my_src:
image: mysql:8.0
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
その他の指示
また、
domainname, entrypoint, hostname, ipc, mac_address, privileged, read_only, shm_size, restart, stdin_open, tty, user, working_dir
など、基本的docker run
に の対応するパラメータの機能と一致しています。
サービスコンテナ起動後に実行するエントリファイルを指定します。
entrypoint: /code/entrypoint.sh
コンテナーでアプリケーションを実行しているユーザー名を指定します。
user: nginx
コンテナ内の作業ディレクトリを指定します。
working_dir: /code
指定したコンテナー内のドメイン名、ホスト名、MAC アドレスなどを検索します。
domainname: your_website.com
hostname: test
mac_address: 08-00-27-00-0C-0A
コンテナが終了した後の再起動ポリシーが常に再起動であることを指定します。このコマンドは、サービスを常に実行し続けるのに非常に効果的であり、運用環境としてalways
、またはunless-stopped
。
restart: always
コンテナーのルート ファイルシステムを読み取り専用モードでマウントすると、コンテナーの内容を変更できなくなります。
read_only: true
外部入力を受け付けるオープン標準入力。
stdin_open: true
疑似端末をシミュレートします。
tty: true
変数を読む
Compose テンプレート ファイルは、ホスト システム環境変数および現在のディレクトリ内の
.env
ファイル。
たとえば、以下の Compose ファイルは、それが実行される環境から変数${MONGO_VERSION}
の、実行された命令にそれらを書き込みます。
version: "3"
services:
db:
image: "mongo:${MONGO_VERSION}"
実行された場合MONGO_VERSION=3.2 docker-compose up
、mongo:3.2
ミラーリングされたコンテナーが開始されます。実行された場合MONGO_VERSION=2.8 docker-compose up
、mongo:2.8
ミラーリングされたコンテナーが開始されます。
カレントディレクトリに.env
ファイル、docker-compose
コマンド実行時にファイルから変数を読み込みます。
現在のディレクトリに新しい.env
ファイル、次の内容を記述します。
# 支持 # 号注释
MONGO_VERSION=3.6
実行するとdocker-compose up
、mongo:3.6
ミラーリングされたコンテナーが開始されます。
参考文献
-
awesome - compose