Elastic Beanstalk(以下EB)で、Docker HubのプライベートリポジトリにホストしているDockerイメージを使用してデプロイするための設定方法をざっくりまとめ
1. リポジトリを指定する
Dockerrun.aws.jsonにImage
キーを追記する
{
"AWSEBDockerrunVersion": "1",
"Image": {
"Name": "organization/image-name",
"Update": "true"
}
}
-
Name
キーにはDockerリポジトリを指定する -
Update
キーにはイメージのキャッシュを上書きするかどうか指定します。デフォルトはtrue
🚫 注意点🚫
Dockerfile
がソースバンドルに含まれている場合、Dockerrun.aws.jsonのImageを無視しDockerfile
を使用してコンテナ構築が行われるため、Dockerfileは含めないようにしましょう
2. リポジトリの認証を設定する
インスタンスからプライベートリポジトリにアクセスできるように、docker loginを行う設定をします。主に2種類の設定方法がありますが、ここではそれぞれ概要をまとめる程度にします。詳しくは公式ドキュメントを参照ください
-
AWS Systems Manager (SSM) パラメータストア
SSMに認証情報を保存し、デプロイプロセスのビルド前フェーズでイベントを発生されるフックスクリプトを使用して、認証情報の取得・docker loginを行う方法 -
Dockerrun.aws.jsonファイル
docker login時に作成される認証ファイルをS3に置き、そのバケット情報をDockerrun.aws.jsonに記載する方法
ちなみに私のローカル環境下(MacBook Pro 13-inch 2018、Docker for Mac)では期待する認証ファイルが作成されなかったため、1番を参考にセットアップを行いました
3. その他Docker設定を記載する
- Port (必須)
Docker コンテナで公開するポートを指定します。基本的にはカスタムイメージを作成したときのEXPOSEと同じ値で問題ないと思われます。こちらを指定しないとコンテナが起動しません
{
"AWSEBDockerrunVersion": "1",
"Image": {
"Name": "organization/image-name",
"Update": "true"
},
"Ports": [
{
"ContainerPort": "3000"
}
]
}
- Volumes, Logging, Entrypoint, Command (オプショナル)
お好みに応じてDocker周りの設定を記載します。詳しい設定方法は公式ドキュメントを参照ください
4. デプロイに使用するソースバンドルの中身を調整
上記の🚫 注意点🚫
でも書いているように、Dockerfile
をソースバンドルに含めないように、.ebignore
で必要のないファイルを対象外にします
# 全ファイルを対象から外す
.
# EB設定ファイル
# ファイル名に!をつけて対象にする
!.ebextensions/*.config
!.platform/**/*.*
# Dockerビルド用ファイル
!Dockerrun.aws.json
参考