使用docker来存档一个程序

我想用docker来实现以下function:

运行一个访问某个目录的程序,然后在运行之后重置对该目录所做的所有更改。 因此,我想创build一个docker镜像,将所述目录复制到docker卷中,以便程序可以访问目录中的文件,但目录对于每次运行都具有相同的内容。

但是,这似乎增加了很多开销 – 是否有其他(更好)的方式来实现所描述的目标?

PS:我想测量程序的行为,但不是出于安全原因,也就是我相信程序。

您实际上不需要进行复制,这正是Docker的作用:保留和放弃更改。 卷是保存文件(和/或在容器之间共享)的一种方式,而不是放弃它们。

一旦你build立了图像(使用Dockerfile docker buildDockerfile ),图像充当了容器的起点。 当您使用docker start <image> ,您将创build一个基于给定图像的容器。 容器运行一个程序(称为入口点 ),当它退出时,它所做的任何更改都将被丢弃( docker container rm ),或者可以从最后一个状态( docker start )再次启动程序。 在所有正在运行的容器中共享相同的图像作为只读层,以便每个容器只stored procedures所做的任何差异。 在后台,docker使用overlay文件系统来实现这个function,所以如果你想的话,你也可以自己做。

所以简短的答案是:

  • 创build一个包含原始目录的图像
  • docker run --rm <image>

(或者,您可以使用docker run <image>并使用docker rm <container>退出时自己删除容器)。

在你做docker run ,程序会看到未被触动的目录,因为它存储在图像中。 程序退出时,任何更改都将被丢弃。 即使你并行运行两个容器,它们的变化也是孤立的。