如何为烧瓶和芹菜应用程序创建通用的基本docker图像



我的项目使用烧瓶和芹菜库。我已经在AWS ECS Fargate中部署了我的应用程序。这是烧瓶和芹菜的两个码头文件。

# Flask Docker File
FROM python:3.6
RUN apt-get update -y
RUN pip3 install pipenv
ENV USER dockeruser
RUN useradd -ms /bin/bash $USER
ENV APP_PATH /home/$USER/my_project
RUN mkdir -p $APP_PATH
COPY . $APP_PATH
WORKDIR $APP_PATH
RUN chown -R $USER:$USER $APP_PATH
RUN pipenv install --system --deploy
USER $USER
EXPOSE 5000
CMD gunicorn run:my_app -b 0.0.0.0:5000 -w 4
# Celery Docker File
FROM python:3.6
RUN apt-get update -y
RUN pip3 install pipenv
ENV USER dockeruser
RUN useradd -ms /bin/bash $USER
ENV APP_PATH /home/$USER/my_project
RUN mkdir -p $APP_PATH
COPY . $APP_PATH
WORKDIR $APP_PATH
RUN chown -R $USER:$USER $APP_PATH
RUN pipenv install --system --deploy
USER $USER
CMD celery -A celery_tasks.celery worker -l INFO -E --autoscale=2,1 -Q apple,ball,cat

对于芹菜和烧瓶应用程序,两个docker文件是相同的。有没有一种方法可以创建一个通用的基本映像文件和两个docker文件?我正在使用AWS ECR来存储docker图像。

您可以启动DockerfileFROM任何您想要的映像,包括您自己构建的映像。如果您将烧瓶图像构建为

docker build -t me/flaskapp .

然后,您可以构建一个派生图像,该图像将其CMD覆盖为

FROM me/flaskapp
CMD celery -A celery_tasks.celery worker -l INFO -E --autoscale=2,1 -Q apple,ball,cat

如果您愿意,可以有一个包含源代码但没有默认CMD的映像。由于您不能卸载-EXPOSE端口,因此这有一个小优点,即看起来您的Celery工作程序没有网络侦听器。(不过,在现代Docker中,"Expose"作为一个动词几乎没有任何意义。(

FROM me/code-base
EXPOSE 5000
CMD gunicorn run:my_app -b 0.0.0.0:5000 -w 4

@弗兰克的回答暗示了一条Docker Compose之路。如果你经常使用Compose,你可能更喜欢这种路径,因为没有一种简单的方法可以让它以正确的依赖顺序构建多个图像。所有运行容器的方法都有一种指定备用命令的方法(从额外的docker run选项到Kubernetes podcommand:设置(,所以这不是一种特别有限制的方法。相反,在CI环境中,通常可以指定要按顺序构建的多个内容,但可能需要使用ARG来指定图像标记。

我认为您可以使用docker compose(https://docs.docker.com/compose/)。您可以在docker compose YAML配置文件中指定多个docker实例,并基于相同的docker映像运行它们。

一个例子:

test.yaml:

version: '2.0'
services:
web:
image: sameimage
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
command: ["gunicorn", "run:my_app", "-b", "0.0.0.0:5000", "-w", "4"]
celery:
image: sameimage
command: ["celery", "-A", "celery_tasks.celery"]
volumes:
logvolume01: {}

您可以通过以下方式运行:

docker-compose -f test.yaml -p sameiamge up --no-deps

最新更新