为了很好的使用存储引擎,必须明白Dcoker是如何创建和存储images的。

然后要明白这些images是如何让containers使用的。最后简短介绍一些images和containers操作。

 

Images and layers


 

每个Docker image都会参照只读列表里的layers,这些layers代表不同的文件系统。

layers被堆放在顶端,以形成容器根文件系统的基础。

下图,Ubuntu15.04 image包含了4 个堆image layers.

iOS培训,Swift培训,苹果开发培训,移动开发培训

 

iOS培训,Swift培训,苹果开发培训,移动开发培训

Docker 存储引擎负责堆放这些layers,然后提供一个统一的展示。

 

当创建一个新的容器,将底层堆的最上层设置成可写,通常这层叫做“containers layer”

对正在运行的容器做所有的修改,比如创建新文件,修改已存在的文件,删除文件。这些操作都是在可写的容器层。

下图,展示了以Ubuntu15.04为基础的容器。

iOS培训,Swift培训,苹果开发培训,移动开发培训

 iOS培训,Swift培训,苹果开发培训,移动开发培训

 

Containers and layers


 

容器和镜像主要的不同就是,顶层可写层。所有的修改操作都是存储在这个可写层的。

当容器被删除的时候这个可写层也就被删除了。而底层的image没有改变。

 

因为每个容器有自己的可写容器层,所有的更改都存储在这容器层中,这意味着多个容器可以同时使用同一个底层image。

下图显示多个容器共用Ubuntu15.04image:

iOS培训,Swift培训,苹果开发培训,移动开发培训

 

iOS培训,Swift培训,苹果开发培训,移动开发培训

docker存储引擎负责开启和管理 image 层 和可写的container 层。

存储引擎的两个关键技术:堆栈image层和copy-on-write.

 

Copy-on-write 策略


 

共享是提升资源利用率的很好途径。

copy-on-write是个很想共享和复制的策略。

  • 需要相同数据的系统进程共享该数据的同一实例,而不是拥有自己的副本。

  • 如果一个进程需要修改和写数据,操作系统会给这个进程复制需要的数据给它使用。


    • 只有需要写数据的进程才有权访问复制的数据。

  • 其他所有的进程继续使用原共享数据

 

docker在image和containers中都是用了copy-on-write技术。CoW策略优化了image 磁盘空间使用以及容器的启动