我准备了包含构建其他项目所需库的Docker镜像。我想拥有一个目录/ myLibs,其中包含来自不同项目的库,例如:
/ myLibs:
Dockerfile:
FROM my-base:1.0
VOLUME /myLibs
COPY projectA/bin/*.so* /myLibs/projectA/bin/
CMD /bin/bash
内置:
docker build -t my-libs:1.0 .
然后我想在每次重建projectA时更新此图像中的库。所以我准备了Dockerfile:
FROM my-libs:1.0 # I changed parent image, because /myLibs/projectB and /myLibs/projectC should remain
VOLUME /myLibs
RUN ls -al /myLibs && rm -rf /myLibs/projectA && ls -al /myLibs
RUN ls -al /myLibs
COPY projectA/bin/*.so* /myLibs/projectA/bin/
CMD /bin/bash
因此,我的卷中有一个旧项目的库:
Step 4 : RUN ls -al /myLibs && rm -rf /myLibs/projectA && ls -al /myLibs
---> Running in 1e3e25084e69
total 12
drwxr-xr-x 3 root root 4096 Jul 16 13:52 .
drwxr-xr-x 75 root root 4096 Jul 16 13:52 ..
drwxr-xr-x 4 root root 4096 Jul 16 13:51 projectA
total 8
drwxr-xr-x 2 root root 4096 Jul 16 13:52 .
drwxr-xr-x 75 root root 4096 Jul 16 13:52 ..
---> d5973da5965c
Removing intermediate container 1e3e25084e69
Step 5 : RUN ls -al /myLibs
---> Running in 1d93575b50c2
total 12
drwxr-xr-x 3 root root 4096 Jul 16 13:52 .
drwxr-xr-x 75 root root 4096 Jul 16 13:52 ..
drwxr-xr-x 4 root root 4096 Jul 16 13:51 projectA
---> 6d2a48a5b67b
如何从卷中删除文件?
答案 0 :(得分:2)
如果您想在重建时更改文件,您可能不想在卷中执行此操作。该卷通常用于您想要持久存储的数据。请记住,在容器构建之后将发生卷安装,因此可能发生的情况是旧数据的卷正在覆盖您在映像(重新)构建中所做的任何更改。 / p>
你在使用/myLibs
做什么用途?如果它们是您要在构建中设置的只读文件,则最好不要使用卷并使它们成为图像的一部分。如果你想修改它们,那么在构建之后管理它可能会更好 - 如果你只是改变网络卷中的文件,没有真正的理由重建图像。