AWS Elastic Beanstalk
開発者ガイド

単一コンテナの 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 の値は、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 ファイルのみ、または Dockerrun.aws.jsonDockerfile ファイルの両方を含んだ .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 を参照してください。