gpt4 book ai didi

python - 如何为 flask 和 celery 应用程序创建通用的基本docker镜像

转载 作者:行者123 更新时间:2023-12-02 20:42:26 28 4
gpt4 key购买 nike

我的项目使用 flask 和 celery 库。我已在AWS ECS Fargate中部署了我的应用程序。这是 flask 和 celery 的两个docker文件。

# 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

对于celery和flask应用程序,两个docker文件都相同。有没有一种方法可以创建两个docker文件中的通用基本镜像文件?我正在使用AWS ECR存储Docker镜像。

最佳答案

您可以启动一个Dockerfile FROM所需的任何镜像,包括您自己构建的镜像。如果您将Flask图片构建为

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 Worker看起来没有网络侦听器。 (不过,“Expose”作为动词在现代Docker中几乎没有任何意义。)
FROM me/code-base
EXPOSE 5000
CMD gunicorn run:my_app -b 0.0.0.0:5000 -w 4

@Frank's answer建议使用Docker Compose路径。如果您通常使用Compose,则可能会首选该路径,因为没有一种简单的方法可以使它以正确的依赖关系顺序构建多个图像。所有运行容器的方法都有一种方法来指定替代命令(从额外的 docker run选项到Kubernetes容器 command:设置),因此这并不是一种特别的限制方法。相反,在CI环境中,通常可以指定要依次构建的多个内容,但是可能需要 use an ARG to specify the image tag

关于python - 如何为 flask 和 celery 应用程序创建通用的基本docker镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61202164/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com