首页 > 解决方案 > 如何将具有多个 Docker 容器的应用程序部署到 AWS Elastic Beanstalk?

问题描述

我有一个 Django 应用程序,其 docker 镜像Dockerfile如下:

FROM python:3.7

ENV PYTHONUNBUFFERED 1

RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/

RUN pip3 install -r requirements.txt
COPY . /code/

ENV PORT=8000
EXPOSE 8000

然后,我有一个docker-compose.yml文件用于为我的 Django 应用程序定义其他容器映像和依赖项,如下所示:

version: '3'

services:
  web: &django_app
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    ports:
      - "80:8000"
    depends_on:
      - rabbitmq
  rabbitmq:
    image: rabbitmq:latest
  celery_worker:
    <<: *django_app
    command: celery -A DJingApp worker --loglevel=info
    ports: []
    depends_on:
      - rabbitmq

正如您在上面看到的,我必须在任何时间点运行 3 个容器( 、 和 ),我的 Django 应用程序才能正常web工作rabbitmqcelery_worker

那么,如何将这个项目的 Docker 映像部署到 AWS Elastic Beanstalk 并在那里运行它们?我必须对我的Dockerfileor进行任何更改docker-compose.yml吗?如果是,它们是什么?

标签: pythondjangoamazon-web-servicesdockeramazon-elastic-beanstalk

解决方案


将多容器应用程序部署到 Elastic Beanstalk 非常具有挑战性。您需要Dockerrun.aws.json版本 2 配置文件,该文件是 Elastic Beanstalk 特定的 JSON 文件,描述如何将一组 Docker 容器部署为 Elastic Beanstalk 应用程序。

如果您不知道如何创建配置文件,我建议您查看官方页面

您还可以使用容器转换实用程序将您的docker-compose文件转换为Dockerrun.aws.json配置文件,这对我很有帮助。您可能需要对自动生成的文件进行一些更改。

而且要自定义您的环境,您需要使用.ebextensions。比如定义你的Django设置路径、WSGI路径、Web服务器配置、部署前执行Django管理命令等等。

对于详细的日志,我建议使用以下环境日志:

Elastic Beanstalk - 环境 - '您的环境名称' - 日志

注意:我建议使用eb deploy来成功部署,因为您需要以.zip文件格式部署源代码。


推荐阅读