Elastic Beanstalk へのデプロイ用に Docker イメージを準備する - AWS Elastic Beanstalk

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Elastic Beanstalk へのデプロイ用に Docker イメージを準備する

このセクションでは、AL2 または AL2023 を実行している Docker のプラットフォームブランチのいずれかを使用して Elastic Beanstalk にデプロイするための Docker イメージを準備する方法について説明します。必要な設定ファイルは、イメージがローカルかリモートか、Docker Compose を使用しているかどうかによって異なります。

注記

Docker 環境を起動する手順の例については、「Docker の QuickStart」トピックを参照してください。

Elastic Beanstalk で Docker Compose を使用してイメージを管理する

Docker Compose を使用して、1 つの YAML ファイルでさまざまなサービスを管理できます。Docker Compose の詳細については、Docker ウェブサイトの「Compose を使用する理由」を参照してください。

  • docker-compose.yml を作成します。このファイルは、Docker Compose を使用して Elastic Beanstalk でアプリケーションを管理している場合に必要です。すべてのデプロイのソースがパブリックリポジトリ内のイメージである場合、他の設定ファイルは不要です。デプロイのソースイメージがプライベートリポジトリにある場合は、追加の設定を行う必要があります。詳細については、「プライベートリポジトリからのイメージの使用」を参照してください。docker-compose.yml ファイルの詳細については、Docker ウェブサイトの「Compose file reference」を参照してください。

  • Dockerfile はオプションです。Elastic Beanstalk でローカルのカスタムイメージをビルドして実行する場合は、このファイルを作成します。Dockerfile の詳細については、Docker ウェブサイトの「Dockerfile reference」を参照してください。

  • .zip ファイルの作成が必要になる場合があります。Dockerfile ファイルのみを使用してアプリケーションをデプロイする場合、このファイルを作成する必要はありません。追加の設定ファイルを使用する場合は、.zip ファイルには、Dockerfiledocker-compose.yml ファイル、アプリケーションファイル、およびアプリケーションファイルの依存関係を含める必要があります。Dockerfiledocker-compose.yml は、.zip アーカイブのルート、つまり最上位レベルにある必要があります。EB CLI を使用してアプリケーションをデプロイする場合には、.zip ファイルが自動的に作成されます。

Docker Compose の詳細およびインストール方法については、Docker サイトの「Docker Compose の概要」および「Docker Compose のインストール」を参照してください。

Elastic Beanstalk で Docker Compose を使用せずにイメージを管理する

Docker Compose を使用して Docker イメージを管理していない場合は、DockerfileDockerrun.aws.json ファイル、またはその両方を設定する必要があります。

  • Dockerfile を作成し、Elastic Beanstalk でカスタムイメージをローカルにビルドして実行します。

  • Dockerrun.aws.json v1 ファイルを作成して、ホストされたレポジトリから Elastic Beanstalk に Docker イメージをデプロイします。

  • .zip ファイルの作成が必要になる場合があります。Dockerfile または Dockerrun.aws.json のいずれか 1 つのファイルのみを使用する場合は、.zip ファイルを作成する必要はありません。両方のファイルを使用する場合は、.zip ファイルが必要です。.zip ファイルには、アプリケーションファイルとアプリケーションファイルの依存関係を含むファイルに加えて、DockerfileDockerrun.aws.json の両方が含まれている必要があります。EB CLI を使用してアプリケーションをデプロイする場合には、.zip ファイルが自動的に作成されます。

Dockerrun.aws.json v1 設定ファイル

Dockerrun.aws.json ファイルは、リモート Docker イメージを Elastic Beanstalk アプリケーションとしてデプロイする方法を記述します。この JSON ファイルは Elastic Beanstalk に固有です。ホストされたレポジトリで使用できるイメージでアプリケーションが実行される場合、Dockerrun.aws.json v1 ファイルでイメージを指定し、Dockerfile を省略できます。

Dockerrun.aws.json バージョン

AWSEBDockerrunVersion パラメータは、Dockerrun.aws.json ファイルのバージョンを示します。

  • Docker AL2 および AL2023 プラットフォームでは、次のバージョンのファイルを使用します。

    • Dockerrun.aws.json v3 – Docker Compose を使用する環境。

    • Dockerrun.aws.json v1 – Docker Compose を使用しない環境。

  • Amazon Linux 2 上で実行される ECS と AL2023 上で実行される ECS は Dockerrun.aws.json v2 ファイルを使用します。廃止されたプラットフォームである ECS - マルチコンテナ Docker Amazon Linux AMI (AL1) も同じバージョンを使用していました。

Dockerrun.aws.json v1 ファイルの有効なキーと値には、以下のオペレーションが含まれます。

AWSEBDockerrunVersion

(必須) Docker Compose を使用してイメージを管理していない場合は、バージョン番号 1 を指定します。

認証

(プライベートリポジトリの場合にのみ必須) .dockercfg ファイルを保存する Amazon S3 オブジェクトを指定します。

この章で後述する「プライベートリポジトリからのイメージの使用」の「Elastic Beanstalk でのプライベートリポジトリからのイメージの使用」を参照してください。

イメージ

Docker コンテナを作成するときにベースとなる既存の Docker リポジトリの Docker ベースイメージを指定します。Name キーの値を、Docker Hub 上のイメージの場合は <organization>/<image name> 形式で、その他のサイトの場合は <site>/<organization name>/<image name> 形式で指定します。

Dockerrun.aws.json ファイルでイメージを指定すると、Elastic Beanstalk 環境内の各インスタンスが docker pull を実行してイメージを実行します。必要に応じて Update キーを含めます。デフォルト値は true であり、これはリポジトリをチェックし、イメージに対する更新を検出して、キャッシュされているイメージを上書きするように Elastic Beanstalk に指示します。

Dockerfile を使用するときは、Dockerrun.aws.json ファイルで Image キーを指定しないでください。Elastic Beanstalk は、存在する場合は Dockerfile に示されているイメージを常に構築して使用します。

ポート

(Image キーを指定する場合は必須) Docker コンテナで公開するポートをリストアップします。Elastic Beanstalk は、ContainerPort の値を使用して、ホストで実行されているリバースプロキシに Docker コンテナを接続します。

複数のコンテナポートを指定できますが、Elastic Beanstalk では最初のポートのみが使用されます。このポートを使用して、コンテナをホストのリバースプロキシに接続し、公衆インターネットからのリクエストをルーティングします。Dockerfile を使用している場合、最初の ContainerPort の値は、DockerfileEXPOSE リストの最初のエントリに一致する必要があります。

必要に応じて、HostPort でポートのリストを指定することができます。HostPort エントリは、ContainerPort の値がマッピングされるホストポートを指定します。HostPort 値を指定しなかった場合、デフォルトで ContainerPort 値に設定されます。

{ "Image": { "Name": "image-name" }, "Ports": [ { "ContainerPort": 8080, "HostPort": 8000 } ] }
ボリューム

EC2 インスタンスのボリュームを Docker コンテナにマッピングします。1 つ以上のボリューム配列をマッピング対象として指定します。

{ "Volumes": [ { "HostDirectory": "/path/inside/host", "ContainerDirectory": "/path/inside/container" } ] ...
ログ収集

アプリケーションがログを書き込むコンテナ内のディレクトリを指定します。ログ末尾やバンドルログをリクエストすると、Elastic Beanstalk によって Amazon S3 にこのディレクトリ内のログがすべてアップロードされます。このディレクトリ内の rotated という名前のフォルダに対してログをローテーションさせる場合は、ローテーションさせたログを保管用に Amazon S3 にアップロードするように、Elastic Beanstalk を設定することもできます。詳細については、「」を参照してくださいElastic Beanstalk 環境の Amazon EC2 インスタンスからのログの表示

コマンド

コンテナで実行するコマンドを指定します。エントリポイントを指定した場合、コマンドは引数としてエントリポイントに追加されます。詳細については、Docker ドキュメントのCMD を参照してください。

エントリポイント

コンテナの開始時に実行するデフォルトのコマンドを指定します。詳細については、Docker ドキュメントの docker ps を参照してください。

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

{ "AWSEBDockerrunVersion": "1", "Image": { "Name": "janedoe/image", "Update": "true" }, "Ports": [ { "ContainerPort": "1234" } ], "Volumes": [ { "HostDirectory": "/var/app/mydb", "ContainerDirectory": "/etc/mysql" } ], "Logging": "/var/log/nginx", "Entrypoint": "/app/bin/myapp", "Command": "--argument" }>

Dockerrun.aws.json ファイルのみ、または .zipDockerrun.aws.json ファイルの両方を含んだ Dockerfile アーカイブを Elastic Beanstalk に提供できます。両方のファイルを提供する場合、Dockerfile は Docker イメージを記述し、Dockerrun.aws.json ファイルはデプロイに関する追加情報を提供します。これについては後ほど説明します。

注記

2 つのファイルは、.zip アーカイブのルートまたは最上位レベルにある必要があります。ファイルを含むディレクトリからアーカイブを構築しないでください。代わりに、そのディレクトリに移動し、そこでアーカイブを構築します。

両方のファイルを提供する場合は、Dockerrun.aws.json ファイルにイメージを指定しないでください。Elastic Beanstalk は Dockerfile で記述されているイメージを構築および使用し、Dockerrun.aws.json ファイルに指定されているイメージを無視します。

Dockerfile を使用したカスタムイメージの構築

リポジトリでホストされている既存のイメージがない場合は、Dockerfile を作成する必要があります。

以下のスニペットは Dockerfile の例です。「Docker の QuickStart」の手順に従う場合は、この手順の Dockerfile をそのままアップロードできます。この Dockerfile を使用する場合、Elastic Beanstalk はゲーム 2048 を実行します。

Dockerfile に含めることができる命令の詳細については、Docker ウェブサイトの Dockerfile Reference を参照してください。

FROM ubuntu:12.04 RUN apt-get update RUN apt-get install -y nginx zip curl RUN echo "daemon off;" >> /etc/nginx/nginx.conf RUN curl -o /usr/share/nginx/www/master.zip -L https://codeload.github.com/gabrielecirulli/2048/zip/master RUN cd /usr/share/nginx/www/ && unzip master.zip && mv 2048-master/* . && rm -rf 2048-master master.zip EXPOSE 80 CMD ["/usr/sbin/nginx", "-c", "/etc/nginx/nginx.conf"]
注記

単一の Dockerfile からマルチステージビルドを実行して、より小さなサイズのイメージを生成し、複雑さを大幅に軽減できます。詳細については、Docker ドキュメントのウェブサイトのマルチステージビルドを使用するを参照してください。