zoukankan      html  css  js  c++  java
  • docker 存储驱动(storage driver)知识总结

    http://www.sohu.com/a/101016494_116235

    一,先看docker镜像是如何构建和存储。

    下面是ubuntu:15.04的镜像分层.一共是4层,每一层都由一些只读并且描绘系统区别的文件组成. 也可以使用命令  docker history ubuntu:15.04查看。

      

      Docker存储驱动的作用就是:将这些分层的镜像文件堆叠起来,并且提供统一的视图.使container的文件系统看上去和我们普通的文件系统没什么区别.

      当创建一个新的容器的时候,实际上是在镜像的分层上新添加了一层container layer(容器层).之后所有对容器产生的修改,实际都只影响这一层.

     

     注意:

      容器层:读写层(可写层)

      镜像层:只读层

    镜像与容器的一个主要区别就是,是否具有顶层的读写层(可写层).

    对于一个容器的数据新增,修改,都存储在可写层.当你删除一个容器的时候,可写层也将被删除(注意:可写层与数据卷的区别).然而镜像层是保持不变的.

    下图展示了,多个容器共享一个镜像.镜像层是只读层,不变的.多个容器层在同一个镜像层之上,并且相互独立,互相不影响.

       docker 存储驱动的职责就是将镜像层和可写容器层管理起来.不同的驱动实现管理的方式也不一致.

        实现容器与镜像管理的两个关键技术就是可堆叠的镜像层和copy-on-write (CoW,写时复制).

    数据卷与存储驱动

    当一个容器删除的时候,写入该容器的所有数据将被删除(除了保存在数据卷中的数据)

    数据卷是挂载到容器的,docker宿主机上的一个目录或文件。对数据卷的文件读写是不受存储驱动控制的,接近于本地文件系统读写速度.可以挂载多个数据卷到一个容器.也可以多个容器共享一个或多个数据卷.

    如图所示:一个docker宿主机运行2个容器。每个容器有自己的存储空间,存储于宿主机本地文件系统 /var/lib/docker/… 另外有一个共享的数据卷在 /data.挂载到两个容器内实现共享.

    docker目前支持的存储驱动有:OverlayFS,AUFS,Btrfs,Device Mapper,VFS,ZFS。

    docker的存储驱动目前并没有一个通用的,完美的,适用于所有环境的存储驱动.所以需要根据自己的环境来有所选择.

    设置docker的存储驱动  :

  • 相关阅读:
    MD5加密40位加密规律
    python中 if __name__ == '__main__': 浅解
    python3关于邮件的操作
    ecshop莫名其妙出现“Table '.starecs_stats' is marked as crashed and should be repaired”
    微擎安装问题
    蝉知CMS本地迁移到服务器具体步骤
    React Hooks useContext + useReducer实现简易Redux
    git merge时merge/squash merge/rebase merge的区别
    FormData 和 Content-Type: multipart/form-data
    对Promise.prototype.finally()的粗浅理解
  • 原文地址:https://www.cnblogs.com/fengfengyang/p/11759094.html
Copyright © 2011-2022 走看看