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的存储驱动 :
最新文章
- React学习笔记-1-什么是react,react环境搭建以及第一个react实例
- 日志处理之logging模块
- Spring overview
- hdu 4358 Boring counting dfs序+莫队+离散化
- 边工作边刷题:70天一遍leetcode: day 85-4
- JMeter学习(十九)JMeter测试MongoDB
- 【LeetCode练习题】Reverse Linked List II
- 分享一些自己写的前端库,并骗骗 star(库都是在实际项目中大量运用过的)
- JavaEE开发之SpringBoot整合MyBatis以及Thymeleaf模板引擎
- [51nod1297]管理二叉树
- 算法面试题-leetcode学习之旅(一)
- Apache 跟踪用户会话
- win7经常出现“关闭xxxx前您必须关闭所有会话框”
- 在IDEA中编写Spark的WordCount程序
- Guava future
- Linux whereis命令详解
- Docker未启动错误:Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
- 判断TrueType字体
- Linux之开源软件移植
- Python for everyone chapter 1
热门文章
- 使用metaweblog API实现通用博客发布 之 API测试
- win7下python2.7安装 pip,setuptools的正确方法
- Java基础系列(37)- 数组下标越界及小结
- js中date类型的格式转化为yyyy-MM-dd HH:mm:ss的String类型
- Charles抓包工具过滤网络请求
- Python : TypeError: 'int' object is not iterable
- 如何从阿里云Code升级至云效Codeup
- 原生JS实现简单留言板功能
- ch_nginx.sh
- 初步认识HCIA,什么是计算机网络,拓扑,网络的发展,交换机,路由器,IP,光纤,带宽,广播,ARP......