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就是 ...
随机推荐
- Hibernate学习(三)———— 一对多映射关系
序言 前面两节讲了hibernate的两个配置文件和hello world!.还有hibernate的一级缓存和三种状态,基本上hibernate就懂一点了,从这章起开始一个很重要的知识点,hiber ...
- Linux IPC基础(System V)
简介 IPC 主要有消息队列.信号量和共享内存3种机制.和文件一样,IPC 在使用前必须先创建,使用 ipcs 命令可以查看当前系统正在使用的 IPC 工具: 由以上可以看出,一个 IPC 至少包含 ...
- net4log 日志管理
使用log4net可以很方便地为应用添加日志功能.应用Log4net,开发者可以很精确地控制日志信息的输出,减少了多余信息,提高了日志记录性能.同时,通过外部配置文件,用户可以不用重新编译程序就能改变 ...
- Ocelot中文文档-Not Supported
Not Supported Ocelot不支持以下几种情况 块级编码(Chunked Encoding ) - Ocelot始终会获取消息体的大小并返回内容长度(Content-Length).这种情 ...
- [PHP] 算法-原址排序数组使奇数位于偶数前面的PHP实现
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 1.遍历数组,判断元素奇数偶数 ...
- Java框架之Spring(二)
前一篇博客讲述了Spring的一些基础概念,下面我们来创建第一个Spring程序吧. 步骤如下: 1) 导包 2) 配置文件 附没有提示的情况 MyEclipse ->File and Edit ...
- python爬虫入门---第三篇:保存一张图片
import requests import os url = 'http://imgsrc.baidu.com/forum/w%3D580%3B/sign=749ed018cecec3fd8b3ea ...
- python 中文件输入输出及os模块对文件系统的操作
整理了一下python 中文件的输入输出及主要介绍一些os模块中对文件系统的操作. 文件输入输出 1.内建函数open(file_name,文件打开模式,通用换行符支持),打开文件返回文件对象. 2. ...
- 前端周报:前端面试题及答案总结;JavaScript参数传递的深入理解
1.2017前端面试题及答案总结 |掘金技术征文 "金三银四,金九银十",用来形容求职最好的几个月.但是随着行业的饱和,初中级前端er就业形势不容乐观. 行业状态不可控,我们能做的 ...
- JMeter 配置元件之计数器Counter
配置元件之计数器Counter by:授客 QQ:1033553122 测试环境 apache-jmeter-2.13 1. 计数器简介 允许用户创建一个在线程组范围之内都可以被引用的计数器. ...