什么是数据卷

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. [转]UiPath实践经验总结(二)

    本文转自:https://www.cnblogs.com/ybyebo/p/10086473.html 1.       UI操作容易受到各种意外的干扰,因此应该缩短UI操作阶段的总体时间.而为了缩短 ...

  2. apache部分报错解决方法

    AH00558: 进入apache文件夹下的conf文件夹,打开httpd.conf文件,用ctrl+F找到ServerName,如下图 在下面加上一句: ServerName domain_name ...

  3. 读取property配置的N种方式

    @Value注解 @Value("${ddd}") <!-- 加载配置属性文件 --> <context:property-placeholder ignore- ...

  4. Pycharm界面的子窗口不见了,怎么办?

    pycharm程序界面一般有很多子窗口,如图1所示. 图1  Pycharm子窗口 如果你发现某些子窗口不见了,图2是最过分的情形,无须担心. 图2  Pycharm界面的子窗口不见了 打开项目视图子 ...

  5. 如何为 Automatic Undo Management 调整 UNDO Tablespace 的大小 (Doc ID 262066.1)

    How To Size UNDO Tablespace For Automatic Undo Management (Doc ID 262066.1) APPLIES TO: Oracle Datab ...

  6. 程序运行时间测试 - 使用系统函数 getrusage 获取程序运行时间

    https://github.com/yaowenxu/Workplace/blob/master/timer/getrusagetimer.c 关键结构体: struct rusage { stru ...

  7. LRU的实现(使用list)

    首先是LRU的定义,LRU表示最近最少使用,如果数据最近被访问过,那么将来被访问的几率也更高. 所以逻辑应该是每次都要将新被访问的页放到列表头部,如果超过了list长度限制,就将列表尾部的元素踢出去. ...

  8. CodeForces - 103B(思维+dfs找环)

    题意 https://vjudge.net/problem/CodeForces-103B 很久很久以前的一天,一位美男子来到海边,海上狂风大作.美男子希望在海中找到美人鱼 ,但是很不幸他只找到了章鱼 ...

  9. 04. Go 语言流程控制

    Go 语言流程控制 流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,流程控制可以说是一门语言的"经脉". Go 语言的常用流程控制有 if 和 for,而 switch 和 ...

  10. 详解C++ STL map 容器

    详解C++ STL map 容器 本篇随笔简单讲解一下\(C++STL\)中的\(map\)容器的使用方法和使用技巧. map容器的概念 \(map\)的英语释义是"地图",但\( ...