(旧式)从在 Amazon Linux 上运行的多容器 Docker 迁移到在 Amazon Linux 2 上运行的 Docker 平台分支 - Amazon Elastic Beanstalk
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

(旧式)从在 Amazon Linux 上运行的多容器 Docker 迁移到在 Amazon Linux 2 上运行的 Docker 平台分支

在 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。有关更多信息,请参阅 将在 Amazon Linux 上运行的多容器 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 容器自定义日志记录 (Docker Compose)

对于每个容器,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