Dockerfile COPY 与“docker run ... cp”

GaT*_*mas 6 docker dockerfile docker-build docker-run

我们有一个构建管道,它首先使用 dockerfile 进行 docker 构建。该 dockerfile 有许多 COPY 命令。我们还有一个后续步骤,使用“cp”命令执行 docker 运行,如下所示:

docker run --volume /hostDirA:/containerDirB --workdir /folderB dockerRepo:somebuildnum cp -R /hostDirC/。/containerDirB

首先,在要点之前,我的理解是 cp 命令是将一个文件夹复制到另一个文件夹,这两个文件夹都在容器上。这是正确的理解吗?

其次,当 COPY 已经通过 dockerfile 在 docker 构建中完成时,为什么要在 docker run 中以这种方式完成 cp ?我们是否有正当理由不将此 cp 移至 dockerfile 内?

adj*_*nks 2

在不知道这些文件的用途的情况下,我们只能进行疯狂的猜测。

Volume 用于数据持久化,而 COPY 用于运行进程所需但可能被破坏的数据。

为什么将数据复制到卷而不是使用 COPY 命令的一种可能的有效场景是,需要初始化持久数据,并且他们不希望初始化数据给容器映像添加膨胀。就像我说的,这只是一个疯狂的猜测。

另一种猜测是,Dockerfile 在开发人员之间共享,并且组之间的初始化数据可能会有所不同,因此一组开发人员可能会将不同的数据复制到卷中。

无论数据是什么,如果您关闭并删除容器,则通过创建的数据将COPY随容器一起消失,但cp在主机上通过通过移动到卷中的数据将保留在已安装的目录中。当容器从最初放置在其中的内容运行时,该数据可能已更改,但当您删除容器并从映像中生成新容器时,该数据不会重置。

您应该询问开发人员所有文件的用途,以及这些文件是否需要持久保存或者是否可以只是“短暂的”。这可能会回答您关于为什么要按原样复制它们的问题。