美文网首页
12. Docker引擎 - 理解镜像容器和存储驱动

12. Docker引擎 - 理解镜像容器和存储驱动

作者: yi_zhe | 来源:发表于2016-12-31 18:06 被阅读0次

镜像与层

每一个Docker镜像都会引用一系列代表着文件系统差异的层, 层互相叠加在一起构成了容器根文件系统的基础.
Docker的存储引擎负责这些层的叠加, 并且提供一个统一的视角.
当创建一个容器的时候, 就会在层的栈顶添加一个可写的层, 通常叫做容器层(container layer), 对一个运行中的容器的所有修改(增删改文件)都会写在最顶层的可写的容器层中.

  • 内容寻址存储(Content addressable storage)

自Docker1.10, 引进了一种新的内容寻址存储模型, 之前使用一个随机生成的UUID进行镜像和层的存储和引用, 新模型中使用了一种安全的内容哈希作为替代.

新模型改善了安全性, 提供了一种内建的防止ID冲突的的方法, 并且保证了在执行pull/push/save/load操作后数据的完整性, 同时它增强了层的可共享性, 即使镜像并不是来自于同一个编译.

低于1.10版本的image向新版本迁移的过程(在Container and layers上面)

容器与层

容器与镜像最大的不同就是层栈顶的可写层, 容器中所以的写操作都会发生在此可写层中, 当删除容器时, 可写层会一起被删掉, 但镜像会保持不变.

Docker存储驱动的目的就是处理镜像层和可写的容器层, 不同驱动完成这种功能的方法可能有很大不同, 但核心技术就是镜像的栈化和写时复制策略.

写时复制策略

不同的系统进程需要同样的数据时, 它们会公用一份数据, 而不是每个进程都自己拷贝一份. 如果有时候进程需要对数据做一些修改, 只有此时操作系统才会为该进程拷贝一份数据, 而且也只有该进程对拷贝的数据有写权限, 其他进程仍然使用原有数据.

  • 数据共享减小了镜像尺寸
    1.10以前的版本与1.10(包括)以后的版本对于层的存储机制是不同的.
    拉去和推送镜像都是以层为单位的, 使用docker history可以查看到镜像中使用了哪些层.
docker history centos7:7.3.1611
IMAGE               CREATED             CREATED BY          SIZE                COMMENT
6eb36ef5c4da        13 days ago                             264.7 MB            
Imported from -

在镜像和容器中Docker都使用了写时复制策略, 大大降低了磁盘开销.

  • 复制使容器更高效
    Docker的写时复制不仅减小了容器占用的空间, 同时也减小了启动容器花费的时间, 每次启动容器, Docker 只需要创建可写的容器层.

数据卷和存储驱动

数据卷不被存储驱动所管理, 对数据卷的读写都是通过存储驱动传递给本地操作系统的.
当容器被删除时, 数据卷不会删除, 仍然留在本地机器的存储上.

相关文章

  • 12. Docker引擎 - 理解镜像容器和存储驱动

    镜像与层 每一个Docker镜像都会引用一系列代表着文件系统差异的层, 层互相叠加在一起构成了容器根文件系统的基础...

  • docker存储驱动

    一句话,docker 存储驱动用于管理docker 镜像和容器。 1. 镜像和层 在了解docker存储驱动之前,...

  • 3、docker入门

    docker状态 该命令会返回所有容器和镜像的数量、docker使用的驱动程序和存储驱动,以及docker的基本配...

  • docker 命令

    查看 Docker:docker info 该命令会返回所有容器和镜像的数量、Docker 使用的执行驱动和存储驱...

  • Docker存储驱动之DeviceMapper

    Docker中数据存储相关有几部分,存储驱动(storage driver)用于存储镜像和容器,默认路径为/var...

  • Docker 入门(一)

    Docker 简介 Docker 基本概念(镜像,容器,仓库) Docker 引擎 基于Dockerfile 镜像...

  • Docker存储驱动devicemapper配置

    devicemapper驱动将每一个 Docker镜像 和容器存储在它自身的具有精简置备(thin-provisi...

  • CI/CD之Docker容器DevOps知识汇总

    容器与虚拟主机的区别 Docker安装 Docker的镜像和容器 Docker的网络 Docker的持久化存储和数...

  • Docker 使用案例

    docker pull 存出和载入镜像 导出和导入容器 注:用户既可以使用 docker load 来导入镜像存储...

  • Linux修改docker镜像和容器的默认存储位置

    刚开始使用docker时,不太关注docker 存储镜像和容器的位置,使用默认目录。当使用docker启动的容器越...

网友评论

      本文标题:12. Docker引擎 - 理解镜像容器和存储驱动

      本文链接:https://www.haomeiwen.com/subject/aofbvttx.html