随着docker图像和相应docker_entrypoint.sh
文件的数量增加,我最终会在所有入口点脚本中重复使用bash代码。由于我讨厌重复代码,我首先想到的是创建一个包含多个入口点脚本使用的bash例程的共享lib文件夹。
但是我不确定这是否是一个好习惯主要是因为我们要离开Docker的构建上下文,我们可能会遇到Forbidden path outside the build context
之类的错误(例如参见here)。我意识到我们可以通过创建符号链接来将构建上下文连接到lib文件夹来解决这类问题,但我不确定我是否喜欢这种类型的方法。
因此,我的问题是,为Docker入口点共享lib是否是一个好主意,并且:i)如果没有,是否有更好的方法来避免重复的代码; ii)如果是这样,避免上述问题的最佳方法是什么。
谢谢大家的关注
答案 0 :(得分:2)
我会将您的公共代码放在公司基础映像中,并从每个子映像的entrypoint.sh脚本中调用该公共代码。您需要为每个扩展的上游图像提供公司基础映像,如果每个人都使用相同的上游基本映像,这不是问题,但如果您有许多不同的语言需要支持,则会成为一个挑战。
另一种选择,如果您有许多上游图像需要支持,您可以放弃扩展多阶段构建,将文件从您管理的一个“入口点”图像复制到其他每个图像中:
入口点代码的Dockerfile可能如下所示:
FROM scratch
COPY entrypoint_bin /usr/local/bin
然后你可以为你的每个其他图像添加这样的东西:
FROM entrypoint:latest as entrypoint
FROM node_or_jdk_or_something_else:1.0
COPY --from=entrypoint /usr/local/bin /usr/local/bin
...