Django 在Docker中使用不同的入口点多次构建相同的映像
我有一个Django应用程序,用芹菜做后台任务 对于部署,我使用Docker和Kubernetes Jenkins的部署是自动化的 一切都很好,但我觉得这可以大大优化 问题是Jenkins为django应用程序和5个芹菜工人创建了几乎相同的图像。他们唯一的区别是进入点。Django应用程序图像启动gunicorn,芹菜容器启动,芹菜 构建几乎相同的图像的最佳实践是什么 我最希望多次构建相同的图像,并在构建过程中指出入口点Django 在Docker中使用不同的入口点多次构建相同的映像,django,docker,kubernetes,celery,Django,Docker,Kubernetes,Celery,我有一个Django应用程序,用芹菜做后台任务 对于部署,我使用Docker和Kubernetes Jenkins的部署是自动化的 一切都很好,但我觉得这可以大大优化 问题是Jenkins为django应用程序和5个芹菜工人创建了几乎相同的图像。他们唯一的区别是进入点。Django应用程序图像启动gunicorn,芹菜容器启动,芹菜 构建几乎相同的图像的最佳实践是什么 我最希望多次构建相同的图像,并在构建过程中指出入口点 谢谢您的帮助。我想到的一个选项是,为所有图像设置相同的入口点,然后使用环境
谢谢您的帮助。我想到的一个选项是,为所有图像设置相同的入口点,然后使用环境变量,在入口点代码中设置一个逻辑,以启动一个或另一个程序。这里有一个非常简单的例子
if [ $ROLE == "worker" ];then
program_1
else
profram_2
fi
另一个选项是使用相同的入口点,然后能够使用命令
参数选择确切的程序。请在此处查找示例:。这里有一个Dockerfile和app-entrypoint.sh示例
不确定入口点的具体差异,但您可以创造性地使用
--build arg
传递不同的构建。请注意,ENTRYPOINT
不会插入build参数,但您可以按照以下方式执行操作:
ARG NAME=/some/default/value
RUN ln -s ${NAME} /executable
ENTRYPOINT ["/executable"]
。。。然后用以下方法构建:
docker build --build-arg NAME=/foo/bar/baz -t baz-build:1.0 .
显然,您会相应地更改RUN
行
(请将此想法归功于评论人:)谢谢您的链接。他们看起来很有前途。我将尝试它们并返回结果。我使用了env变量,因为它似乎是最简单的选择。效果很好。谢谢。如果我理解你的问题,你不是在寻找一个在运行时改变的图像,而是一个可以多次构建到具有不同入口点的离散图像中的Dockerfile。“这是正确的吗?”埃里克说是的