AWS Elastic Beanstalk
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

多容器 Docker 配置

Dockerrun.aws.json 文件是一个 Elastic Beanstalk 特定的 JSON 文件,该文件描述如何将一组 Docker 容器作为一个 Elastic Beanstalk 应用程序进行部署。您可以对多容器 Docker 环境使用 Dockerrun.aws.json 文件。

Dockerrun.aws.json 描述了要部署到环境中的每个容器实例的容器 (托管 Docker 容器的 Amazon EC2 实例),以及要在将装载的容器的主机实例上创建的数据卷。

Dockerrun.aws.json 文件既可单独使用,也可与其他源代码一起压缩到一个存档中。与 Dockerrun.aws.json 一起存档的源代码将部署到 Amazon EC2 容器实例中,并且可在 /var/app/current/ 目录中进行访问。使用配置的 volumes 部分,为主机实例上运行的 Docker 容器提供文件卷。使用嵌入容器定义的 mountPoints 部分,将这些卷映射到 Docker 容器上的应用程序可以使用的装载点。

Dockerrun.aws.json v2

Dockerrun.aws.json 文件包括三个部分:

AWSEBDockerrunVersion

将多容器 Docker 环境的版本号指定为值“2”。

containerDefinitions

一组容器定义,详细信息如下。

根据 Amazon EC2 容器实例,或您的源包 (已部署到 /var/app/current) 中的文件夹创建卷。使用容器定义中的 mountPoints,将这些卷装载到您的 Docker 容器中的路径。

注意

Elastic Beanstalk 为日志配置附加卷 (每个卷对应一个容器)。这些卷应由您的 Docker 容器装载,以便将日志写入主机实例。有关更多信息,请参阅 容器定义格式

用以下格式指定卷:

"volumes": [ { "name": "volumename", "host": { "sourcePath": "/path/on/host/instance" } } ],
身份验证

(可选) 包含私有存储库身份验证数据的 .dockercfg 文件在 Amazon S3 中的位置。使用下列格式:

"authentication": { "bucket": "my-bucket", "key": "mydockercfg" },

有关更多信息,请参阅 使用私有存储库中的镜像

以下代码段是一个示例,该示例说明了带两个容器实例的 Dockerrun.aws.json 文件的语法。

{ "AWSEBDockerrunVersion": 2, "volumes": [ { "name": "php-app", "host": { "sourcePath": "/var/app/current/php-app" } }, { "name": "nginx-proxy-conf", "host": { "sourcePath": "/var/app/current/proxy/conf.d" } } ], "containerDefinitions": [ { "name": "php-app", "image": "php:fpm", "environment": [ { "name": "Container", "value": "PHP" } ], "essential": true, "memory": 128, "mountPoints": [ { "sourceVolume": "php-app", "containerPath": "/var/www/html", "readOnly": true } ] }, { "name": "nginx-proxy", "image": "nginx", "essential": true, "memory": 128, "portMappings": [ { "hostPort": 80, "containerPort": 80 } ], "links": [ "php-app" ], "mountPoints": [ { "sourceVolume": "php-app", "containerPath": "/var/www/html", "readOnly": true }, { "sourceVolume": "nginx-proxy-conf", "containerPath": "/etc/nginx/conf.d", "readOnly": true }, { "sourceVolume": "awseb-logs-nginx-proxy", "containerPath": "/var/log/nginx" } ] } ] }

使用私有存储库中的镜像

authentication 文件的 Dockerrun.aws.json 参数中添加有关包含身份验证文件的 Amazon S3 存储桶的信息。确保 authentication 参数包含有效的 Amazon S3 存储桶和密钥。Amazon S3 存储桶必须托管于与使用它的环境相同的区域中。Elastic Beanstalk 不会从托管在其他区域中的 Amazon S3 存储桶下载文件。

有关生成和上传身份验证文件的信息,请参阅使用私有存储库中的镜像

容器定义格式

Dockerrun.aws.json 的容器定义和卷部分使用的格式与 Amazon ECS 任务定义文件的相应部分使用的格式相同。

以下示例显示常用参数的子集。将提供更多可选参数。有关任务定义格式和任务定义参数的完整列表的更多信息,请参阅《Amazon ECS 开发人员指南》中的 Amazon ECS 任务定义

Dockerrun.aws.json 文件包含一组 (一个或多个) 带以下字段的容器定义对象:

name

容器的名称。有关最大长度和允许字符数的信息,请参阅标准容器定义参数

image

您从中构建 Docker 容器的在线 Docker 存储库中的 Docker 映像的名称。记下这些约定:

  • Docker Hub 上的官方存储库中的映像使用一个名称 (例如,ubuntumongo)。

  • Docker Hub 上其他存储库中的映像通过组织名称 (例如,amazon/amazon-ecs-agent) 进行限定。

  • 其他在线存储库中的映像由域名 (例如,quay.io/assemblyline/ubuntu) 进行进一步限定。

环境

一组要传递到容器的环境变量。

例如,以下条目定义名称为 Container 且值为 PHP 的环境变量:

"environment": [ { "name": "Container", "value": "PHP" } ],
essential

如果在容器出现故障时应停止任务,则为 true。非主要容器可在不影响实例上的其余容器的情况下完成或发生崩溃。

memory

要为容器预留的容器实例上的内存量。在容器定义中为 memory 和/或 memoryReservation 参数指定一个非零整数。

memoryReservation

要为容器预留的内存量的软限制(以 MiB 为单位)。在容器定义中为 memory 和/或 memoryReservation 参数指定一个非零整数。

mountPoints

要装载的 Amazon EC2 容器实例上的卷,和要将卷装载到的 Docker 容器文件系统上的位置。如果您装载的卷中包含应用程序内容,您的容器能够读取您在源包中上传的数据。如果您装载日志卷用于写入日志数据,Elastic Beanstalk 可以从这些卷收集日志数据。

Elastic Beanstalk 在位于 /var/log/containers/containername 的容器实例上创建日志卷,每个 Docker 容器一个。这些卷将命名为 awseb-logs-containername 且将挂载到将日志写入到的容器文件结构中的位置。

例如,以下挂载点将容器中的 nginx 日志位置映射到 nginx-proxy 容器的 Elastic Beanstalk 生成的卷。

{ "sourceVolume": "awseb-logs-nginx-proxy", "containerPath": "/var/log/nginx" }
portMappings

将容器上的网络端口映射到主机上的端口。

links

要链接到的容器的列表。链接的容器可互相发现并安全地通信。

volumesFrom

从不同容器挂载所有卷。例如,从名为 web 的容器挂载卷:

"volumesFrom": [ { "sourceContainer": "web" } ],