ECS マネージド Docker の設定 - AWS Elastic Beanstalk

ECS マネージド Docker の設定

Dockerrun.aws.json ファイルは、Docker コンテナのセットを Elastic Beanstalk アプリケーションとしてデプロイする方法を記述する、Elastic Beanstalk 固有の JSON ファイルです。Dockerrun.aws.json v2 ファイルは ECS マネージド Docker 環境で使用できます。

Dockerrun.aws.json は、環境の各コンテナインスタンス (Docker コンテナをホストする Amazon EC2 インスタンス) にデプロイするコンテナを示すとともに、マウントするコンテナのホストインスタンスで作成するデータボリュームを示します。

Dockerrun.aws.json ファイルは単独で使用するか、1 つのアーカイブに追加のソースコードとともに圧縮できます。Dockerrun.aws.json でアーカイブされるソースコードは Amazon EC2 コンテナインスタンスにデプロイされ、/var/app/current/ ディレクトリでアクセスできます。config の volumes セクションを使用して、ホストインスタンスで実行されている Docker コンテナのファイルボリュームを指定します。埋め込みコンテナ定義の mountPoints セクションを使用して、これらのボリュームを Docker コンテナのアプリケーションが使用できるマウントポイントにマッピングします。

Dockerrun.aws.json v2

[Dockerrun.aws.json] ファイルには 3 つのセクションが含まれます。

AWSEBDockerrunVersion

ECS マネージド Docker 環境のバージョン番号として値 2 を指定します。

containerDefinitions

以下に詳しく説明するコンテナ定義の配列です。

ボリューム

Amazon EC2 コンテナインスタンスのフォルダから、またはソースバンドル (/var/app/current にデプロイ) からボリュームを作成します。コンテナ定義mountPoints を使用して、これらのボリュームを Docker コンテナ内のパスにマウントします。

注記

Elastic Beanstalk は、コンテナごとにログ用の追加のボリュームを設定します。これらのボリュームは、ホストインスタンスにログを書き込むために、Docker コンテナによってマウントされる必要があります。詳細については、「コンテナの定義形式」を参照してください。

ボリュームは次の形式で指定します:

"volumes": [ { "name": "volumename", "host": { "sourcePath": "/path/on/host/instance" } } ],
認証

(オプション) プライベートリポジトリの認証データが含まれる .dockercfg ファイルの Amazon S3 内の場所です。以下の形式が使用されます。

"authentication": { "bucket": "DOC-EXAMPLE-BUCKET", "key": "mydockercfg" },

詳細については、「プライベートリポジトリからのイメージの使用」を参照してください。

以下のスニペットは、2 つのコンテナを持つインスタンスの Dockerrun.aws.json ファイルの構文を示す例です。

{ "AWSEBDockerrunVersion": 2, "volumes": [ { "name": "php-app", "host": { "sourcePath": "/var/app/current/php-app" } }, { "name": "nginx-proxy-conf", "host": { "sourcePath": "/var/app/current/proxy/conf.d" } } ], "containerDefinitions": [ { "name": "php-app", "image": "php:fpm", "environment": [ { "name": "Container", "value": "PHP" } ], "essential": true, "memory": 128, "mountPoints": [ { "sourceVolume": "php-app", "containerPath": "/var/www/html", "readOnly": true } ] }, { "name": "nginx-proxy", "image": "nginx", "essential": true, "memory": 128, "portMappings": [ { "hostPort": 80, "containerPort": 80 } ], "links": [ "php-app" ], "mountPoints": [ { "sourceVolume": "php-app", "containerPath": "/var/www/html", "readOnly": true }, { "sourceVolume": "nginx-proxy-conf", "containerPath": "/etc/nginx/conf.d", "readOnly": true }, { "sourceVolume": "awseb-logs-nginx-proxy", "containerPath": "/var/log/nginx" } ] } ] }

プライベートリポジトリからのイメージの使用

認証ファイルを authentication ファイルの Dockerrun.aws.json パラメータ内に含む Amazon S3 バケットに関する情報を追加します。authentication パラメータに有効な Amazon S3 バケットとキーが含まれていることを確認します。Amazon S3 バケットは、バケットを使用している環境と同じリージョンでホストする必要があります。Elastic Beanstalk は、他のリージョンでホストされている Amazon S3 バケットからファイルをダウンロードしません。

認証ファイルの作成とアップロードについては、「プライベートリポジトリからのイメージの使用」を参照してください。

コンテナの定義形式

Dockerrun.aws.json のコンテナ定義セクションとボリュームセクションは、Amazon ECS タスク定義ファイルの対応するセクションと同じ形式を使用します。

一般的に使用されるパラメータのサブセットには以下のようなものがあります。そのほかのオプションパラメータも使用可能です。タスク定義の形式およびタスク定義パラメータの完全な一覧については、Amazon Elastic Container Service 開発者ガイドの「Amazon ECS タスク定義」を参照してください。

Dockerrun.aws.json ファイルには、次のフィールドとともに 1 つ以上のコンテナ定義オブジェクトの配列が含まれます。

name

コンテナの名前。最大長と使用できる文字については、「標準のコンテナ定義のパラメータ」を参照してください。

イメージ

Docker コンテナの構築元となるオンライン Docker リポジトリの Docker イメージの名前。次の規則があります。

  • Docker ハブの公式リポジトリのイメージでは、1 つの名前 (例: ubuntumongo) を使用します。

  • Docker ハブの他のリポジトリのイメージは、組織名で修飾されます(例: amazon/amazon-ecs-agent)。

  • 他のオンラインリポジトリのイメージは、さらにドメイン名で修飾されます (例: quay.io/assemblyline/ubuntu)。

環境

コンテナに渡す環境変数の配列。

たとえば、次のエントリでは、Container という名前と PHP という値を使用して環境変数を定義しています。

"environment": [ { "name": "Container", "value": "PHP" } ],
essential

コンテナが失敗した場合にタスクを停止する場合は True。重要でないコンテナは、インスタンスで他のコンテナに影響を与えることなく、終了またはクラッシュできます。

メモリ

コンテナ用に予約するコンテナインスタンスのメモリの量。コンテナ定義で memorymemoryReservation パラメータの一方または両方に 0 以外の整数を指定します。

memoryReservation

コンテナ用に予約するメモリのソフト制限 (MiB 単位)。コンテナ定義で memorymemoryReservation パラメータの一方または両方に 0 以外の整数を指定します。

mountPoints

マウントする Amazon EC2 コンテナインスタンスのボリュームと、それらをマウントする Docker コンテナファイルシステム上の場所。アプリケーションコンテンツを含むボリュームをマウントすると、コンテナはソースバンドルにアップロードしたデータを読み取ることができます。ログデータを書き込むためのログボリュームをマウントすると、Elastic Beanstalk は、これらのボリュームからログデータを収集することができます。

Elastic Beanstalk はコンテナインスタンスにログボリュームを作成します。Docker コンテナごとに 1 つ、場所は /var/log/containers/containername です。これらのボリュームの名前は awseb-logs-containername で、ログが書き込まれるコンテナファイル構造内の場所にマウントします。

たとえば、次のマウントポイントは、コンテナの nginx ログの場所を、nginx-proxy コンテナ用に Elastic Beanstalk が生成したボリュームにマッピングします。

{ "sourceVolume": "awseb-logs-nginx-proxy", "containerPath": "/var/log/nginx" }
portMappings

コンテナのネットワークポートをホストのポートにマッピングします。

links

リンク先のコンテナのリスト。リンクされたコンテナはお互いを検出し、安全に通信できます。

volumesFrom

別コンテナからのボリュームをすべてマウントします。たとえば、web という名前のコンテナからボリュームをマウントするには、次の手順を実行します。

"volumesFrom": [ { "sourceContainer": "web" } ],