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 映像上的容器