Docker为容器提供了两种存放数据的资源:
 
    1、由storage driver 管理的镜像层和容器层
    2、Data Volume
 
storage driver
 
 
容器由最上面一个可写的容器层,以及若干制度的镜像层组成,容器的数据就存放在这些层中。这样的分层结构最大的特性就是 Copy-on-Write
 
    1、新数据会直接存放在最上面的容器层
    2、修改现有数据会先从镜像层将数据复制到容器层,修改后的数据直接保存在容器层,镜像层的中内容保持不变
    3、如果多个层中有命名相同的文件,用户只能看到最上面那层中的文件
 
分层结构是镜像和容器的创建、分享以及分发变得非常高效,而这些都要归功于 docker storage driver 。storage driver实现了多层数据的堆叠,并为用户提供了一个单一的合并之后的统一视图
 
Docker 支持多种storage driver ,有 AUFS、Device Mapper 、Btfs、OverlayFS、VFS和ZFS。他们都能实现分层的架构,同时又有各自的特性。对于Docker用户来说,具体选择使用哪个 storage driver是一个难题,因为:
 
    1、没有哪个driver能够适应所有的场景
    2、driver本身在快速发展和迭代
 
    Dcoker建议:优先使用 Linux发行版默认的storage driver。Docker 安装时会根据当前系统的配置选择默认的driver。默认driver具有最好的稳定性,因为默认driver在发行版上经过了严格的测试。
 
运行 docker info 可以看到系统默认的driver
 
---------centos 7---------
 
[root@docker-lab ~]# docker info
Containers: 9
Running: 1
Paused: 0
Stopped: 8
Images: 35
Server Version: 18.09.0
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
 
---------ubuntu 16---------
 
root@docker-lab:~# docker info
Containers: 6
Running: 3
Paused: 0
Stopped: 3
Images: 5
Server Version: 18.03.1-ce
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
 
 
对于某些容器,直接将数据放在由storage driver维护的层中是最好的选择,比如那些无状态的应用。无状态意味着容器没有需要持久化的数据,随时可以从镜像直接创建。
 
比如busybox,他是一个工具箱,我们启动busybox是为了执行诸如 wget ping 之类的命令,不需要保存数据供以后使用,使用完可以直接退出,容器删除时存在放容器层中的工作数据也一起被删除,这没问题,下次再启动新容器即可。
 
但是对于另一类应用这种方式就不合适了,然有持久化数据的需求,容器启动时需要加载已有的数据,容器销毁时希望保留产生的新数据,也就是说,这类容器是有状态的。
 
有状态的容器需要用到Docker的另一种存储机制:Data Volume,下节学习

038、Docker 的两类存储资源(2019-02-27 周三)的更多相关文章

  1. 第 6 章 存储 - 038 - Docker 的两类存储资源

    存储资源 Docker 为容器提供了两种存放数据的资源: 由 storage driver 管理的镜像层和容器层 Data Volume 1.storage driver 容器由最上面一个可写的容器层 ...

  2. Docker 的两类存储资源 - 每天5分钟玩转 Docker 容器技术(38)

    我们从本章开始讨论 Docker 存储. Docker 为容器提供了两种存放数据的资源: 由 storage driver 管理的镜像层和容器层. Data Volume. 我们会详细讨论它们的原理和 ...

  3. 36-Docker 的两类存储资源

    我们从本章开始讨论 Docker 存储. Docker 为容器提供了两种存放数据的资源: 由 storage driver 管理的镜像层和容器层. Data Volume. 我们会详细讨论它们的原理和 ...

  4. 【英文文档】 Installing Go from source Go语言官方编译指南 2019.02.27

    Introduction Go is an open source project, distributed under a BSD-style license. This document expl ...

  5. 2019.02.27 bzoj4556: [Tjoi2016&Heoi2016]字符串(二分答案+sam+线段树合并)

    传送门 题意:给一个字符串SSS. 有mmm次询问,每次给四个参数a,b,c,da,b,c,da,b,c,d,问s[a...b]s[a...b]s[a...b]的所有子串和s[x...y]s[x... ...

  6. From today 2019.02.27

    HIT开设软件构造课程,需要在博客上分享记录学习体验,感觉还是挺好的. 以后会不定期更新一些关于学下java的笔记和实验相关的内容.

  7. docker (2)---存储、网络(利用docker容器上线静态网站)

    一.docker底层依赖的核心技术 1.命名空间 (Namespaces) 2.控制组 (Control Groups) 3.联合文件系统 (Union File System) 4.Linux 虚拟 ...

  8. centos7下安装docker(13.1docker存储--data volume)

    我们现在知道docker 有两种存储方式:storage driver和data volume stroage driver这种存储方式主要是存储那些无状态的数据,是镜像层和容器层组成的,而data ...

  9. docker镜像与容器存储结构分析

    注意:转载请注明出处:http://www.programfish.com/blog/?p=9 Docker是一个开源的应用容器引擎,主要利用linux内核namespace实现沙盒隔离,用cgrou ...

随机推荐

  1. Codeforces Bubble Cup 11 J. Moonwalk challenge加强版

    题意 有一棵 \(n\) 个节点的树,每条边上有一个字符,有 \(m\) 次询问. 每次会选定两个点 \(u, v\) , \(u\) 到 \(v\) 的路径上的字符形成了一个字符串 \(T\) ,再 ...

  2. zabbix3.4.6之源码安装

    LAMP部署环境搭建: Linux+apache(httpd)+mysql(mariadb)+php: 版本要求:apache-1.3.12,mysql-5.0.3,php-5.4.0<http ...

  3. FLAG区

    以下是一些flag(倒了我也不会怎么样): 更博客(对不起 您呼叫的flag是空号 请稍后再拨) CTS/APIO2019 Cu+ NOI2019 Ag+

  4. hexo从零开始

    部署Hexo Hexo官方文档 新建一个文件夹,比如,Blog,然后进入该文件夹下: npm install hexo-cli -g hexo version 安装依赖包 npm install 配置 ...

  5. CF983A Finite or not?(数学)

    题意:给出分母,分子和进制,要求判断该数是否为有限小数. Solution 表示并不知道怎么判断. 度娘:“一个分数在最简分数的情况下,如果它的分母只含有2和5两个质因数,这个分数就能化成有限小数.” ...

  6. Python中字符串、列表、元组、字典、集合常用方法总结

  7. golang go语言通道类型的通道示例 通道的通道

    几点注意:go的无缓存通道 通道make 创建后,即使里面是空的,也可以取里面内容.但是程序会被阻塞. 通道的规则是没人取,是不能往里面放的.放的线程会阻塞. 最外层的requestChan相当于一个 ...

  8. window 操作 快捷键

    win 下在当前目录下打开cmd命令窗口: 方法一: 在当前目录下,按下shift + 鼠标右键,会出现“在此处打开命令窗口”的字样,然后点击即可. 方法二: 在该文件夹上,按下shift + 鼠标右 ...

  9. MySQL使用普通用户访问返回ERROR 1698 (28000): Access denied for user 'root'@'localhost'

    这个问题最开始查资料都说要改密码,密码不对.其实不是这个样子都. 解决方法 修改/etc/mysql/my.cnf,添加以下内容 [mysqld] skip-grant-tables 重启mysql服 ...

  10. Linux系统调用之内存管理

    brk 改变数据段空间的分配 sbrk 参见brk mlock 内存页面加锁 munlock 内存页面解锁 mlockall 调用进程所有内存页面加锁 munlockall 调用进程所有内存页面解锁 ...