我有一个脚本可以创建多个以 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
答案 0 :(得分:2)
您可以使用脚本来创建您的 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
答案 1 :(得分:0)
Dockerfile COPY
指令(和 ADD
,但您通常应该更喜欢 COPY
)理解普通的 shell glob,因此您可以
COPY part_* .
(如果这些文件来自 split(1) 命令,而您只是将它们cat(1) 放在一起,它可能会更容易并且在您 docker build
图像之前,在主机上将它们组合起来要小得多;RUN rm
实际上从未使图像更小,因此您的图像大小将包括部件的大小和组合文件的大小。)