迁移到 Docker Amazon Linux 2 平台 - AWS Elastic Beanstalk
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

迁移到 Docker Amazon Linux 2 平台

重要

Amazon Linux 2 平台版本与 Amazon Linux AMI 平台版本(在 Amazon Linux 2 之前)完全不同。这些不同层代的平台在多个方面不兼容。如果您要迁移到 Amazon Linux 2 平台版本,请务必阅读将 Elastic Beanstalk Linux 应用程序迁移到 Amazon Linux 2中的信息。

您可以将在 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 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" } ] } ] }

其他迁移注意事项

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

环境属性

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

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

日志目录

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

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

迁移步骤

迁移到 Amazon Linux 2 Docker 平台

  1. 根据应用程序的现有 Dockerrun.aws.json v2 文件为应用程序创建 docker-compose.yml 文件。有关更多信息,请参阅上述 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