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

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

2。Data volume

Storage driver

之前我们学习镜像的时候知道镜像的分层结构:

盗图

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

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

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

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

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

docker 支持du多种的storage driver,有AUFS, Device Mapper,Btrfs,OverlayFS,VFS和ZFS,他们都能实现分层的架构,同时又有各自的特性,对于docker 用户来讲,具体使用那种storage driver是一个难题,因为:

1.没有那种storage driver能适应所有的场景;

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

不过,docker 官方给了一个简单的答案:

优先使用linux发行版默认的storage driver。

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

运行docker info查看centos默认的driver

centos/redhat默认的driver使用的是overlay,底层的文件系统是extfs

Ubuntu用的是AUFS,底层文件系统用的是extfs;

SUSE用的是Btrfs的storage driver

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

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

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

这就要用到docker的另一种存储机制:data volume。

data volume

data volume本质是docker host文件系统中的目录或文件,能够直接被mount到容器的文件系中

data volume有以下特点:

1.Data volume是目录或文件,并不是没有格式化的磁盘(块设备)

2.容器可以读写volume中的数据

3.volume数据可以被永久的保存,即使使用他的容器被永久销毁

平时运行容器的时候既有无状态的容器也有有状态的容器,我们的数据层(镜像层和容器层)和volume都可以存储数据,使用的时候该怎么选择呢?

需要考虑以下几个场景:

1.Database软件VS Database数据

2.Web应用VS应用产生的日志

3.数据分析软件VS input/output数据

4.Apache Server VS静态Html 文件

很显然这几个场景:前部分都是无状态的,可以放在数据层(镜像层和容器层),应该作为镜像的一部分

而后面的都是数据需要保存的,应该放在data volume,并且与镜像分开存放

centos7下安装docker(13docker存储)的更多相关文章

  1. docker(一) Centos7下安装docker

    docker(一) Centos7下安装dockerdocker(二) windows10下安装dockerdocker(三) 镜像和容器常用命令 docker(四) 使用Dockerfile构建镜像 ...

  2. CentOS7下安装docker(Docker系列1)

    CentOS7下安装docker 系统要求 为了安装docker,需要准备 64-bit的CentOS 7 删除非官方的Docker包 yum的仓库中有一个很旧的Docker包, 现在Docker官方 ...

  3. centos7下安装docker与镜像加速

    1.背景 centos7下安装docker 2.安装 第一步:检查是否为centos7版本 第二步:依赖环境安装 执行如下两个命令: yum -y install gcc yum -y install ...

  4. centos7 下安装docker报错:You could try using...

    搞了台VPS,想要装docker,发现死活装不上,各种报错.之前系统是centos6,发现官方现在已经不支持centos6了,遂升级到centos7,然后还是出现下面这个错误. Error: Pack ...

  5. Linux(centos7)下安装Docker

    近期公司开始推Docker技术.这个系列的文章都是基于CentOS7系统下进行讲解的. Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器 ...

  6. centos7下安装docker(21docker swarm集群创建)

    创建swarm集群: 实验环境:盗图 swarm-manager是manager node,swarm-worker1和swarm-worker2是worker node. 所有节点的docker版本 ...

  7. centos7下安装docker(19容器架构)

    What,Why,How What:什么是容器? 说起容器大家想到的是什么?      集装箱(container),虚拟机,docker,k8s 1. 没毛病,因为容器与集装箱的英文都可以翻译成co ...

  8. centos7下安装docker(14安装docker machine)

    之前我们做的实验都是在一个host上面的,其实在真正的环境中有多个host,容器在这些host上面启动,运行,停止和销毁,相关容器会通过网络相互通信,无论他们是否运行在相同的host上面. 对于这种歌 ...

  9. Centos7下安装Docker(详细的新手装逼教程)

    早就听说过Docker,一直不清楚是个啥,今天捣鼓了一下,这里做个记录. --------------------------------------------------------------- ...

  10. Centos7下安装Docker[z]

    [z]https://www.cnblogs.com/qgc1995/p/9553572.html https://yq.aliyun.com/articles/691610?spm=a2c4e.11 ...

随机推荐

  1. Java基础系列--final、finally关键字

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/8482909.html 一.概述 final是Java关键字中最常见之一,表示“最终的,不可 ...

  2. Linux 安装 JDK

    本篇博客用于记录一下在 Linux 系统下安装 Java 环境. 在大部分的 Linux 系统中都有安装 Open JDK,所以最好是先卸载 Open JDK 后在进行我们的 JDK 安装.Open ...

  3. Mybatis缓存(1)--------系统缓存及简单配置介绍

    前言 Mybatis的缓存主要有两种: 系统缓存,也就是我们一级缓存与二级缓存: 自定义的缓存,比如Redis.Enhance等,需要额外的单独配置与实现,具体日后主要学习介绍. 在这里主要记录系统缓 ...

  4. InnoDB存储引擎概览

    InnoDB存储引擎概览   InnoDB存储引擎以其平衡了高可靠性和高性能性而闻名遐迩,在MySQL 8.0版本中,InnoDB存储引擎是默认的存储引擎.(历史追溯从MySQL 5.5.5版本开始, ...

  5. IdentityServer4 中文文档 -5- (简介)支持和咨询选项

    IdentityServer4 中文文档 -5- (简介)支持和咨询选项 原文:http://docs.identityserver.io/en/release/intro/support.html ...

  6. Ado.Net实体数据模型EF,如何在代码中添加数据库连接密码

    在创建EF模型的时候,VS2013提示说“在连接字符串中存储敏感数据可能有安全风险”,于是我选择了在代码中添加,可是如何通过代码添加呢? 我在网上百度了下,没有人说的清楚直观. 假设我们创建了一个名字 ...

  7. SQL不重复查找数据及把一列多行内容拼成一行

    如下表: 表名:Test ID RowID Col1 Col2 1 1 A A 2 1 B A 3 1 A B 4 1 C B 1,查找表中字段重复的只查找一次 select distinct Col ...

  8. babel-polyfill的引用和使用

    前两天一个首页项目,想用vue玩耍一下,就用vue-cli搭建了一套vue的开发框架 完成开发.联调和上线后,问题来了 chrome.ff浏览器下都能正常显示的页面,在百度浏览器下愣就显示不出来了 我 ...

  9. HDU5887(SummerTrainingDay01-D)

    Herbs Gathering Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  10. 七牛云java(服务端)通用工具类

    前言 需要安装lombok插件. 功能列表 上传本地文件 上传Base64图片 获取文件访问地址 上传MultipartFile 代码 pom.xml <dependency> <g ...