我有一个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个容器(web
,rabbitmq
和celery_worker
)。
因此,我如何将该项目的Docker映像部署到AWS Elastic Beanstalk并在那里运行它们?我需要对Dockerfile
或docker-compose.yml
进行任何更改吗?如果是,它们是什么?
将多容器应用程序部署到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
成功部署。
简单的方法是,您可以使用docker compose构建映像。
docker-compose build
此构建映像可以推送到Docker Hub或Gitlab容器注册表。这些注册表是免费的。
您可以使用docker命令将该映像部署到任何地方:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]