我有一个脚本,它创建了几个以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
实际上从未使图像变小,因此您的图像大小将包括零件的大小和组合文件的大小。(