什么是数据卷

overlay2存储卷

  • docker镜像是由多个只读层叠加而成,启动容器时,docker会加载只读镜像层,并在镜像栈顶部添加一个可写层
  • 如果运行中的容器修改了现有的一个已存在文件,那该文件会从读写层下面的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中的文件的副本所隐藏,即“写时复制(COW)”机制,但是这种机制有两个缺点:
  1. 因为这种存储机制是层级关系,因此读写效率很低
  2. 如果docker容器删除,那么数据卷也一并删除,数据得不到安全存储
  3. 容器间数据共享不方便

宿主机存储

之前介绍过overlay2存储卷了,相信大家已经对overlay2存储卷的缺点已经了解,因此,为了保证数据的安全性,我们可以把docker所用到的数据卷和宿主机的数据卷进行绑定,docker容器在写入数据的时候会保存到宿主机的磁盘空间当中,如下图:

这种方式的好处是当容器被删除的时候不影响数据存储卷里的数据,那么下次我们在创建docker容器,只要把卷关联到宿主机上的存储卷,那么就可以保证数据的正常读取,但是这仅仅只能到本机之上创建新的docker容器

NFS共享存储

之前提到有两种数据卷存储机制,一个是overlay2,一个是关联至宿主机,我们还有另外一种数据卷形式,就是NFS网络文件系统,如下图:

这种模式的好处在于,docker容器的创建就不仅仅局限于单机编排了,因为我们的数据卷是nfs共享文件系统,因此我们不用管数据持久性的问题,我们可以在任何挂载nfs文件系统的宿主机上启动docker就可以读取到数据了

因此一般应用程序在访问卷时可以是以下形式:

存储卷类型

docker容器挂载卷一般分为2种:

  1. 绑定挂载卷
  2. 容器管理的挂载卷

绑定挂载卷

绑定挂载卷,把宿主机的/test目录和容器主机的/data/web/html目录绑定

[root@localhost ~]# docker run --name mybusy -itd -v /test/:/data/web/html/ busybox
9ad314b58a9d81e9d8e7c782b4716a142da88c844aa4d4bce616a9360c86491d

验证

[root@localhost ~]# cd /test
[root@localhost test]# ls
[root@localhost test]# echo "welcome to docker" > index.html
[root@localhost test]# docker exec -it mybusy /bin/sh
/ # cd /data/web/html/
/data/web/html # cat index.html
welcome to docker

我们也可以用inspect查看详细信息

[root@localhost test]# docker inspect mybusy
......
"Mounts": [
{
"Type": "bind",
"Source": "/test",
"Destination": "/data/web/html",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
......

docker容器管理的卷

可以看到下面红色字体,docker容器的卷映射到的宿主机上的卷

[root@localhost test]# docker run --name mybusy -itd -p : -v /data/web/html/ busybox
"Mounts": [
{
"Type": "volume",
"Name": "7ae8424e3a6759288a9376f55a36c586f505509ca60640fde55315484bcda364",
"Source": "/var/lib/docker/volumes/7ae8424e3a6759288a9376f55a36c586f505509ca60640fde55315484bcda364/_data",
"Destination": "/data/web/html",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],

docker卷管理(四)的更多相关文章

  1. docker 数据卷管理

    在生产环境中使用docker,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这涉及到容器对数据管理的操作 容器对数据的管理主要有两种方式: 数据卷(Data Volumes): 容器内 ...

  2. Docker学习第三天(Docker数据卷管理)

    1.Docker数据卷管理 在Docker中,要想实现数据的持久化(所谓Docker的数据持久化即数据不随着Container的结束而结束),需要将数据从宿主机挂载到容器中.目前Docker提供了三种 ...

  3. Devops(四):Docker 镜像管理

    参考 <Docker中上传镜像到docker hub中> <Docker 镜像管理> <通过容器提交镜像(docker commit)以及推送镜像(docker push ...

  4. 四、docker容器管理

    一.docker容器管理 1.1 容器查看-ps命令 显示本地容器列表,但是默认不显示关闭的容器,只显示运行中的容器,除非加上命令选项 -a 用法:docker ps [-a 显示所有容器,默认只显示 ...

  5. Docker-compose 多个Docker容器管理:以MYSQL和Wordpress为例

    搬砖的陈大师版权所有,转载请注明:http://www.lenggirl.com/tool/docker-compose.html Docker-compose 多个Docker容器管理:以MYSQL ...

  6. 004.Docker镜像管理

    一 镜像基本操作 镜像是一个包含程序运行必要依赖环境和代码的只读文件,其本质是磁盘上一系列文件的集合.它采用分层的文件系统,将每一次改变以读写层的形式增加到原来的只读文件上.镜像是容器运行的基石. 1 ...

  7. Docker镜像管理基础篇

    Docker镜像管理基础篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Docker Images Docker镜像还有启动容器所需要的文件系统及其内容,因此,其用于创建并启 ...

  8. CentOS 6.3下配置LVM(逻辑卷管理)

    一.简介 LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵 ...

  9. 学习OpenStack之 (4): Linux 磁盘、分区、挂载、逻辑卷管理 (Logical Volume Manager)

    0. 背景: inux用户安装Linux操作系统时遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间.普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻 ...

随机推荐

  1. 利用Azure虚拟机安装Dynamics 365 Customer Engagement之九:新建组织

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  2. CICD-Jenkins笔记2014-2018

    CICD-Jenkins笔记2014-2018 20141119 chenxin 20180726 chenxin update 四个环境,开发/测试/预发布/生产. 文中涉及的最新脚本,请查看西部战 ...

  3. .Net Core 3.0开源可视化设计CMS内容管理系统建站系统

    简介 ZKEACMS,又名纸壳CMS,是可视化编辑设计的内容管理系统.基于.Net Core开发可跨平台运行,并拥有卓越的性能. 纸壳CMS基于插件式设计,功能丰富,易于扩展,可快速创建网站. 布局设 ...

  4. 控制label标签的宽度,不让它换行 label标签左对齐

    1==>控制label标签的宽度.解决字段名太长时,不会换行显示 label-width="100px" label标签的宽度是100px; style="widt ...

  5. 最小化MarkdownPad 2安装体积(win10)

    一.原因 MarkdownPad2在Win10当中可能无法正常运行,右侧预览界面会出现错误"This view has crashed!"查阅官网FAQ得知大多数情况下安装Awes ...

  6. OC:浅析Runtime中消息转发机制

    一.介绍 OC是一门动态性语言,其实现的本质是利用runtime机制.在runtime中,对象调用方法,其实就是给对象发送一个消息,也即objc_msgSend().在这个消息发送的过程中,系统会进行 ...

  7. react的this.setState中的坑

    react的this.setState中的有两个. 1.this.setState异步的,不能用同步的思维讨论问题 2.在进行组件通讯的回调的时候,this指向子组件,没有指向父亲这,怎么办呢.在 c ...

  8. 《细说PHP》第四版 样章 第23章 自定义PHP接口规范 5

    23.3  接口的安全控制规范 23.2节的示例实现了一个简单接口,但是这个接口此时是在“裸奔”的.因为这个接口所有人都可以请求,不仅我们的客户端可以正常访问数据,如果有人使用如fiddler.wir ...

  9. IT兄弟连 Java语法教程 流程控制语句 分支结构语句4

    4  嵌套if-else条件语句 嵌套if语句是作为另一个if或else语句的目标的if语句.嵌套if语句在程序设计中非常普遍.Java中,关于嵌套if语句需要记住的是,else语句总是和同一代码块中 ...

  10. node 连接 mysql 数据库三种方法------笔记

    一.mysql库 文档:https://github.com/mysqljs/mysql mysql有三种创建连接方式 1.createConnection 使用时需要对连接的创建.断开进行管理 2. ...