多次在Docker中多次构建相同的图像



我有一个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(

相关内容

  • 没有找到相关文章

最新更新