単一コンテナの Docker の設定
このセクションでは、Elastic Beanstalk にデプロイする Docker イメージとコンテナを準備する方法について説明します。単一 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 v1
Dockerrun.aws.json
ファイルは、リモート Docker イメージを Elastic Beanstalk アプリケーションとしてデプロイする方法を記述します。この JSON ファイルは
Elastic Beanstalk に固有です。ホストされたレポジトリで使用できるイメージでアプリケーションが実行される場合、Dockerrun.aws.json
ファイルでイメージを指定し、Dockerfile
を省略できます。
Dockerrun.aws.json
ファイルの有効なキーと値は以下のとおりです。
- 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
ファイルのみ、または Dockerrun.aws.json
と Dockerfile
ファイルの両方を含んだ .zip
アーカイブを Elastic Beanstalk に提供できます。両方のファイルを提供する場合、Dockerfile
は Docker イメージを記述し、Dockerrun.aws.json
ファイルはデプロイに関する追加情報を提供します。これについては後ほど説明します。
注記
2 つのファイルは、.zip
アーカイブのルートまたは最上位レベルにある必要があります。ファイルを含むディレクトリからアーカイブを構築しないでください。そのディレクトリに移動し、そこでアーカイブを構築します。
両方のファイルを提供する場合は、Dockerrun.aws.json
ファイルでイメージを指定しないでください。Elastic Beanstalk は、Dockerfile
で記述されているイメージを構築して使用し、Dockerrun.aws.json
ファイルで指定されたイメージを無視します。
プライベートリポジトリからのイメージの使用
認証ファイルを Dockerrun.aws.json
ファイルの Authentication
パラメータに含む Amazon S3 バケットに関する情報を追加します。Authentication
パラメータに有効な Amazon S3 バケットとキーが含まれていることを確認します。Amazon S3 バケットは、バケットを使用している環境と同じ AWS リージョンでホストする必要があります。Elastic
Beanstalk は、他のリージョンでホストされている Amazon S3 バケットからファイルをダウンロードすることはできません。
認証ファイルの作成とアップロードについては、「プライベートリポジトリからイメージを使用する」を参照してください。
次の例は、サードパーティレジストリのプライベートイメージを使用するように、my-bucket
というバケットで mydockercfg
という認証ファイルを使用する方法を示しています。
{ "AWSEBDockerrunVersion": "1", "Authentication": { "Bucket": "
my-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" }
Dockerfile を使用したカスタムイメージの構築
リポジトリでホストされている既存のイメージがない場合は、Dockerfile
を作成します。
以下のスニペットは Dockerfile
の例です。単一コンテナの Docker 環境 の手順に従うと、この Dockerfile
をそのままアップロードできます。この Dockerfile
を使用すると、Elastic Beanstalk はゲーム 2048 を実行し ます。
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 ウェブサイトの Dockerfile Reference を参照してください。