如何将具有多个Docker容器的应用程序部署到AWS Elastic Beanstalk?

问题描述 投票:0回答:2

我有一个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

如您在上面看到的,我的Django应用必须在任何时间运行3个容器(webrabbitmqcelery_worker)。

因此,我如何将该项目的Docker映像部署到AWS Elastic Beanstalk并在那里运行它们?我需要对Dockerfiledocker-compose.yml进行任何更改吗?如果是,它们是什么?

python django amazon-web-services docker amazon-elastic-beanstalk
2个回答
0
投票

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

如果您不知道如何创建配置文件,建议您阅读official page

而且您还可以使用container transform实用程序将docker-compose文件转换为Dockerrun.aws.json配置文件,我认为这非常有用。您可能需要在自动生成的文件中进行一些更改。

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

有关详细日志,我建议在以下位置使用环境日志:

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

:由于需要以eb deploy文件格式部署源代码,因此建议使用.zip成功部署。


-1
投票

简单的方法是,您可以使用docker compose构建映像。

docker-compose build

此构建映像可以推送到Docker Hub或Gitlab容器注册表。这些注册表是免费的。

您可以使用docker命令将该映像部署到任何地方:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

© www.soinside.com 2019 - 2024. All rights reserved.