翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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 ファイルには、Dockerfile
、docker-compose.yml
ファイル、アプリケーションファイル、およびアプリケーションファイルの依存関係を含める必要があります。Dockerfile
とdocker-compose.yml
は、.zip アーカイブのルート、つまり最上位レベルにある必要があります。EB CLI を使用してアプリケーションをデプロイする場合には、.zip ファイルが自動的に作成されます。
Docker Compose の詳細およびインストール方法については、Docker サイトの「Docker Compose の概要
Elastic Beanstalk で Docker Compose を使用せずにイメージを管理する
Docker Compose を使用して Docker イメージを管理していない場合は、Dockerfile
、Dockerrun.aws.json
ファイル、またはその両方を設定する必要があります。
-
Dockerfile
を作成し、Elastic Beanstalk でカスタムイメージをローカルにビルドして実行します。 -
Dockerrun.aws.json v1
ファイルを作成して、ホストされたレポジトリから Elastic Beanstalk に Docker イメージをデプロイします。 -
.zip
ファイルの作成が必要になる場合があります。Dockerfile
またはDockerrun.aws.json
のいずれか 1 つのファイルのみを使用する場合は、.zip ファイルを作成する必要はありません。両方のファイルを使用する場合は、.zip ファイルが必要です。.zip ファイルには、アプリケーションファイルとアプリケーションファイルの依存関係を含むファイルに加えて、Dockerfile
とDockerrun.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 の値は、Dockerfile
の EXPOSE リストの最初のエントリに一致する必要があります。必要に応じて、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
ファイルのみ、または .zip
と Dockerrun.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 ドキュメントのウェブサイトのマルチステージビルドを使用する