起動制御
Docker Composeは、depends_onオプションを使用してサービスの開始時期を示すことにより、コンテナを依存関係の順序で起動します。 Composeは、depends_on、links、volumes_from、およびnetwork_mode: "service:..."を使用して開始順序を決定します。
コンテナが別のコンテナの「準備完了」状態を待つ必要がある場合は、wait-for-itまたはdockerizeツールを使用できます。 TCP接続が確認されるまで、ホストとポートをチェックします。 コンポジションで強制待機を有効にするには、エントリポイントを追加する必要があります。
version: '2' services: web: build: . ports: - "80:8000" depends_on: - db entrypoint: "./wait-for-it.sh db:5432" db: image: postgres
制御を強化する必要がある場合は、いつでも自分でラッパースクリプトを作成できます。
Composeプロジェクトの複数のコピーを実行する
同じ構成(またはdocker-compose.ymlファイル)の環境のコピーが複数必要な場合は、単にdocker-compose up -p new_project_nameを実行します。
環境変数
シェル環境変数を使用して、コンポジションの値を設定できます。
環境変数を設定します。
$ TAG="latest" $ echo $TAG latest $ DB="postgres" $ echo $DB postgres
Docker Composeファイルで環境変数を使用します。
db: image: "${DB}:$TAG"
Docker Composeは、$ {DB}と$ TAGの両方を受け入れます。 コンテナに環境変数を設定することもできます:
web: environment: - PRODUCTION=1
コンテナ内で環境変数を渡すこともできます。
$ PRODUCTION=1 $ echo $PRODUCTION 1
環境ファイル
環境変数の転送を保証するには、環境ファイルに保存する必要があります。 .envファイルに名前を付けて、作業ディレクトリに保存します。 Docker Composeは、空白行(読みやすくするために使用)と#で始まるコード(つまりコメント)を無視します。 Compose CLI変数を設定するだけでなく、変数をさらに置換するために割り当てることができます。
COMPOSE_API_VERSION COMPOSE_FILE COMPOSE_HTTP_TIMEOUT COMPOSE_PROJECT_NAME DOCKER_CERT_PATH DOCKER_HOST DOCKER_TLS_VERIFY
環境ファイルの例:
# ./.env # COMPOSE_API_VERSION=2 COMPOSE_HTTP_TIMEOUT=45 DOCKER_CERT_PATH=/mycerts/docker.crt EXTERNAL_PORT=5000
複数のDocker Composeファイルの使用
異なる環境(開発、ミドルウェア、および本番)に合わせてアプリケーションを変更する必要がある場合、またはComposeアプリケーションを使用して管理タスクを実行する必要がある場合は、複数のDocker Composeファイルを使用します。 これは、共通の構成を共有する方法を提供します。
デフォルトでは、Docker Composeはdocker-compose.ymlとdocker-compose.override.ymlの2つのファイルを読み取ります。 docker-compose-override.ymlファイルでは、既存のサービスのオーバーライドを保存するか、新しいサービスを定義できます。 複数のファイル(または異なる名前のオーバーライドファイル)を使用するには、-fをdocker-compose upに渡す必要があります(順序が重要です)。
$ docker-compose up -f my-override-1.yml my-overide-2.yml
2つの構成オプションが一致すると、新しい値が元の値を置き換えるか拡張します。
この例では、新しい値が古い値を上書きし、コマンドがmy_new_app.pyを開始します。
# command: python my_app.py # command: python my_new_app.py (ports, expose, external_links, dns, dns_search tmpfs), Docker Compose ( Compose 5000 8000): # expose: - 5000 # expose: - 8000
環境、ラベル、ボリューム、またはデバイスが使用されている場合、Docker Composeは結果を結合します。 次の例では、3つの環境変数がFOO = HelloおよびBAR = "Python Dev!"になります。
# environment: - FOO=Hello - BAR=World # environment: - BAR="Python Dev!" Docker Compose (docker-compose.yml): web: image: "my_dockpy/my_django_app:latest" links: - db - cache db: image: "postgres:latest" cache: image: "redis:latest"
開発サーバーで、ポートを開き、コードをボリュームとしてマウントし、Webイメージ(docker-compose.override.yml)を作成します。
web: build: . volumes: - ".:/code" ports: - "8883:80" environment: DEBUG: "true" db: command: "-d" ports: - "5432:5432" cache: ports: - "6379:6379"
docker-compose upは、オーバーライドファイルを自動的に読み取り、適用します。 Docker Composeアプリケーションの製品版も必要になります。これをdocker-compose.production.ymlと呼びます:
web: ports: - "80:80" environment: PRODUCTION: "true" cache: environment: TTL: "500"
実動ファイルをデプロイする必要がある場合は、次を実行するだけです。
$ docker-compose -f docker-compose.yml -f docker-compose.production.yml up -d
注:Docker Composeはdocker-compose.production.ymlを読み取りますが、docker-compose.override.ymlは読み取りません。
管理タスク
データベースのバックアップなど、特定のタスクを実行できるようにするには、アプリケーションの管理コピーを実行する必要があります。 前述のdocker-compose.ymlファイルを使用して、docker-compose.admin.ymlファイルを作成します。
dbadmin: build: database_admin/ links: - db
次に、次のコマンドを実行します。
$ docker-compose -f docker-compose.yml -f docker-compose.admin.yml run dbadmin db-backup
サービス拡張
extendsフィールドを使用して構成を共有できます。 また、異なるプロジェクト間でオプションを共有することもできます。
common-services.ymlを作成します(名前は何でも構いません):
webapp: build: . ports: - "8000:8000" volumes: - "/data"
基本的なdocker-compose.ymlを作成します。 例:
web: extends: file: common-services.yml service: webapp
さらに、構成を定義(または上書き)して、他のサービスをローカルに追加できます。
web: extends: file: common-services.yml service: webapp environment: - DEBUG=1 cpu_shares: 5 links: - db important_web: extends: web cpu_shares: 10 db: image: postgres
一般的な問題
起動制御
Docker Composeは、コンテナが開始するのを待ってから次のコンテナに進みます。 アプリケーションの一部が使用できなくなった場合、Docker Composeは残りのアプリケーションの柔軟性を期待します。
環境ファイル
docker-composeの実行中にシェルまたはコマンドラインで環境変数を定義すると、これらの変数は.envファイルよりも優先されます。
環境変数をバージョン管理システムに保存しないでください。 環境ファイルを使用している場合、ローカル無視ファイルに追加し、次の例のようなenv.sampleパターンを作成します(上記の.envファイルを使用する場合)。
COMPOSE_API_VERSION= # 2 COMPOSE_HTTP_TIMEOUT= # 30 120 DOCKER_CERT_PATH= # EXTERNAL_PORT= # (, 5000 Flask 8000 Django)
複数のDocker Composeファイルの使用
Docker Composeは、指定した順序でファイルをマージすることに注意してください。
サービス拡張
サービスは、extendsを使用してリンク、volumes_from、depends_onを共有することはありません。 linksとvolumes_fromは常にローカルで定義する必要があります。
終わり
質問、提案、コメント-コメントへようこそ。 リアルタイムでリラックスしたい場合は、Open Doors Dayコースに参加してください。