在Docker中,为入口点脚本创建共享库文件夹是一种好习惯吗?

问题描述 投票:2回答:1

随着docker图像和相应的docker_entrypoint.sh文件数量的增加,我最终会在所有入口点脚本中重复使用bash代码。由于我讨厌重复代码,我首先想到的是创建一个包含多个入口点脚本使用的bash例程的共享lib文件夹。

但是我不确定这是否是一个好习惯,主要是因为我们离开了Docker的构建上下文,我们可能会遇到Forbidden path outside the build context等错误(例如参见here)。我意识到我们可以通过创建符号链接来将构建上下文连接到lib文件夹来解决这类问题,但我不确定我是否喜欢这种类型的方法。

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

谢谢大家的关注

bash docker
1个回答
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
...
© www.soinside.com 2019 - 2024. All rights reserved.