centos7下安装docker(13.1docker存储--data volume)
我们现在知道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)的更多相关文章
- centos7下安装docker(13docker存储)
Docker为容器提供了两种存放数据的资源: 1.storage driver管理的镜像层和容器层 2.Data volume Storage driver 之前我们学习镜像的时候知道镜像的分层结构: ...
- docker(一) Centos7下安装docker
docker(一) Centos7下安装dockerdocker(二) windows10下安装dockerdocker(三) 镜像和容器常用命令 docker(四) 使用Dockerfile构建镜像 ...
- CentOS7下安装docker(Docker系列1)
CentOS7下安装docker 系统要求 为了安装docker,需要准备 64-bit的CentOS 7 删除非官方的Docker包 yum的仓库中有一个很旧的Docker包, 现在Docker官方 ...
- centos7下安装docker与镜像加速
1.背景 centos7下安装docker 2.安装 第一步:检查是否为centos7版本 第二步:依赖环境安装 执行如下两个命令: yum -y install gcc yum -y install ...
- centos7 下安装docker报错:You could try using...
搞了台VPS,想要装docker,发现死活装不上,各种报错.之前系统是centos6,发现官方现在已经不支持centos6了,遂升级到centos7,然后还是出现下面这个错误. Error: Pack ...
- centos7下安装docker(16.1docker跨主机存储--Rex-Ray)
一.Rex-Ray以standalone进程的方式运行在docker主机上,安装方法很简单:在docker1和docker2上运行如下命令: curl -sSL https://dl.bintray. ...
- centos7下安装docker(16.docker跨主机存储)
从业务数据的角度看,容器可以分为两类:无状态(stateless)容器和有状态(stateful)容器. 无状态:是指容器在运行的过程中不需要保存数据,每次访问的结果不依赖上一次的访问,比如提供静态页 ...
- centos7下安装docker(13.4容器volume总结)
最近我们学习了docker 存储,首先docker存储有两种:storage driver和data volume. storage driver是由镜像层和容器层组成的,可以通过docker ins ...
- centos7下安装docker(13.2容器数据共享)
回想一下我们学了两种存储方式:storage driver和data volume,其中又分为bind mount和docker managed volume,我们知道storage driver就是 ...
随机推荐
- Maven教程1(介绍安装和配置)
官网地址:http://maven.apache.org/ 1.Maven介绍 1.1为什么需要使用Maven 之前学Spring和SpringMVC的时候我们需要单独自己去找相关的jar. 这些ja ...
- HTML5 audio元素如何使用js与jquery控制其事件
前言: 每一次遇见问题想到的就是怎么解决?最好的方法还是查询网络媒体,更好的办法是让自己记忆,只有自己理解到了才真正是属于自己.要做一个订单提醒功能,没有使用audio相关的插件,虽然插件无数,还是喜 ...
- [转]angular2之@Output() EventEmitter
本文转自:https://www.jianshu.com/p/f2768f927c86 A src/app/components/contains/contain1.ts import { Compo ...
- c# 键值数据保存XML文件
/// <summary> /// 键值数据保存XML文件 /// </summary> /// <param name="fileName"> ...
- RowVersion 用法
在数据表更新时,如何表征每个数据行更新时间的先后顺序?最简单的做法是使用RowVersion(行版本)字段,它和时间戳(TimeStamp)类型的功能相似,只不过TimeStamp 已过时,应避免用于 ...
- Java学习笔记之——Java介绍
1.Java体系: JavaSE:标准版,其他两个体系的基础 JavaEE:企业版 JavaME:微型版,适用于消费类型的微型设备 2.Java三大特性:封装.继承.多态 3.Java的特点:面向对象 ...
- 通过kubernetes构建ela服务
一.kubernetes 通过yaml 创建pod与service apiVersion: extensions/v1beta1 kind: Deployment metadata: name: el ...
- UED与UCD
UED User Experience Design(用户体验设计),简称UED.UED是以用户为中心的一种设计手段,以用户需求为目标而进行的设计.设计过程注重以用户为中心,用户体验的概念从开发的最早 ...
- 【20190129】CSS-定位问题记录
很多情况下我在写div的时候都不会把高度写死,而是用子元素撑开高度的方式,但是如果子元素设置了浮动或者position绝对定位,就相当于把子元素从文档流中拿出来了,这时父元素的高度就不能被子元素撑开了 ...
- Chrome中无法断点调试的解决方案
chrome的调试功能实在是太强大了,相比之下ie的就是一垃圾. 最近在调试时出现一种情况,死活不能设置断点,也不能跟踪调试,这下抓狂了. JS也是非常简单的,也没有压缩.为什么就不能调试呢? 网上狂 ...