

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Elastic Beanstalk へのデプロイ用に Docker イメージを準備する
<a name="single-container-docker-configuration"></a>

このセクションでは、*AL2 または AL2023 を実行している Docker* のプラットフォームブランチのいずれかを使用して Elastic Beanstalk にデプロイするための Docker イメージを準備する方法について説明します。必要な設定ファイルは、イメージがローカルかリモートか、Docker Compose を使用しているかどうかによって異なります。

**注記**  
 Docker 環境を起動する手順の例については、「[Docker の QuickStart](docker-quickstart.md)」トピックを参照してください。

**Topics**
+ [Elastic Beanstalk で Docker Compose を使用してイメージを管理する](#single-container-docker-configuration-dc)
+ [Elastic Beanstalk で Docker Compose を使用せずにイメージを管理する](#single-container-docker-configuration.no-compose)
+ [Dockerfile を使用したカスタムイメージの構築](#single-container-docker-configuration.dockerfile)

## Elastic Beanstalk で Docker Compose を使用してイメージを管理する
<a name="single-container-docker-configuration-dc"></a>

Docker Compose を使用して、1 つの YAML ファイルでさまざまなサービスを管理できます。Docker Compose の詳細については、Docker ウェブサイトの「[Why use Compose?](https://docs.docker.com/compose/intro/features-uses/)」を参照してください。
+ `docker-compose.yml` を作成します。このファイルは、Docker Compose を使用して Elastic Beanstalk でアプリケーションを管理している場合に必要です。すべてのデプロイのソースがパブリックリポジトリ内のイメージである場合、他の設定ファイルは不要です。デプロイのソースイメージがプライベートリポジトリにある場合は、追加の設定を行う必要があります。詳細については、「[プライベートリポジトリからのイメージの使用](docker-configuration.remote-repo.md)」を参照してください。`docker-compose.yml` ファイルの詳細については、Docker ウェブサイトの「[Compose file reference](https://docs.docker.com/compose/compose-file/)」を参照してください。
+  `Dockerfile` はオプションです。Elastic Beanstalk でローカルのカスタムイメージをビルドして実行する場合は、このファイルを作成します。`Dockerfile` の詳細については、Docker ウェブサイトの「[Dockerfile reference](https://docs.docker.com/engine/reference/builder/)」を参照してください。
+  `.zip` ファイルの作成が必要になる場合があります。`Dockerfile` ファイルのみを使用してアプリケーションをデプロイする場合、このファイルを作成する必要はありません。追加の設定ファイルを使用する場合は、.zip ファイルには、`Dockerfile`、`docker-compose.yml` ファイル、アプリケーションファイル、およびアプリケーションファイルの依存関係を含める必要があります。`Dockerfile` と `docker-compose.yml` は、.zip アーカイブのルート、つまり最上位レベルにある必要があります。EB CLI を使用してアプリケーションをデプロイする場合には、.zip ファイルが自動的に作成されます。

Docker Compose の詳細およびインストール方法については、Docker サイトの「[Docker Compose の概要](https://docs.docker.com/compose/)」および「[Docker Compose のインストール](https://docs.docker.com/compose/install/)」を参照してください。

## Elastic Beanstalk で Docker Compose を使用せずにイメージを管理する
<a name="single-container-docker-configuration.no-compose"></a>

Docker Compose を使用して Docker イメージを管理していない場合は、`Dockerfile`、`Dockerrun.aws.json` ファイル、またはその両方を設定する必要があります。
+ `Dockerfile` を作成し、Elastic Beanstalk でカスタムイメージをローカルにビルドして実行します。
+ `Dockerrun.aws.json v1` ファイルを作成して、ホストされたレポジトリから Elastic Beanstalk に Docker イメージをデプロイします。
+ `.zip` ファイルの作成が必要になる場合があります。`Dockerfile` または `Dockerrun.aws.json` のいずれか *1 つのファイルのみ*を使用する場合は、.zip ファイルを作成する必要はありません。両方のファイルを使用する場合は、.zip ファイルが必要です。.zip ファイルには、アプリケーションファイルとアプリケーションファイルの依存関係を含むファイルに加えて、`Dockerfile` と `Dockerrun.aws.json` の両方が含まれている必要があります。EB CLI を使用してアプリケーションをデプロイする場合には、`.zip` ファイルが自動的に作成されます。

### `Dockerrun.aws.json` v1 設定ファイル
<a name="single-container-docker-configuration.dockerrun"></a>

`Dockerrun.aws.json` ファイルは、リモート Docker イメージを Elastic Beanstalk アプリケーションとしてデプロイする方法を記述します。この JSON ファイルは Elastic Beanstalk に固有です。ホストされたレポジトリで使用できるイメージでアプリケーションが実行される場合、`Dockerrun.aws.json v1` ファイルでイメージを指定し、`Dockerfile` を省略できます。

**`Dockerrun.aws.json` バージョン**  
 `AWSEBDockerrunVersion` パラメータは、`Dockerrun.aws.json` ファイルのバージョンを示します。  
Docker AL2 および AL2023 プラットフォームでは、次のバージョンのファイルを使用します。  
`Dockerrun.aws.json v3` – Docker Compose を使用する環境。
`Dockerrun.aws.json v1` – Docker Compose を使用しない環境。
*Amazon Linux 2 上で実行される ECS* と *AL2023 上で実行される ECS* は `Dockerrun.aws.json v2` ファイルを使用します。廃止されたプラットフォームである *ECS - マルチコンテナ Docker Amazon Linux AMI (AL1)* も同じバージョンを使用していました。



#### Dockerrun.aws.json v1
<a name="single-container-docker-configuration.dockerrun.awsjson"></a>

`Dockerrun.aws.json v1` ファイルの有効なキーと値には、以下のオペレーションが含まれます。

**AWSEBDockerrunVersion**  
(必須) Docker Compose を使用してイメージを管理していない場合は、バージョン番号 `1` を指定します。

**認証**  
(プライベートリポジトリの場合にのみ必須) `.dockercfg` ファイルを保存する Amazon S3 オブジェクトを指定します。  
この章で後述する「*プライベートリポジトリからのイメージの使用*」の「[イメージリポジトリを使用した認証の使用 AWS Secrets Manager](docker-configuration.remote-repo.md#docker-configuration.remote-repo.dockerrun-aws)」を参照してください。

**Image**  
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 インスタンスからのログの表示](using-features.logging.md)

**コマンド**  
コンテナで実行するコマンドを指定します。**エントリポイント**を指定した場合、**コマンド**は引数として**エントリポイント**に追加されます。詳細については、Docker ドキュメントの[CMD](https://docs.docker.com/engine/reference/run/#cmd-default-command-or-options) を参照してください。

**エントリポイント**  
コンテナの開始時に実行するデフォルトのコマンドを指定します。詳細については、Docker ドキュメントの [docker ps](https://docs.docker.com/engine/reference/run/#cmd-default-command-or-options) を参照してください。

以下のスニペットは、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` ファイルに指定されているイメージを無視します。

## Dockerfile を使用したカスタムイメージの構築
<a name="single-container-docker-configuration.dockerfile"></a>

リポジトリでホストされている既存のイメージがない場合は、`Dockerfile` を作成する必要があります。

以下のスニペットは `Dockerfile` の例です。「[Docker の QuickStart](docker-quickstart.md)」の手順に従う場合は、この手順の `Dockerfile` をそのままアップロードできます。この `Dockerfile` を使用する場合、Elastic Beanstalk はゲーム 2048 を実行します。

`Dockerfile` に含めることができる命令の詳細については、Docker ウェブサイトの [Dockerfile Reference](https://docs.docker.com/engine/reference/builder) を参照してください。

```
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 ドキュメントのウェブサイトの[マルチステージビルドを使用する](https://docs.docker.com/develop/develop-images/multistage-build/)を参照してください。