Docker“写时复制(CoW)”策略

Abd*_*leh 2 docker

我正在阅读有关Docker 的内容,但也读到了一些我不明白的内容。写时复制 (CoW)策略我知道它的一般含义,但是

1: Docker中的含义是什么?

2:为什么在Docker中使用它?

VKa*_*atz 7

写时复制 (CoW) 策略

  • 大多数联合文件系统使用一种称为“写时复制”的东西,如果您将其视为“更改时复制”,则更容易理解。

  • 当只读层(而不是顶层)中的文件被修改时,在进行更改之前,首先将整个文件从只读层复制到可写层。

  • 这会对运行时性能和图像大小产生负面影响。

它在 Docker 中意味着什么?

让我们使用ubuntu:latest图像并对其进行一些操作。

第 1 层:

docker container run --name mod_ubuntu ubuntu:latest touch /mychange

docker container diff mod_ubuntu # to get the diff from a base image
Run Code Online (Sandbox Code Playgroud)

该命令将产生输出:

A /mychange
Run Code Online (Sandbox Code Playgroud)

第 2 层:

docker container run --name mod_busybox_delete busybox:latest rm /etc/passwd

docker container diff mod_busybox_delete
Run Code Online (Sandbox Code Playgroud)

这次,输出将有两行:

C /etc
D /etc/passwd
Run Code Online (Sandbox Code Playgroud)

第 3 层:

docker container run --name mod_busybox_change busybox:latest touch /etc/passwd

docker container diff mod_busybox_change
Run Code Online (Sandbox Code Playgroud)

diff 子命令将显示两个更改:

C /etc
C /etc/passwd
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 这不是确切的图像(缺少删除操作)。只是为了展示它的概念。可以添加相应的操作并可以关联。


注意:当您查看图像时,请从俯视图查看。

注意:文件系统属性(例如文件所有权和权限)的更改与文件更改的记录方式相同。修改大量文件的文件系统属性时要小心,因为这些文件可能会被复制到执行更改的层中。