AWS 上的多容器 Docker

Posted

技术标签:

【中文标题】AWS 上的多容器 Docker【英文标题】:Multi-Container Docker on AWS 【发布时间】:2018-01-19 13:36:38 【问题描述】:

我似乎无法理解 Dockerrun.aws.json 文件,该文件是在 AWS Elastic Beanstalk 上运行多容器 docker 环境所必需的。

当我通过 Docker-Compose 运行我的应用程序时,在本地一切正常。以下是我的 docker-compose.yml 文件:

version: '2'
services:
  interfaceserver:
    build: .
    command: daphne -b 0.0.0.0 -p 8000 restbench.asgi:channel_layer
    user: app
    working_dir: /app
    ports:
      - 8000:8000
    depends_on:
      - database
      - redis
  workerserver:
    build: .
    user: app
    working_dir: /app
    command: python manage.py runworker
    depends_on:
      - database
      - redis
  database:
    image: postgres:9.5
  redis:
    image: redis:3.0-alpine

基本上我正在尝试运行四个服务。一个接口服务器、一个工作服务器、一个 Postgres 数据库和一个 Redis 服务器。 Interface-Server 和 Worker-Server 以及我自己的 Django 从与 docker-compose.yml 位于同一目录中的本地 Dockerfile 构建

现在我正在尝试将我的应用程序部署到 Elastic Beanstalk,据我了解,我需要一个 Dockerrun.aws.json,它与 docker-compose.yml 相同,仅适用于 AWS。我尝试从 EBS 阅读文档,但正如我上面提到的,我无法理解我指定 Interface-和 Worker-Server 的部分。 Database和Redis部分很简单,但是我不明白如何在AWS的json文件中指定如何构建这两个服务器。

非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

我们不能再在“AWSEBDockerrunVersion: 2”中从 Dockerfile 构建镜像。如果我们使用“AWSEBDockerrunVersion: 1”使用单个 Dockerfile 设置单个容器,这是可能的。

在您的情况下,您必须自己构建和推送图像,或者让您的 CI 服务器来完成。在 Dockerrun.aws.json v2 中定义图像。

来自 AWS 文档的参考 -

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker_v2config.html#create_deploy_docker_v2config_dockerrun

Docker 映像 - 用于 Elastic Beanstalk 的多容器 Docker 平台需要预先构建映像并将其存储在公共或私有在线映像存储库中。 Elastic Beanstalk 上的多容器 Docker 平台不支持在部署期间使用 Dockerfile 构建自定义映像。在创建 Elastic Beanstalk 环境之前构建您的映像并将其部署到在线存储库。

【讨论】:

啊,这解释了很多。我有点理解这是可能的,但我认为 Dockerrun.aws.json 可以 100% 从 docker-compose.yml 编写。感谢您的快速回复。【参考方案2】:

根据docs,Amazon Linux 2 现在支持 docker-compose 文件,并且不再有需要为多容器 Docker 环境预构建映像的限制。

Amazon Linux AMI 上的多容器 Docker 平台要求您指定预构建的应用程序映像以作为容器运行。迁移后,您将不再有此限制,因为 Amazon Linux 2 Docker 平台还允许 Elastic Beanstalk 在部署期间构建您的容器映像。

...

Docker Compose 工具使用 docker-compose.yml 文件来配置您的应用程序服务。此文件替换您的应用程序项目目录和应用程序源包中的 Dockerrun.aws.json v2 文件。

我们还没有迁移我们的环境,但这听起来很有希望。

【讨论】:

以上是关于AWS 上的多容器 Docker的主要内容,如果未能解决你的问题,请参考以下文章

Elastic Beanstalk 上的多容器 Docker 环境中的容器连接被拒绝

原始 IP 未传递到 AWS Elastic Beanstalk 上的单个容器 Docker 映像上的容器

将文件从 docker 容器写入 AWS 上的主机实例

AWS — AWS 上的 5G 网络

AWS Elastic Beanstalk 上的 Docker - 无法从容器访问环境变量

[云原生之DockerDocker容器的存储与迁移