python - 如何将具有多个 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
工作rabbitmq
。celery_worker
那么,如何将这个项目的 Docker 映像部署到 AWS Elastic Beanstalk 并在那里运行它们?我必须对我的Dockerfile
or进行任何更改docker-compose.yml
吗?如果是,它们是什么?
解决方案
将多容器应用程序部署到 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
文件格式部署源代码。
推荐阅读
- git - 如何处理多个 ssh 密钥
- doctrine-orm - 学说总是对自定义货币类型进行更新查询,即使值没有改变
- ios - Xcode 12.5 和 swift 5+ 如何从 WKwebView 打开外部 Urls 链接?
- javascript - 内部文本的查询选择器
- javascript - 如何修复此错误 TypeError: Converting circular structure to JSON --> 从带有构造函数 'Window' 的对象开始
- java - 如何将异常从 lambda 抛出到调用方法?
- javascript - 无法读取未定义的属性(读取“应用程序”)
- javascript - 刷新另一个功能组件
- pyinstaller - 如何摆脱错误“_ms sql”未找到
- c++ - 在结构中使用数组时获得意外输出