Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 在Docker中使用不同的入口点多次构建相同的映像_Django_Docker_Kubernetes_Celery - Fatal编程技术网

Django 在Docker中使用不同的入口点多次构建相同的映像

Django 在Docker中使用不同的入口点多次构建相同的映像,django,docker,kubernetes,celery,Django,Docker,Kubernetes,Celery,我有一个Django应用程序,用芹菜做后台任务 对于部署,我使用Docker和Kubernetes Jenkins的部署是自动化的 一切都很好,但我觉得这可以大大优化 问题是Jenkins为django应用程序和5个芹菜工人创建了几乎相同的图像。他们唯一的区别是进入点。Django应用程序图像启动gunicorn,芹菜容器启动,芹菜 构建几乎相同的图像的最佳实践是什么 我最希望多次构建相同的图像,并在构建过程中指出入口点 谢谢您的帮助。我想到的一个选项是,为所有图像设置相同的入口点,然后使用环境

我有一个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。“这是正确的吗?”埃里克说是的