我们现在知道docker 有两种存储方式:storage driver和data volume

stroage driver这种存储方式主要是存储那些无状态的数据,是镜像层和容器层组成的,而data volume是目录或者文件,那么这些目录或者文件要设置多大呢?

因为volume实际上是docker host文件系统的一部分,所以volume的容量取决于文件系统当前未使用的空间,目前还没有方法设置volume的容量

在具体的使用上,docker提供了两种类型的volume:bind mount和docker managed volume

bind mount:

是将host上已存在的目录或者文件mount 到容器,通过-v将其mout到容器中

-v:格式为:<host path>:<container path>

如果挂载点mount point已经存在,那么会将原有的数据隐藏起来,如果mount point不存在,那么会自动创建一个挂载点,同样,如果host中的原文件如果不存在,会被当作新的目录bind mount给容器,这与linux中的mount性质一致。

出现这个错误的原因是由于我的~/htdocs是一个文件,而/usr/local/apache2/htdocs是一个目录,所以导致我不能挂载成功,我的容器也只能处于create的状态,

说明:当我们使用bind mount去给容器挂载的时候,一定要一一对应,文件只能挂载到文件上,不能挂载到目录上,目录只能挂载到目录上,不能挂载到文件上

由于/usr/local/apache2/htdocs十一个挂载点,那当我们更新host上面的/root/htdocs/index.html时,挂载点的内容是否会变?

根据试验的结果证明:当我们更改host上的bind mount中的内容时,容器中的相应的挂载点也会被改变,说明bind mount可以让host与容器实现数据共享

当我们将容器销毁时,bind mount是否存在?

可见即使我们删除了容器,bind mount依然存在。因为bind mount是host上面的文件,只是借给容器使用,不能说删就删

bind mount时还可以指定数据的读写权限,默认是可写可读,可指定为只读

ro:设置了只读权限,在容器中无法对bind mount数据进行修改,只有host有权限修改数据,提高了安全性

mount point有很多应用场景,比如我们可以将源代码目录mount到容器中,在host中修改代码就能看到应用的实时效果。再比如将mysql容器的数据放在bind mount里,这样host可以方便的备份和迁移。

bind mount的使用直观高效,易于理解,但它也有不足的地方:bind mount需要指定host文件系统的特定路径,这就限制了容器的可移植性,当需要将容器迁移到其他host,而该host没有要mount的数据或者数据不在想通的路径时,操作会失败

移植性更好的方式是:docker managed

docker managed volume与bind mount在使用上的最大的区别就是不需要指定mount源,指明mount point就行了。

我们指定了容器的挂载点,但是这个host上的源文件在那呢?

可以在host上通过docker inspect查看挂载的内容

docker inspect输出很多,但是我们现在只关心mount的内容:

Source:就是volume在host上的位置

Destination:我们指定的mount point

每当容器申请mount docker managed volume时,docker 都会在/var/lib/docker/volume下生成一个目录

这个目录就是mount 源

那这个volume中到底有什么呢?

volume的内容跟原有/usr/local/apache2/htdocs完全一样,说明在指定mount point时会自动复制一份原有数据到volume中

但是:此时的/usr/local/apache2/htdocs已经不在由storage driver管理了,他已经是一个data volume。我们可以想bind mount一样对数据进行操作,例如更新数据

看一下容器里的数据是否会更新:

容器中的内容已经被更新!

我们是够能更改mount point的权限呢?

试验结果是:不能,只能是可读可写的权限,不能想bind mount那样设置权限

我们来回顾一下docker managed volume的创建过程:

1.容器启动的时候,简单的告诉docker“我需要一个volume存放数据”,帮我mount到容器的/abc中;

2.docker在host中的/var/lib/docker/volumes中生成一个随机的目录作为mount源;

3.如果容器中的/abcy已经存在,则复制数据到mount源中;

4.将host中的volume mount到/abc

我们除了用docker inspect可以查看volume的信息,还可以通过docker volume查看docker managed volume,但不能看到bind mount的信息;docker inspect都可以看到。

centos7下安装docker(13.1docker存储--data volume)的更多相关文章

  1. centos7下安装docker(13docker存储)

    Docker为容器提供了两种存放数据的资源: 1.storage driver管理的镜像层和容器层 2.Data volume Storage driver 之前我们学习镜像的时候知道镜像的分层结构: ...

  2. docker(一) Centos7下安装docker

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

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

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

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

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

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

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

  6. centos7下安装docker(16.1docker跨主机存储--Rex-Ray)

    一.Rex-Ray以standalone进程的方式运行在docker主机上,安装方法很简单:在docker1和docker2上运行如下命令: curl -sSL https://dl.bintray. ...

  7. centos7下安装docker(16.docker跨主机存储)

    从业务数据的角度看,容器可以分为两类:无状态(stateless)容器和有状态(stateful)容器. 无状态:是指容器在运行的过程中不需要保存数据,每次访问的结果不依赖上一次的访问,比如提供静态页 ...

  8. centos7下安装docker(13.4容器volume总结)

    最近我们学习了docker 存储,首先docker存储有两种:storage driver和data volume. storage driver是由镜像层和容器层组成的,可以通过docker ins ...

  9. centos7下安装docker(13.2容器数据共享)

    回想一下我们学了两种存储方式:storage driver和data volume,其中又分为bind mount和docker managed volume,我们知道storage driver就是 ...

随机推荐

  1. AD预测论文研读系列2

    EARLY PREDICTION OF ALZHEIMER'S DISEASE DEMENTIA BASED ON BASELINE HIPPOCAMPAL MRI AND 1-YEAR FOLLOW ...

  2. JAVA 面试知识点

    参考:https://www.cnblogs.com/java1024/p/8594784.html 反射: JAVA反射机制是在运行状态中, 对于任意一个类,都能够知道这个类的所有属性和方法: 对于 ...

  3. 初步掌握node的路由控制

    1.1.2:node.js的路由控制 1.运行原理 在1.1.1节中,提到过app.js中app.get("/",routes.index)可以用以下代码取代: app.get(& ...

  4. oracle用户权限

    权限: create session create table unlimited tablespace connect resource dba 例: #sqlplus /nolog SQL> ...

  5. Python知识梳理

    这是个人学习笔记,非教程,内容会有些混乱 极简教程     数据类型 我们可以使用type()函数类获取对象的类型,Python3中内置数据类型包括:None,int,float,complex,st ...

  6. asp.net通过后台代码给前台设置css样式,下拉列表在js中的取值

    后台根据不同的用户登陆隐藏或显示前台div标签 前台: 将div声明成服务器端控件 <div id="div1" runat="server">.. ...

  7. ssh介绍

      一.SSH概念(百度) SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:SSH 为建立在应用层基础上的安全协议.SSH ...

  8. webpack4 系列教程(五): 处理CSS

    这节课讲解webpack4中打包css的应用.v4 版本和 v3 版本并没有特别的出入. >>> 本节课源码 >>> 所有课程源码 教程所示图片使用的是 githu ...

  9. canvas-6font.html

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. blfs(systemd版本)学习笔记-编译安装sudo并创建普通用户配置sudo权限

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! blfs书中sudo的安装配置章节:http://www.linuxfromscratch.org/blfs/view/stab ...