如何从Docker卷中删除数据?

我准备了包含构build我的其他项目所需库的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 . 

然后我想在每次重buildprojectA的时候更新这个图像中的libs。 所以我准备了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 

因此,我在我的卷中有一个旧的projectA库:

 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 

如何从卷中删除文件?

如果你想改变重build的文件,你可能不想在卷中做到这一点。 一般来说,数据量是要保存的数据。 请记住容器的安装会容器build立之后发生,所以可能发生的情况是旧数据的容量随着您在图像(重新)构build中所做的任何更改而增加。

你在用什么/myLibs ? 如果它们是要在构build中设置的只读文件,则最好不要使用卷并将其作为图像的一部分。 如果你想修改它们,在构build之后pipe理它可能会更好 – 如果你只是改变networking卷中的文件,没有真正的理由来重build图像。