メニュー
AWS Elastic Beanstalk
開発者ガイド (API Version 2010-12-01)

単一コンテナの Docker の設定

このセクションでは、Elastic Beanstalk を更新するために Docker イメージとコンテナを準備する方法について説明します。単一コンテナの Docker コンテナで Elastic Beanstalk にデプロイするウェブアプリケーションには、カスタムイメージを定義する Dockerfile、使用する既存のイメージと環境設定を指定する Dockerrun.aws.json ファイル、またはその両方を含める必要があります。以下のいずれかの操作を行うことによって Docker コンテナから Elastic Beanstalk にウェブアプリケーションをデプロイできます。

  • イメージをカスタマイズするため、および Docker コンテナを Elastic Beanstalk にデプロイするために、Dockerfile を作成します。

  • Dockerrun.aws.json ファイルを作成して Docker コンテナを既存の Docker イメージから Elastic Beanstalk にデプロイします。

  • アプリケーションファイル、アプリケーションファイルの依存関係、Dockerfile、および Dockerrun.aws.json ファイルを含む .zip ファイルを作成します。

    Dockerfile のみ、または Dockerrun.aws.json ファイルのみを使用してアプリケーションをデプロイする場合、.zip 形式でファイルを圧縮する必要はありません。

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 のイメージの場合は <組織>/<イメージ名> 形式、その他のサイトの場合は <サイト>/<組織名>/<イメージ名> 形式で指定します。

Dockerrun.aws.json ファイルでイメージを指定すると、Elastic Beanstalk 環境の各インスタンスはそのイメージで docker pull を実行し、それを実行します。必要に応じて Update キーを含めます。デフォルト値は "true" で、これはリポジトリをチェックし、イメージに対する更新を検出して、キャッシュされているイメージを上書きするように Elastic Beanstalk に指示します。

を使用するときは、 ファイルで Dockerrun.aws.jsonImageDockerfile キーを指定しないでください。Elastic Beanstalk は、存在する場合は Dockerfile に示されているイメージを常に構築して使用します。

ポート

Image キーを指定する場合は必須)Docker コンテナで公開するポートをリストアップします。Elastic Beanstalk は、ContainerPort の値を使用して、ホストで実行されているリバースプロキシに Docker コンテナを接続します。

複数のコンテナポートを指定できますが、Elastic Beanstalk は最初に指定したコンテナポートのみを使用してホストのリバースプロキシにコンテナを接続し、公衆インターネットからのリクエストをルーティングします。

ボリューム

EC2 インスタンスのボリュームを Docker コンテナにマッピングします。1 つ以上のボリューム配列をマッピング対象として指定します。

ログ記録

アプリケーションがログを書き込むディレクトリを指定します。ログ末尾やバンドルログをリクエストすると、Elastic Beanstalk によって Amazon S3 にこのディレクトリ内のログがすべてアップロードされます。このディレクトリ内の rotated という名前のフォルダーに対してログをローテーションさせる場合は、ローテーションさせたログを保管用に Amazon S3 にアップロードするように、Elastic Beanstalk を設定することもできます。詳細については、「Elastic Beanstalk 環境の Amazon EC2 インスタンスからのログの表示」を参照してください。

以下のスニペットは、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"
}

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 ファイルに指定されているイメージを無視します。

プライベートリポジトリからのイメージの使用

認証ファイルを [Authentication] ファイルの [Dockerrun.aws.json] パラメータ内に含む Amazon S3 バケットに関する情報を追加します。Authentication パラメータに有効な Amazon S3 バケットとキーが含まれていることを確認します。Amazon S3 バケットは、バケットを使用している環境と同じリージョンでホストする必要があります。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 を使用したカスタムイメージの構築

Docker は、Dockerfile を使用して、ソースバンドルが含まれる Docker イメージを作成します。Docker イメージとは、Docker コンテナを作成するときにベースとなるテンプレートのことです。Dockerfile は、Elastic Beanstalk が Elastic Beanstalk 環境の Amazon EC2 インスタンスごとにカスタマイズされた Docker イメージを作成するときに使用する指示を含んでいるプレーンテキストファイルです。 既存のイメージがリポジトリでホストされていない場合に Dockerfile を作成します。

Dockerfile には以下の指示を含めます。

FROM

ファイルの最初の指示として必須)Docker コンテナを作成するベースとなり、Elastic Beanstalk が後続の Dockerfile 指示を実行する対象となるベースイメージを指定します。

このイメージは、パブリックリポジトリ、サードパーティレジストリによってホストされているプライベートリポジトリ、または EC2 で実行しているリポジトリでホストできます。

EXPOSE

(必須)Docker コンテナで公開するポートをリストアップします。Elastic Beanstalk は、ポートの値を使用して、ホストで実行されているリバースプロキシに Docker コンテナを接続します。

複数のコンテナポートを指定できますが、Elastic Beanstalk は最初に指定したコンテナポートのみを使用してホストのリバースプロキシにコンテナを接続し、公衆インターネットからのリクエストをルーティングします。

CMD

起動時にコンテナが実行するコマンドに統合される、実行ファイルおよびデフォルトパラメータを指定します。次の形式を使用します。

CMD ["executable","param1","param2"]

CMD は、実行ファイルの引数を省略して、ENTRYPOINT コマンドのデフォルトのパラメータを指定するためにも使用できます。実行ファイルは CMD または ENTRYPOINT で指定する必要がありますが、両方で指定する必要はありません。基本的なシナリオでは CMD を使用し、ENTRYPOINT は省略します。

ENTRYPOINT

CMD と同じ JSON 形式を使用し、CMD のように、コンテナの起動時に実行するコマンドを指定します。また、docker run を使用して、コンテナが実行ファイルとして実行できるようにします。

ENTRYPOINT を定義する場合、CMD も同様に使用して、docker run-d オプションでオーバーライドできるデフォルトパラメータを指定できます。ENTRYPOINT によって定義されるコマンド(任意のパラメータを含む)は、コンテナの実行時に CMD または docker run からのパラメータと統合されます。

RUN

イメージ内でパッケージをインストールし、ウェブアプリケーションを設定する 1 つ以上のコマンドを指定します。

Dockerfile に RUN 指示を含める場合は、RUN 指示によって使用される Dockerfile 内のファイルとコンテキストを .zip ファイルに圧縮します。ディレクトリの最上位でファイルを圧縮します。

以下のスニペットは 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 を参照してください。