docker存储驱动知识汇总

    本文大部分内容,摘自docker官方文档。Understand images, containers, and storage drivers.文章转自科多大数据
    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。它使开发人员能够快速创建简单的、现成的运行容器化应用;使管理和部署应用程序更加容易。
    要想真正的理解docker的存储驱动,需要先了解docker镜像是如何构建和存储,以及容器如何使用镜像。
    镜像与分层
    下面是ubuntu:15.04的镜像分层。一共是4层,每一层都由一些只读并且描绘系统区别的文件组成。
docker存储驱动
 
    上下两张图对比,可以清晰的看到镜像分层关系(上图是官方文档图片,可以看到镜像大小进行了精简,但是ubuntu:15.04镜像的分层结构没变)。
docker存储驱动
    Docker存储驱动的作用就是:将这些分层的镜像文件堆叠起来,并且提供统一的视图。使container的文件系统看上去和我们普通的文件系统没什么区别。
    当创建一个新的容器的时候,实际上是在镜像的分层上新添加了一层container layer(容器层)。之后所有对容器产生的修改,实际都只影响这一层。
   docker存储驱动
    注意
    容器层:读写层(可写层)
    镜像层:只读层
    容器与分层
    镜像与容器的一个主要区别就是,是否具有顶层的读写层(可写层)。对于一个容器的数据新增,修改,都存储在可写层。当你删除一个容器的时候,可写层也将被删除(注意:可写层与数据卷的区别)。然而镜像层是保持不变的。
    下图展示了,多个容器共享一个镜像。镜像层是只读层,不变的。多个容器层在同一个镜像层之上,并且相互独立,互相不影响。
docker存储驱动
    容器
    docker 存储驱动的职责就是将镜像层和可写容器层管理起来。不同的驱动实现管理的方式也不一致。实现容器与镜像管理的两个关键技术就是可堆叠的镜像层和copy-on-write (CoW,写时复制)。
    简述写时复制
    举个例子:小文和小武由不同的老师上数学课,但是他们只有一个习题册。小文的作业是,练习册的第十一页。为了不影响到小武,小文的做法是将第11页copy,完成作业后上交。这就是一个典型的写时复制
    第一次修改一个文件,这个文件首先会从该读写层下面的只读层复制到该读写层。该文件的只读版本依然存在,但是已经被读写层中的该文件副本所隐藏。
    了解了写时复制,就应该注意一个问题:如果第一次修改镜像层内包含的文件,文件的size很大。会造成大量的磁盘IO的开销。所以不建议将需要修改的大文件,集成到镜像内。可以采用数据卷的方式。
    数据卷与存储驱动
    当一个容器删除的时候,写入该容器的所有数据将被删除(除了保存在数据卷中的数据)
    数据卷是挂载到容器的,docker宿主机上的一个目录或文件。对数据卷的文件读写是不受存储驱动控制的,接近于本地文件系统读写速度。可以挂载多个数据卷到一个容器。也可以多个容器共享一个或多个数据卷。
    如图所示:一个docker宿主机运行2个容器。每个容器有自己的存储空间,存储于宿主机本地文件系统 /var/lib/docker/… 另外有一个共享的数据卷在 /data.挂载到两个容器内实现共享。
    docker存储驱动
    如何选择存储驱动
    docker目前支持的存储驱动有:OverlayFS,AUFS,Btrfs,Device Mapper,VFS,ZFS。
    docker的存储驱动目前并没有一个通用的,完美的,适用于所有环境的存储驱动。所以需要根据自己的环境来有所选择。
    存储驱动在不断的改进与发展
    如果从稳定性上的考量,在安装docker的时候会默认根据你的系统环境配置选择一个存储驱动。通常来说使用这个默认的驱动将减少你遇到bug的机会。
    如果你的团队使用过RHEL及其相关分支,你可能有关于LVM和Device Mapper的经验。这时建议你使用devicemapper存储驱动。
    查看当前docker 引擎的存储驱动
docker存储驱动
    如图所示:存储驱动类型为aufs,宿主机文件系统的格式为extfs。
    存储驱动与宿主机文件格式
    docker存储驱动
    设置docker的存储驱动
   docker存储驱动
    现状与未来
    许多人认为OverlayFS是Docker存储驱动的未来。然而,它仍然不够成熟。稳定性上也不如一些成熟的存储驱动,如:AUFS,devicemapper.
    下面的图表,显示了每个存储驱动的优势以及不足,请参考:
    docker存储驱动
    具体到某一个存储驱动
    这部分介绍具体的存储驱动的实现方式,对于大数据技术研究者可以参考学习。 对于应用实践者,可以暂时止步。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值