メニュー
AWS Elastic Beanstalk
開発者ガイド (API Version 2010-12-01)

複数コンテナの Docker 設定

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

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

Dockerrun.aws.json ファイルは単独で使用するか、1 つのアーカイブに追加のソースコードとともに圧縮できます。Dockerrun.aws.json でアーカイブされるソースコードはコンテナインスタンスにデプロイされ、/var/app/current/ ディレクトリでアクセスできます。設定の volumes セクションを使用して、インスタンスで実行されるコンテナのマウントポイントを提供し、埋め込みコンテナ定義の mountPoints セクションを使用して、コンテナからそれらをマウントします。

Dockerrun.aws.json v2

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

AWSEBDockerrunVersion

複数コンテナの Docker 環境にはバージョン番号として値「2」を指定します。

containerDefinitions

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

ボリューム

コンテナが使用できるコンテナインスタンスのマウントポイントを作成します。コンテナのアプリケーションが読み取れるように、ソースバンドルのフォルダーのボリューム(コンテナインスタンスの /var/app/current にデプロイされる)を設定します。

注記

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

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

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

認証

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

"authentication": {
    "bucket": "my-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"
        }
      ]
    }
  ]
}

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

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

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

コンテナ定義形式

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

一般的に使用されるパラメータのサブセットには以下のようなものがあります。そのほかのオプションパラメータも使用可能です。タスク定義の形式およびタスク定義パラメータの完全な一覧については、Amazon ECS 開発者ガイドの「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。重要でないコンテナは、インスタンスで他のコンテナに影響を与えることなく、終了またはクラッシュできます。

メモリ

コンテナ用に予約するコンテナインスタンスのメモリの量。

mountPoints

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

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

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

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

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

links

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

volumesFrom

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

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