如何从docker volume中删除数据?

时间:2016-07-16 14:01:29

标签: docker dockerfile

我准备了包含构建其他项目所需库的Docker镜像。我想拥有一个目录/ myLibs,其中包含来自不同项目的库,例如:

/ myLibs:

  • 了projectA
  • 项目B
  • 项目C

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

如何从卷中删除文件?

1 个答案:

答案 0 :(得分:2)

如果您想在重建时更改文件,您可能不想在卷中执行此操作。该卷通常用于您想要持久存储的数据。请记住,在容器构建之后将发生卷安装,因此可能发生的情况是旧数据的卷正在覆盖您在映像(重新)构建中所做的任何更改。 / p>

你在使用/myLibs做什么用途?如果它们是您要在构建中设置的只读文件,则最好不要使用卷并使它们成为图像的一部分。如果你想修改它们,那么在构建之后管理它可能会更好 - 如果你只是改变网络卷中的文件,没有真正的理由重建图像。