Docker Compose テンプレート ファイルの説明

テンプレート ファイルを作成する

テンプレート ファイルは、多くのコマンド キーワードを含む使用Composeのあり、そのほとんどはdocker run関連するパラメーターと同様の意味を持ちます。

デフォルトのテンプレート ファイル名は でdocker-compose.yml、形式は YAML 形式です。

version: "3"

services:
  webapp:
    image: examples/web
    ports:
      - "80:80"
    volumes:
      - "/data"

ミラーを自動的に構築および生成するには、各サービスがimageコマンドまたはbuildコマンド (Dockerfile が必要) などでミラーを指定する必要があることに注意してください。

buildコマンドを使用すると、 で設定Dockerfileしたオプション (例: CMDEXPOSEなど) が自動的に取得され、 で設定を。VOLUMEENVdocker-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 FILEway、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 upmongo:3.2ミラーリングされたコンテナーが開始されます。実行された場合MONGO_VERSION=2.8 docker-compose upmongo:2.8ミラーリングされたコンテナーが開始されます。

カレントディレクトリに.envファイル、docker-composeコマンド実行時にファイルから変数を読み込みます。

現在のディレクトリに新しい.envファイル、次の内容を記述します。

# 支持 # 号注释
MONGO_VERSION=3.6

実行するとdocker-compose upmongo:3.6ミラーリングされたコンテナーが開始されます。

参考文献

  • 公式ドキュメント

  • awesome - compose

おすすめ

転載: blog.csdn.net/weixin_43702146/article/details/130526500