翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Docker の設定
このセクションでは、Elastic Beanstalk にデプロイする Docker イメージとコンテナを準備する方法について説明します。
Docker Compose ありのドッカー環境
このセクションでは、Elastic Beanstalk にデプロイする Docker イメージとコンテナを準備する方法について説明します。Docker 環境で Elastic Beanstalk にデプロイするウェブアプリケーションには、Docker Compose ツールも使用する場合は docker-compose.yml
ファイルを含める必要があります。次のいずれかのアクションを実行して、ウェブアプリケーションをコンテナ化されたサービスとして Elastic Beanstalk にデプロイできます。
-
docker-compose.yml
ファイルを作成して、ホストされたレポジトリから Elastic Beanstalk に Docker イメージをデプロイします。すべてのデプロイのソースがパブリックリポジトリ内のイメージである場合、他のファイルは不要です。(デプロイのソースをプライベートリポジトリのイメージにする必要がある場合、認証用の追加の設定ファイルを含める必要があります。詳しくは、「プライベートリポジトリのイメージを使用する」を参照してください。docker-compose.yml
ファイルの詳細については、Docker ウェブサイトの「Compose file reference」を参照してください。 -
Dockerfile
を作成し、Elastic Beanstalk でカスタムイメージをビルドして実行します。このファイルは、デプロイの要件に応じて必要になりますです。Dockerfile
の詳細については、Docker ウェブサイトの「Dockerfile reference」を参照してください。 -
アプリケーションファイル、アプリケーションファイルの依存関係、
.zip
、およびDockerfile
ファイルを含むdocker-compose.yml
ファイルを作成します。EB CLI を使用してアプリケーションをデプロイする場合には、.zip
ファイルが自動的に作成されます。2 つのファイルは、.zip
アーカイブのルートまたは最上位レベルにある必要があります。docker-compose.yml
のみを使用してアプリケーションをデプロイする場合、.zip
ファイルを作成する必要はありません。
このトピックは、構文リファレンスです。Elastic Beanstalk を使用して Docker 環境を起動する手順の詳細については、「」を参照してくださいDocker プラットフォームブランチの使用
Docker Compose の詳細およびインストール方法については、Docker サイトの「Docker Compose の概要
注記
Docker Compose を使用して Docker 環境を設定しない場合は、docker-compose.yml
ファイルを使用しないでください。代わりに、Dockerrun.aws.json
ファイル、Dockerfile
またはその両方を使用します。
詳細については、「」を参照してくださいDocker プラットフォームの設定 (Docker Compose なし)
プライベートリポジトリからのイメージの使用
Elastic Beanstalk は、プライベートリポジトリからイメージをプルしてデプロイする前に、プライベートリポジトリをホストするオンラインレジストリで認証する必要があります。リポジトリに認証するために、Elastic Beanstalk 環境用の認証情報を保存および取得する、2 つのオプションの例を示します。
-
AWS Secrets Manager
-
Dockerrun.aws.json v3
ファイル
デプロイプロセスを開始する前に、プライベートリポジトリにログインするように Elastic Beanstalk を設定できます。これにより、Elastic Beanstalk はリポジトリからイメージにアクセスし、これらのイメージを Elastic Beanstalk 環境にデプロイできます。
この設定は、Elastic Beanstalk デプロイプロセスのビルド前フェーズでイベントを開始します。.ebextentions 設定ディレクトリでこれをセットアップします。この設定では、docker login を呼び出すプラットフォームフックスクリプトを使用して、プライベートリポジトリをホストするオンラインレジストリを認証します。これらの設定ステップの詳細な内訳を次に示します。
AWS Secrets Manager を使用してプライベートリポジトリに対して認証するよう Elastic Beanstalk を設定するには
注記
これらの手順を完了するには、特定の権限を付与する必要があります。詳細については、以下のリファレンスを参照してください。
-
ステップ 2 では、シークレットを作成する権限が必要です。詳細については、AWS Secrets Manager ユーザーガイドの「例: シークレットを作成する権限」を参照してください。
-
ステップ 3 では、
secretsmanager
動的参照を使用してシークレットを取得する権限が必要です。詳細については、「AWS Secrets Manager ユーザーガイド」の「例: シークレット値を取得するアクセス許可」を参照してください。
-
次のように
.ebextensions
ディレクトリ構造を作成します。├── .ebextensions │ └── env.config ├── .platform │ ├── confighooks │ │ └── prebuild │ │ └── 01login.sh │ └── hooks │ └── prebuild │ └── 01login.sh ├── docker-compose.yml
-
AWS Secrets Manager を使用してプライベートリポジトリの認証情報を保存し、Elastic Beanstalk が必要に応じて認証情報を取得できるようにします。そのためには、シークレットマネージャーの create-secret AWS CLI コマンドを実行します。
aws secretsmanager create-secret \ --name
MyTestSecret
\ --description "My image repo credentials created with the CLI.
" \ --secret-string "{\"USER\
":\"EXAMPLE-USERNAME\
",\"PASSWD\
":\"EXAMPLE-PASSWORD\
"}" -
次の
env.config
ファイルを作成し、前述のディレクトリ構造に示すように、.ebextensions
ディレクトリに配置します。この設定では、aws: elasticbeanstalk: application: environment 名前空間を使い、AWS Secrets Manager への動的参照を利用してUSER
およびPASSWD
Elastic Beanstalk 環境変数を初期化します。secretsmanager
動的参照の詳細については、AWS Secrets Manager ユーザーガイドの「AWS CloudFormation リソース内の AWS Secrets Manager シークレットの取得」を参照してください。注記
スクリプト内の
USER
およびPASSWD
は、前述のsecretsmanager
create-secret コマンドで使用したものと同じ文字列と一致する必要があります。option_settings: aws:elasticbeanstalk:application:environment: USER: '{{resolve:secretsmanager:MyTestSecret:SecretString:USER}}' PASSWD: '{{resolve:secretsmanager:MyTestSecret:SecretString:PASSWD}}'
-
次の
01login.sh
スクリプトファイルを作成し、次のディレクトリに配置します (前述のディレクトリ構造にも示されています)。-
.platform/confighooks/prebuild
-
.platform/hooks/prebuild
### example 01login.sh #!/bin/bash USER=/opt/elasticbeanstalk/bin/get-config environment -k USER /opt/elasticbeanstalk/bin/get-config environment -k PASSWD | docker login -u $USER --password-stdin
01login.sh
スクリプトは get-config プラットフォームスクリプトを呼び出して、リポジトリの認証情報を取得し、リポジトリにログインします。ユーザー名をUSER
スクリプト変数に格納します。次の行で、パスワードを取得します。パスワードをスクリプト変数に格納せずに、スクリプトはパスワードをstdin
入力ストリームの docker login コマンドに直接パイプします。--password-stdin
オプションでは入力ストリームを使用するため、パスワードを変数に格納する必要はありません。Docker コマンドラインインターフェイスによる認証の詳細については、Docker ドキュメンテーション Web サイトの「docker ログイン」を参照してください。 メモ
-
すべてのスクリプトファイルには、実行アクセス許可が必要です。フックファイルの実行アクセス許可を設定するために chmod +x を使用します。2022 年 4 月 29 日以降にリリースされたすべての Amazon Linux 2 ベースのプラットフォームバージョンでは、Elastic Beanstalk はすべてのプラットフォームフックスクリプトに対して実行アクセス権限を自動的に付与します。この場合、実行アクセス権限を手動で付与する必要はありません。これらのプラットフォームのバージョンのリストについては、「AWS Elastic Beanstalkガイドリリースノート」の 2022 年 4 月 29 日- Linux プラットフォームリリースノートを参照してください。
-
フックファイルは、バイナリファイル、またはインタプリタパスを含む #! 行で始まるスクリプトファイル (#!/bin/bash など) です。
-
詳細については、「Elastic Beanstalk Linux プラットフォームの拡張」の「プラットフォームフック」を参照してください。
-
Elastic Beanstalk がプライベートリポジトリをホストするオンラインレジストリで認証した後、イメージをプルしてデプロイできます。
このセクションでは、プライベートリポジトリに対して Elastic Beanstalk を認証する別の方法について説明します。この方法では、Docker コマンドを使用して認証ファイルを生成し、認証ファイルを Amazon S3 バケットにアップロードします。また、Dockerrun.aws.json v3
ファイルにバケット情報を含める必要もあります。
認証ファイルを生成して Elastic Beanstalk に提供するには
-
docker login コマンドを使用して認証ファイルを生成します。Docker Hub のリポジトリでは、docker login を実行します。
$
docker login
他のレジストリでは、レジストリサーバーの URL を入力します。
$
docker login
registry-server-url
注記
Elastic Beanstalk 環境で (Amazon Linux 2 より前の) Amazon Linux AMI Docker プラットフォームバージョンを使用している場合は、「(Amazon Linux 2 より前の) Amazon Linux AMI での Docker 設定」の関連情報をお読みください。
認証ファイルの詳細については、Docker ウェブサイトのDocker ハブにイメージを保存する
およびdocker ログイン を参照してください。 -
.dockercfg
という名前の認証ファイルのコピーを安全な Amazon S3 バケットにアップロードします。-
Amazon S3 バケットは、バケットを使用している環境と同じ AWS リージョン でホストする必要があります。Elastic Beanstalk は、他のリージョンでホストされている Amazon S3 バケットからファイルをダウンロードすることはできません。
-
インスタンスプロファイル内の IAM ロールに
s3:GetObject
オペレーションを許可します。詳細については、「」を参照してくださいElastic Beanstalk インスタンスプロファイルの管理
-
-
Amazon S3 バケット情報を、
Authentication
ファイルのDockerrun.aws.json v3
パラメータに含めます。Dockerrun.aws.json v3
ファイルの例を次に示します。{ "AWSEBDockerrunVersion": "3", "Authentication": { "bucket": "
DOC-EXAMPLE-BUCKET
", "key": "mydockercfg
" } }注記
AWSEBDockerrunVersion
パラメータは、Dockerrun.aws.json
ファイルのバージョンを示します。-
Docker Amazon Linux 2 プラットフォームは、Docker Composeを使用する環境用の
Dockerrun.aws.json v3
ファイルを使用します。Docker Composeを使用しない環境ではDockerrun.aws.json v1
ファイルを使用します。 -
マルチコンテナ Docker Amazon Linux AMI プラットフォームは、
Dockerrun.aws.json v2
ファイルを使用します。
-
Elastic Beanstalk がプライベートリポジトリをホストするオンラインレジストリで認証した後、イメージをデプロイしてプルできます。
Dockerfile を使用したカスタムイメージの構築
リポジトリでホストされている既存のイメージがない場合は、Dockerfile
を作成する必要があります。
以下のスニペットは Dockerfile
の例です。「Docker プラットフォームブランチの使用」の手順に従う場合は、この手順の 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 ドキュメントのウェブサイトのマルチステージビルドを使用する
Docker プラットフォームの設定 (Docker Compose なし)
Elastic Beanstalk Docker 環境で Docker Compose が使用されていない場合は、次のセクションの追加情報を読んでください。
Docker 環境で Elastic Beanstalk にデプロイするウェブアプリケーションは、Dockerfile
または Dockerrun.aws.json
ファイルを含んでいる必要があります。以下のいずれかのアクションを行うことによって Docker コンテナから Elastic Beanstalk にウェブアプリケーションをデプロイできます。
-
Dockerfile
を作成し、Elastic Beanstalk でカスタムイメージをビルドして実行します。 -
Dockerrun.aws.json
ファイルを作成して、ホストされたレポジトリから Elastic Beanstalk に Docker イメージをデプロイします。 -
アプリケーションファイル、アプリケーションファイルの依存関係、
.zip
、およびDockerfile
ファイルを含むDockerrun.aws.json
ファイルを作成します。EB CLI を使用してアプリケーションをデプロイする場合には、.zip
ファイルが自動的に作成されます。Dockerfile
のみ、またはDockerrun.aws.json
ファイルのみを使用してアプリケーションをデプロイする場合、.zip
ファイルを作成する必要はありません。
このトピックは、構文リファレンスです。Docker 環境の起動の詳細な手順については、「」を参照してくださいDocker プラットフォームブランチの使用
セクション
Dockerrun.aws.json
ファイルは、リモート Docker イメージを Elastic Beanstalk アプリケーションとしてデプロイする方法を記述します。この JSON ファイルは Elastic Beanstalk に固有です。ホストされたレポジトリで使用できるイメージでアプリケーションが実行される場合、Dockerrun.aws.json v1
ファイルでイメージを指定し、Dockerfile
を省略できます。
Dockerrun.aws.json v1
ファイルの有効なキーと値には、以下のオペレーションが含まれます。
- AWSEBDockerrunVersion
-
(必須)単一コンテナの Docker 環境にバージョン番号を値「
1
」として指定します。 - 認証
-
(プライベートリポジトリの場合にのみ必須)
.dockercfg
ファイルを保存する Amazon S3 オブジェクトを指定します。「 プライベートリポジトリからのイメージの使用」を参照してください。
- イメージ
-
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
ファイルに指定されているイメージを無視します。
認証ファイルを Authentication
ファイルの Dockerrun.aws.json
v1
パラメータ内に含む Amazon S3 バケットに関する情報を追加します。Authentication
パラメータに有効な Amazon S3 バケットとキーが含まれていることを確認します。Amazon S3 バケットは、バケットを使用している環境と同じ AWS リージョン でホストする必要があります。Elastic Beanstalk は、他のリージョンでホストされている Amazon S3 バケットからファイルをダウンロードしません。
認証ファイルの作成とアップロードについては、「プライベートリポジトリからのイメージの使用」を参照してください。
次の例は、サードパーティーレジストリでプライベートイメージを使用するように、mydockercfg
というバケットに
という認証ファイルを使用する方法を示しています。DOC-EXAMPLE-BUCKET
{
"AWSEBDockerrunVersion": "1",
"Authentication": {
"Bucket": "DOC-EXAMPLE-BUCKET
",
"Key": "mydockercfg
"
},
"Image": {
"Name": "quay.io/johndoe/private-image",
"Update": "true"
},
"Ports": [
{
"ContainerPort": "1234"
}
],
"Volumes": [
{
"HostDirectory": "/var/app/mydb",
"ContainerDirectory": "/etc/mysql"
}
],
"Logging": "/var/log/nginx"
}