容器层写时复制是如何基于镜像分层原理实现的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1370个文字,预计阅读时间需要6分钟。
1. 镜像分层与容器层在进行`docker pull`下载镜像时,通过下方的图示可以看到,镜像分为多个层。例如,nginx:1.20.2的镜像分为6层。
2.创建新容器
当我们运行一个新的容器时,实际上是在容器层上添加一层。 一、镜像分层与容器层在进行docker pull 下载镜像的时候,通过下图可以看到镜像是分层下载并解压的。如nginx:1.20.2的镜像,其镜像是分为6层。
当我们运行一个新的容器的时候,实际上是在镜像分层的基础上新添加了一层:container layer(容器层)。之后所有容器运行时对文件系统产生的修改实际都只影响这一层。并且针对这一层所作的修改(写操作),在容器重启之后会全部丢失。所以说在使用docker的过程中,在需要修改运行时容器文件数据的时候,尽量去重新构建镜像而不是直接修改容器内文件。如果重构镜像解决不了的问题,使用数据卷。
构建镜像的方法是通过Dockerfile定义,数据卷的使用详解,专栏后续文章笔者会详细介绍。
注意 :对于运行时的容器而言,镜像层只读的,容器层可读也可写。对于镜像层的只读文件,容器层如果想做修改,实际上是进行了写时复制操作。(下文介绍)。
本文共计1370个文字,预计阅读时间需要6分钟。
1. 镜像分层与容器层在进行`docker pull`下载镜像时,通过下方的图示可以看到,镜像分为多个层。例如,nginx:1.20.2的镜像分为6层。
2.创建新容器
当我们运行一个新的容器时,实际上是在容器层上添加一层。 一、镜像分层与容器层在进行docker pull 下载镜像的时候,通过下图可以看到镜像是分层下载并解压的。如nginx:1.20.2的镜像,其镜像是分为6层。
当我们运行一个新的容器的时候,实际上是在镜像分层的基础上新添加了一层:container layer(容器层)。之后所有容器运行时对文件系统产生的修改实际都只影响这一层。并且针对这一层所作的修改(写操作),在容器重启之后会全部丢失。所以说在使用docker的过程中,在需要修改运行时容器文件数据的时候,尽量去重新构建镜像而不是直接修改容器内文件。如果重构镜像解决不了的问题,使用数据卷。
构建镜像的方法是通过Dockerfile定义,数据卷的使用详解,专栏后续文章笔者会详细介绍。
注意 :对于运行时的容器而言,镜像层只读的,容器层可读也可写。对于镜像层的只读文件,容器层如果想做修改,实际上是进行了写时复制操作。(下文介绍)。

