高度なDocker構成の構成(翻訳)

Docker Composeには、この投稿でカバーする多くの重要な用途があります。 これは、Web開発のためのPythonコースの資料を準備する際にレビューした記事の別の翻訳です



起動制御


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コースに参加してください。

Source: https://habr.com/ru/post/J337688/


All Articles