为了很好的使用存储引擎,必须明白Dcoker是如何创建和存储images的。
然后要明白这些images是如何让containers使用的。最后简短介绍一些images和containers操作。
Images and layers
每个Docker image都会参照只读列表里的layers,这些layers代表不同的文件系统。
layers被堆放在顶端,以形成容器根文件系统的基础。
下图,Ubuntu15.04 image包含了4 个堆image layers.
Docker 存储引擎负责堆放这些layers,然后提供一个统一的展示。
当创建一个新的容器,将底层堆的最上层设置成可写,通常这层叫做“containers layer”
对正在运行的容器做所有的修改,比如创建新文件,修改已存在的文件,删除文件。这些操作都是在可写的容器层。
下图,展示了以Ubuntu15.04为基础的容器。
Containers and layers
容器和镜像主要的不同就是,顶层可写层。所有的修改操作都是存储在这个可写层的。
当容器被删除的时候这个可写层也就被删除了。而底层的image没有改变。
因为每个容器有自己的可写容器层,所有的更改都存储在这容器层中,这意味着多个容器可以同时使用同一个底层image。
下图显示多个容器共用Ubuntu15.04image:
docker存储引擎负责开启和管理 image 层 和可写的container 层。
存储引擎的两个关键技术:堆栈image层和copy-on-write.
Copy-on-write 策略
共享是提升资源利用率的很好途径。
copy-on-write是个很想共享和复制的策略。
需要相同数据的系统进程共享该数据的同一实例,而不是拥有自己的副本。
如果一个进程需要修改和写数据,操作系统会给这个进程复制需要的数据给它使用。
只有需要写数据的进程才有权访问复制的数据。
其他所有的进程继续使用原共享数据
docker在image和containers中都是用了copy-on-write技术。CoW策略优化了image 磁盘空间使用以及容器的启动