2019独角兽企业重金招聘Python工程师标准>>>

我们从本章开始讨论 Docker 存储。

Docker 为容器提供了两种存放数据的资源:

  1. 由 storage driver 管理的镜像层和容器层。

  2. Data Volume。

我们会详细讨论它们的原理和特性。

storage driver

在前面镜像章节我们学习到 Docker 镜像的分层结构,简单回顾一下。

容器由最上面一个可写的容器层,以及若干只读的镜像层组成,容器的数据就存放在这些层中。这样的分层结构最大的特性是 Copy-on-Write:

  1. 新数据会直接存放在最上面的容器层。

  2. 修改现有数据会先从镜像层将数据复制到容器层,修改后的数据直接保存在容器层中,镜像层保持不变。

  3. 如果多个层中有命名相同的文件,用户只能看到最上面那层中的文件。

分层结构使镜像和容器的创建、共享以及分发变得非常高效,而这些都要归功于 Docker storage driver。正是 storage driver 实现了多层数据的堆叠并为用户提供一个单一的合并之后的统一视图。

Docker 支持多种 storage driver,有 AUFS、Device Mapper、Btrfs、OverlayFS、VFS 和 ZFS。它们都能实现分层的架构,同时又有各自的特性。对于 Docker 用户来说,具体选择使用哪个 storage driver 是一个难题,因为:

  1. 没有哪个 driver 能够适应所有的场景。

  2. driver 本身在快速发展和迭代。

不过 Docker 官方给出了一个简单的答案:
优先使用 Linux 发行版默认的 storage driver

Docker 安装时会根据当前系统的配置选择默认的 driver。默认 driver 具有最好的稳定性,因为默认 driver 在发行版上经过了严格的测试。

运行docker info查看 Ubuntu 的默认 driver:

Ubuntu 用的 AUFS,底层文件系统是 extfs,各层数据存放在 /var/lib/docker/aufs。

Redhat/CentOS 的默认 driver 是 Device Mapper,SUSE 则是 Btrfs。

对于某些容器,直接将数据放在由 storage driver 维护的层中是很好的选择,比如那些无状态的应用。无状态意味着容器没有需要持久化的数据,随时可以从镜像直接创建。

比如 busybox,它是一个工具箱,我们启动 busybox 是为了执行诸如 wget,ping 之类的命令,不需要保存数据供以后使用,使用完直接退出,容器删除时存放在容器层中的工作数据也一起被删除,这没问题,下次再启动新容器即可。

但对于另一类应用这种方式就不合适了,它们有持久化数据的需求,容器启动时需要加载已有的数据,容器销毁时希望保留产生的新数据,也就是说,这类容器是有状态的。

这就要用到 Docker 的另一种存储机制:Data Volume,下一节我们讨论。

有个好消息:出版社现在搞促销,《每天5分钟玩转OpenStack》直降26元,全网最低价销售,有兴趣的同学可以访问 https://detail.tmall.com/item.htm?id=543416839771 了解详情。

转载于:https://my.oschina.net/u/2397560/blog/1203887

Docker 的两类存储资源 - 每天5分钟玩转 Docker 容器技术(38)相关推荐

  1. Docker系列之(一):10分钟玩转Docker

    1.前言 进入云计算的时代,各大云提供商AWS,阿里云纷纷推出针对Docker的服务,现在Docker是十分火爆,那么Docker到底是什麽,让我们来体验一下. 2.Docker是什麽 Docker是 ...

  2. docker容器的两类存储

    <容器的两类存储:> 1.Storage driver (container层的存储方式:无状态的应用,不需要持久化的数据,随时可以从镜像中创建,容器本身的存储形式,冷数据) 使用环境: ...

  3. k8s 创建资源的两种方式 - 每天5分钟玩转 Docker 容器技术(124)

    命令 vs 配置文件 Kubernetes 支持两种方式创建资源: 1. 用 kubectl 命令直接创建,比如: kubectl run nginx-deployment --image=nginx ...

  4. Swarm 如何存储数据?- 每天5分钟玩转 Docker 容器技术(103)

    service 的容器副本会 scale up/down,会 failover,会在不同的主机上创建和销毁,这就引出一个问题,如果 service 有要管理的数据,那么这些数据应该如何存放呢? 选项一 ...

  5. k8s 重要概念 - 每天5分钟玩转 Docker 容器技术(117)

    在实践之前,必须先学习 Kubernetes 的几个重要概念,它们是组成 Kubernetes 集群的基石. Cluster  Cluster 是计算.存储和网络资源的集合,Kubernetes 利用 ...

  6. DaemonSet 典型应用场景 - 每天5分钟玩转 Docker 容器技术(129)

    Deployment 部署的副本 Pod 会分布在各个 Node 上,每个 Node 都可能运行好几个副本.DaemonSet 的不同之处在于:每个 Node 上最多只能运行一个副本. DaemonS ...

  7. volume 生命周期管理 - 每天5分钟玩转 Docker 容器技术(44)

    Data Volume 中存放的是重要的应用数据,如何管理 volume 对应用至关重要.前面我们主要关注的是 volume 的创建.共享和使用,本节将讨论如何备份.恢复.迁移和销毁 volume. ...

  8. 再次实践 MySQL chart - 每天5分钟玩转 Docker 容器技术(166)

    学习了 chart 结构和模板的知识后,现在重新实践一次 MySQL chart,相信会有更多收获. chart 安装前的准备 作为准备工作,安装之前需要先清楚 chart 的使用方法.这些信息通常记 ...

  9. 数据管理 - 每天5分钟玩转 Docker 容器技术(147)

    本章将讨论 Kubernetes 如何管理存储资源. 首先我们会学习 Volume,以及 Kubernetes 如何通过 Volume 为集群中的容器提供存储:然后我们会实践几种常用的 Volume ...

最新文章

  1. 你最讨厌的同事来自哪家公司?这家公司被上千个程序员怒怼!
  2. linux下查看当前用户的 三个命令
  3. ALV TREE学习笔记
  4. java移动接口发短信_天天都会写接口(interface),但它的用途和好处有多少人能说得清楚?
  5. EJB 3.1全局JNDI访问
  6. clickhouse 复杂查询时嵌套连接join可能存在的异常解决(xjl456852原创)
  7. 无线通信与编码_MATLAB实现Turbo码的仿真_含仿真代码_Dr.WuYufei
  8. 航空三字代码表_国际国内城市三字代码查询-城市航空代码表;
  9. hdu2154跳舞毯(dp)
  10. python爬虫58同城租房
  11. Meta拟裁撤Instagram伦敦员工 其余人将调往美国---转自百度新闻|财联社
  12. java证书cert_java – 使用带有证书路径(cert chain)的bouncy...
  13. 淘宝店铺怎么设置定制类?方法是什么?
  14. You-Get,多网站视频下载工具,非常方便
  15. Win10安装CUDA11.4和Torch1.9.0
  16. UI 自动化中的分层设计
  17. 秒 毫秒 微秒 纳秒 皮秒。。时间单位换算
  18. 4am永远 鼠标按键设置_可换微动的三模游戏鼠标:华硕ROG烈刃2体验
  19. 实战分享:流式细胞分析仪硬件设计方案
  20. wordpress账号无法登陆_wordpress后台无法登陆的解决办法

热门文章

  1. 十字星文化获数千万元A轮融资,腾讯持续下注
  2. 3109. [CQOI2013]新数独【DFS】
  3. 单主机Docker容器VLAN划分
  4. Hexo Reload in new Mac
  5. 微服务框架 Spark Framework
  6. 优秀博客 --敏感词汇过滤
  7. 360Alluxio联合Meetup——分布式存储与Alluxio应用实践
  8. 360互联网训练营第十四期——大数据技术开放日
  9. AngularJS 国际化 支持记录语言刷新后语言不变
  10. HashSet 和 TreeSet 及 Map 集合的简单方法,含程序。