使用循环将文件添加到docker映像中



我有一个脚本,它创建了几个以part_开头的文件,我想在Dockerfile中创建一个for循环,在目录中搜索以part_开始的文件,并将它们添加到docker映像中。将每个文件添加为一个单独的层是很重要的(不要使用像ADD part_* /directory/这样的通配符(。如何将文件动态添加到docker映像?

我想使用类似RUN for f in part_*; do ADD $f /data/; done的东西,但我不知道如何将ADD合并到bash脚本中。

以下是Dockerfile的一个示例。

FROM ubuntu:20.04
RUN apt-get update && 
rm -rf /var/lib/apt/lists/*
ADD part_aa /directory/
ADD part_ab /directory/
ADD part_ac /directory/
ADD part_ad /directory/
ADD part_ae /directory/
ADD part_af /directory/
COPY entrypoint.sh /usr/local/bin/
CMD entrypoint.sh

您可以使用脚本创建Dockerfile;

echo "FROM ubuntu:20.04" > Dockerfile
echo "RUN apt-get update && 
rm -rf /var/lib/apt/lists/*" >> Dockerfile
for f in part_*; do echo "ADD $f /data/" >> Dockerfile; done
echo "COPY entrypoint.sh /usr/local/bin/" >> Dockerfile
echo "CMD entrypoint.sh" >> Dockerfile

DockerfileCOPY指令(和ADD,但您通常更喜欢COPY(理解普通的shell globs,因此您可以只使用

COPY part_* .

(如果这些文件来自split(1(命令,而您只需要cat将它们放在一起,那么在docker build映像之前,在主机上组合它们可能会更容易,而且会小得多;RUN rm实际上从未使图像变小,因此您的图像大小将包括零件的大小和组合文件的大小。(

最新更新