我有一个django应用程序,并使用芹菜进行背景任务。
用于部署,我将docker与kubernetes一起使用。
部署与Jenkins自动化。
一切都很好,但是我觉得这可以非常优化。
问题在于,詹金斯(Jenkins(为Django应用程序和5名芹菜工人构建了几乎相同的图像。他们拥有的唯一区别是入口点。django应用程序图像启动枪nicorn,芹菜容器开始,好,芹菜。
构建几乎相同图像的最佳实践是什么?
我最佳地想几次构建同一图像并在构建过程中指示入口点。
感谢您的任何帮助。
想到的一个选项是为所有图像具有相同的入口点,然后使用环境变量,例如,在入口点代码中具有逻辑,该逻辑将启动一个程序或其他。这是一个非常简单的例子。
if [ $ROLE == "worker" ];then
program_1
else
profram_2
fi
另一个选项可以使用相同的入口点,然后能够使用command
参数选择确切的程序。在此处找到一个示例:https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/。示例Dockerfile和app-entrypoint.sh在这里
https://github.com/bitnami/bitnami-docker-wordpress/blob/master/4/dockerfilehttps://github.com/bitnami/bitnami-docker-wordpress/blob/master/4/rootfs/app-enapp-enprypoint.sh
不确定入口点上的特定差异,但是您可能可以以创造性的方式使用--build-arg
来传递不同的构建。请注意,ENTRYPOINT
不会插入构建参数,但是您可以按照此操作来做一些事情:
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
行。
(在这里给评论者的信用概念:https://github.com/moby/moby/moby/issues/18492#issuecomment-347364597(