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



All Articles