选择您的 Cookie 首选项

我们使用必要 Cookie 和类似工具提供我们的网站和服务。我们使用性能 Cookie 收集匿名统计数据,以便我们可以了解客户如何使用我们的网站并进行改进。必要 Cookie 无法停用,但您可以单击“自定义”或“拒绝”来拒绝性能 Cookie。

如果您同意,AWS 和经批准的第三方还将使用 Cookie 提供有用的网站功能、记住您的首选项并显示相关内容,包括相关广告。要接受或拒绝所有非必要 Cookie,请单击“接受”或“拒绝”。要做出更详细的选择,请单击“自定义”。

从 Amazon Linux 上运行的多容器 Docker 迁移到 Amazon Linux 2 上运行的 Elastic Beanstalk Docker

聚焦模式
从 Amazon Linux 上运行的多容器 Docker 迁移到 Amazon Linux 2 上运行的 Elastic Beanstalk Docker - AWS Elastic Beanstalk

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在 64 位 Amazon Linux 2 上运行的 ECS 平台分支发布之前,针对拥有基于在 64 位 Amazon Linux 上运行的多容器 Docker 平台分支的环境的客户,Elastic Beanstalk 提供了到 Amazon Linux 2 的备用迁移路径。本主题介绍了该迁移路径,并保留在本文档中,作为完成该迁移路径的任何客户的参考。

如果客户拥有基于在 64 位 Amazon Linux 上运行的多容器 Docker 平台分支的环境,我们现在建议迁移到在 64 位 Amazon Linux 2 上运行 ECS 平台分支。与备用迁移路径不同,此方法继续使用 Amazon ECS 来协调向 ECS 托管式 Docker 环境的容器部署。这方面允许采用更直接的方法。无需更改源代码,支持相同的 Dockerrun.aws.json v2。有关更多信息,请参阅 将 Elastic Beanstalk 应用程序从 AL1 上的 ECS 托管多容器 Docker 迁移到 Amazon Linux 2023 上的 ECS

您可以将在 Amazon Linux AMI 上的多容器 Docker 平台上运行的应用程序迁移到 Amazon Linux 2 Docker 平台。Amazon Linux AMI 上的多容器 Docker 平台要求您指定要作为容器运行的预构建应用程序映像。迁移后,您将不再有此限制,因为 Amazon Linux 2 Docker 平台还允许 Elastic Beanstalk 在部署期间构建容器映像。您的应用程序将继续在多容器环境中运行,并获得 Docker Compose 工具的额外优势。

Docker Compose 是定义和运行多容器 Docker 应用程序的工具。要了解有关 Docker Compose 以及如何安装它的更多信息,请参阅 Docker 网站 Docker Compose 概述安装 Docker Compose

docker-compose.yml 文件

Docker Compose 工具使用 docker-compose.yml 文件配置您的应用程序服务。此文件将替换应用程序项目目录和应用程序源包中的 Dockerrun.aws.json v2 文件。您可以手动创建 docker-compose.yml 文件,此时您将发现这对引用您的 Dockerrun.aws.json v2 文件以获取大多数参数值很有帮助。

以下是同一应用程序的 docker-compose.yml 文件和相应 Dockerrun.aws.json v2 文件的示例。有关 docker-compose.yml 文件的更多信息,请参阅 Compose 文件参考。有关 Dockerrun.aws.json v2 文件的更多信息,请参阅Dockerrun.aws.json v2

docker-compose.yml Dockerrun.aws.json v2
version: '2.4' services: php-app: image: "php:fpm" volumes: - "./php-app:/var/www/html:ro" - "${EB_LOG_BASE_DIR}/php-app:/var/log/sample-app" mem_limit: 128m environment: Container: PHP nginx-proxy: image: "nginx" ports: - "80:80" volumes: - "./php-app:/var/www/html:ro" - "./proxy/conf.d:/etc/nginx/conf.d:ro" - "${EB_LOG_BASE_DIR}/nginx-proxy:/var/log/nginx" mem_limit: 128m links: - php-app
{ "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" } ] } ] }

其他迁移注意事项

Docker Amazon Linux 2 平台和多容器 Docker Amazon Linux AMI 平台以不同方式实现环境属性。这两个平台还有 Elastic Beanstalk 为其每个容器创建的不同日志目录。从 Amazon Linux AMI 多容器 Docker 平台迁移后,您需要了解这些不同的实现方式,以便在新 Amazon Linux 2 Docker 平台环境中使用。

领域 Amazon Linux 2 上带 Docker Compose 的 Docker 平台 Amazon Linux AMI 上的多容器 Docker 平台

环境属性

为使容器能够访问环境属性,您必须在 .env 文件中添加对 docker-compose.yml 文件的引用。Elastic Beanstalk 生成 .env 文件,将每个属性列为环境变量。有关更多信息,请参阅在容器中引用环境变量

Elastic Beanstalk 可以直接将环境属性传递给容器。在容器中运行的代码可以将这些属性作为环境变量访问,而无需任何其他配置。

日志目录

对于每个容器,Elastic Beanstalk 都会创建一个名为 /var/log/eb-docker/containers/<service name>(或 ${EB_LOG_BASE_DIR}/<service name>)的日志目录。有关更多信息,请参阅利用 Docker Compose 的 Docker 容器自定义日志记录

对于每个容器,Elastic Beanstalk 都会创建一个名为 /var/log/containers/<containername> 的日志目录。有关更多信息,请参阅容器定义格式中的 mountPoints 字段。

迁移步骤

迁移到 Amazon Linux 2 Docker 平台
  1. 根据应用程序的现有 docker-compose.yml 文件为应用程序创建 Dockerrun.aws.json v2 文件。有关更多信息,请参阅上述 docker-compose.yml 文件部分。

  2. 在应用程序项目文件夹的根目录中,将 Dockerrun.aws.json v2 文件替换为刚刚创建的 docker-compose.yml 文件。

    您的目录结构应如下所示。

    ~/myApplication |-- docker-compose.yml |-- .ebextensions |-- php-app |-- proxy
  3. 使用 eb init 命令配置本地目录以部署到 Elastic Beanstalk。

    ~/myApplication$ eb init -p docker application-name
  4. 使用 eb create 命令创建环境并部署 Docker 映像。

    ~/myApplication$ eb create environment-name
  5. 如果您的应用是 Web 应用程序,则在启动环境后,使用 eb open 命令在 Web 浏览器中查看它。

    ~/myApplication$ eb open environment-name
  6. 您可以使用 eb status 命令显示新创建的环境的状态。

    ~/myApplication$ eb status environment-name

您可以将在 Amazon Linux AMI 上的多容器 Docker 平台上运行的应用程序迁移到 Amazon Linux 2 Docker 平台。Amazon Linux AMI 上的多容器 Docker 平台要求您指定要作为容器运行的预构建应用程序映像。迁移后,您将不再有此限制,因为 Amazon Linux 2 Docker 平台还允许 Elastic Beanstalk 在部署期间构建容器映像。您的应用程序将继续在多容器环境中运行,并获得 Docker Compose 工具的额外优势。

Docker Compose 是定义和运行多容器 Docker 应用程序的工具。要了解有关 Docker Compose 以及如何安装它的更多信息,请参阅 Docker 网站 Docker Compose 概述安装 Docker Compose

docker-compose.yml 文件

Docker Compose 工具使用 docker-compose.yml 文件配置您的应用程序服务。此文件将替换应用程序项目目录和应用程序源包中的 Dockerrun.aws.json v2 文件。您可以手动创建 docker-compose.yml 文件,此时您将发现这对引用您的 Dockerrun.aws.json v2 文件以获取大多数参数值很有帮助。

以下是同一应用程序的 docker-compose.yml 文件和相应 Dockerrun.aws.json v2 文件的示例。有关 docker-compose.yml 文件的更多信息,请参阅 Compose 文件参考。有关 Dockerrun.aws.json v2 文件的更多信息,请参阅Dockerrun.aws.json v2

docker-compose.yml Dockerrun.aws.json v2
version: '2.4' services: php-app: image: "php:fpm" volumes: - "./php-app:/var/www/html:ro" - "${EB_LOG_BASE_DIR}/php-app:/var/log/sample-app" mem_limit: 128m environment: Container: PHP nginx-proxy: image: "nginx" ports: - "80:80" volumes: - "./php-app:/var/www/html:ro" - "./proxy/conf.d:/etc/nginx/conf.d:ro" - "${EB_LOG_BASE_DIR}/nginx-proxy:/var/log/nginx" mem_limit: 128m links: - php-app
{ "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" } ] } ] }

其他迁移注意事项

Docker Amazon Linux 2 平台和多容器 Docker Amazon Linux AMI 平台以不同方式实现环境属性。这两个平台还有 Elastic Beanstalk 为其每个容器创建的不同日志目录。从 Amazon Linux AMI 多容器 Docker 平台迁移后,您需要了解这些不同的实现方式,以便在新 Amazon Linux 2 Docker 平台环境中使用。

领域 Amazon Linux 2 上带 Docker Compose 的 Docker 平台 Amazon Linux AMI 上的多容器 Docker 平台

环境属性

为使容器能够访问环境属性,您必须在 .env 文件中添加对 docker-compose.yml 文件的引用。Elastic Beanstalk 生成 .env 文件,将每个属性列为环境变量。有关更多信息,请参阅在容器中引用环境变量

Elastic Beanstalk 可以直接将环境属性传递给容器。在容器中运行的代码可以将这些属性作为环境变量访问,而无需任何其他配置。

日志目录

对于每个容器,Elastic Beanstalk 都会创建一个名为 /var/log/eb-docker/containers/<service name>(或 ${EB_LOG_BASE_DIR}/<service name>)的日志目录。有关更多信息,请参阅利用 Docker Compose 的 Docker 容器自定义日志记录

对于每个容器,Elastic Beanstalk 都会创建一个名为 /var/log/containers/<containername> 的日志目录。有关更多信息,请参阅容器定义格式中的 mountPoints 字段。

迁移步骤

迁移到 Amazon Linux 2 Docker 平台
  1. 根据应用程序的现有 docker-compose.yml 文件为应用程序创建 Dockerrun.aws.json v2 文件。有关更多信息,请参阅上述 docker-compose.yml 文件部分。

  2. 在应用程序项目文件夹的根目录中,将 Dockerrun.aws.json v2 文件替换为刚刚创建的 docker-compose.yml 文件。

    您的目录结构应如下所示。

    ~/myApplication |-- docker-compose.yml |-- .ebextensions |-- php-app |-- proxy
  3. 使用 eb init 命令配置本地目录以部署到 Elastic Beanstalk。

    ~/myApplication$ eb init -p docker application-name
  4. 使用 eb create 命令创建环境并部署 Docker 映像。

    ~/myApplication$ eb create environment-name
  5. 如果您的应用是 Web 应用程序,则在启动环境后,使用 eb open 命令在 Web 浏览器中查看它。

    ~/myApplication$ eb open environment-name
  6. 您可以使用 eb status 命令显示新创建的环境的状态。

    ~/myApplication$ eb status environment-name
隐私网站条款Cookie 首选项
© 2025, Amazon Web Services, Inc. 或其附属公司。保留所有权利。