Bash 在Docker中,为入口点脚本提供一个共享的lib文件夹是一种好的做法吗?

Bash 在Docker中,为入口点脚本提供一个共享的lib文件夹是一种好的做法吗?,bash,docker,Bash,Docker,随着docker图像和相应的docker\u entrypoint.sh文件数量的增加,我会在所有入口点脚本中重复使用bash代码。因为我讨厌重复的代码,所以我的第一个想法是用多个入口点脚本使用的bash例程创建一个共享lib文件夹 但是,我不确定这是否是一个好的实践,主要是因为我们正在离开Docker的构建上下文,并且可能会出现错误,例如构建上下文之外的禁止路径(例如,请参阅)。我意识到我们可以通过创建符号链接将构建上下文连接到lib文件夹来解决这类问题,但我不确定是否喜欢这种方法 因此,我的

随着docker图像和相应的
docker\u entrypoint.sh
文件数量的增加,我会在所有入口点脚本中重复使用bash代码。因为我讨厌重复的代码,所以我的第一个想法是用多个入口点脚本使用的bash例程创建一个共享lib文件夹

但是,我不确定这是否是一个好的实践,主要是因为我们正在离开Docker的构建上下文,并且可能会出现错误,例如
构建上下文之外的禁止路径(例如,请参阅)。我意识到我们可以通过创建符号链接将构建上下文连接到lib文件夹来解决这类问题,但我不确定是否喜欢这种方法

因此,我的问题是,为Docker入口点共享LIB是否是一个好主意,以及:i)如果不是,是否有更好的方法来避免重复代码;ii)如果是,避免上述问题的最佳方法是什么


感谢大家的关注

我会将您的通用代码放在公司基础映像中,并从每个子映像的entrypoint.sh脚本调用该通用代码。对于每个扩展的上游映像,您都需要一个公司基础映像,如果每个人都使用相同的上游基础映像,这不是一个问题,但是如果您需要支持许多不同的语言,这将成为一个挑战


另一种选择是,如果要支持大量上游映像,则可以扩展多阶段构建,将文件从您管理的一个“入口点”映像复制到其他每个映像:

FROM entrypoint:latest as entrypoint
FROM node_or_jdk_or_something_else:1.0
COPY --from=entrypoint /usr/local/bin /usr/local/bin
...
入口点代码的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
...