一、概述

1、Docker底层存储机制

Docker镜像由多个只读层叠加而成,启动容器时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层。

如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏,此即“写时复制(COW)”机制。这种机制在访问和使用时效率会非常的低。

写时复制机制是:如果一个文件在最底层是存在的,在任意层中被标记为删除,那么用户最上层就看不到这个文件了。用户能看到的只能是没被标记为删除的或者被标记为删除而用户在最上层又自己创建了同名的文件。

docker容器存储机制存在的问题:存储于联合文件系统中,不易于宿主机访问;容器间共享数据不便;删除容器数据会丢失。

解决方案:卷(Volume),是容器上的一个或多个“目录”,此类目录可绕过联合文件系统与宿主机上的某个目录“绑定(关联)”。

2、存储卷(Volume)

所谓存储卷可以简单想象成在特权级的名称空间(宿主机)当中找一个本地文件系统之上存在某一个目录,把这个目录直接与容器内部的文件系统之上的某一个目录建立绑定关系。

Volume的初衷是独立于容器的生命周期实现数据持久化,因此删除容器时默认不会删除卷,也不会对未被引用的卷做垃圾回收。可指定删除容器时一并删除存储卷。

docker的存储卷默认是使用容器所在的宿主机所在的本地文件磁盘目录。可以在宿主机上挂载一个NFS文件目录,然后容器去使用这个目录。

二、常见操作

1、docker volume的两种类型

绑定挂载卷:同时指定docker目录和宿主机上绑定的目录。容器销毁后宿主机上的目录默认不会删除。

[root@oracle ~]# docker container run --name b1 -v /data/volumes/b1:/data --rm -it busybox:latest #如果宿主机上的目录不存在,docker会自动创建
[root@oracle ~]# docker container inspect b1

docker管理的卷:指定docker容器中的目录,宿主机上的目录由docker在某一特定目录下自动创建。容器销毁后宿主机上的目录默认会删除(可能与版本有关)。

[root@oracle ~]# docker container run --name b1 -v /data --rm -it busybox:latest
[root@oracle ~]# docker container inspect b1
[root@oracle ~]# docker container inspect -f {{.Mounts}} b1 #过滤出Mounts字段

2、共享存储卷

  • 两个容器同时与宿主机的同一个目录建立关联关系,两个容器之间就可以共享数据了。
  • 启动新的容器时复制一个已存在容器的存储卷路径。
[root@oracle ~]# docker container run --name b1 -v /data/volumes/b1:/data --rm -it busybox:latest
[root@oracle ~]# docker container run --name b2 --volumes-from=b1 --rm -it busybox:latest
[root@oracle ~]# docker container inspect -f {{.Mounts}} b2

5.Docker存储卷的更多相关文章

  1. Docker系列05—Docker 存储卷详解

    本文收录在容器技术学习系列文章总目录 1.存储卷介绍 1.1 背景 (1)docker 的 AFUS 分层文件系统 docker镜像由多个只读层叠加面成,启动容器时,docker会加载只读镜像层并在镜 ...

  2. 6、Docker存储卷

    Why Data Volumes?  来自马哥教育 Data volumes Volume types  绑定挂载卷:在宿主机和容器上各指明绑定路径才能进行绑定. docker管理卷:在容器内指定挂载 ...

  3. Docker存储卷(V18.X)

    简介 介绍 Docker的存储卷称之为volume,本质上容器上的一个或者多个目录,而这些目录绕过了联合文件系统,与宿主机中的目录或者其他容器目录进行了绑定关系,这种绑定关系可以看作Linux的mou ...

  4. Docker存储卷

    六.Docker 存储卷(volume) COW:写时复制 Bind mount volume:手动mount绑定的卷 # docker run --name centos-3 -it -v /dat ...

  5. docker 存储卷 Volumes

    一,docker容器面临的困境: 容器运行中产生的数据,是放到容器栈的最顶层,当容器停止并被删除后,这些数据就被删除了. docker采用COW(写时复制)策略,导致性能低下.比如有个mysql容器, ...

  6. Docker存储卷篇

    Docker存储卷篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.    一.写时复制(COW)机制 所谓写时复制的效果如上图所示: Docker镜像由多个只读层叠加而成,启动容器 ...

  7. Docker 学习6 Docker存储卷

    一.什么是存储卷 二.为什么要用到数据卷 三.数据卷是怎么被管理的 四.存储卷种类 五.在容器中使用存储卷 1.只声明容器路径 [root@localhost docker]# docker run ...

  8. Docker系列03—Docker 存储卷

    一.存储卷介绍 1.1 背景 Docker 的 AFUS 分层文件系统 docker镜像由多个只读层叠加而成,启动容器时,docker会加载只读镜像层并在镜像栈顶部加一个读写层: 如果运行的容器修改了 ...

  9. 你必须知道的Docker数据卷(Volume)

    本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章. 一.将Docker数据挂载到容器 在Docker中,要想实现数据的持久化(所谓 ...

随机推荐

  1. 用Vue来实现音乐播放器(八):自动轮播图啊

    slider.vue组件的模板部分 <template> <div class="slider" ref="slider"> <d ...

  2. python -加密(MD5)

    import hashlib def md5_passwd(str,salt ='aaaaa') str = str + salt m = hashlib.md5()#构造一个MD5对象 m.upda ...

  3. Android studio 不能创建Activity等文件

    这是我之前安装Android studio的一系列问题:http://tieba.baidu.com/p/5921373177 1. 不能创建Activity等许多文件: 2. 工程运行不了: 3. ...

  4. 使用pyautogui替代selenium,图像识别进行web自动化测试--基于python语言

    这里演示一下使用pyautogui替代selenium进行web自动化测试,并不建议使用pyautogui进行web自动化测试,因为元素的ui一旦有长宽变化,或者风格的变化,执行时就会发生异常,仅当学 ...

  5. LeetCode 算法 Part 1

    目录 1. 两数之和 1. 题目 2.代码 4. 算法用时 5. 感想 2. 两数相加 1. 题目 2.代码 4. 算法用时 5. 感想 3. 无重复字符的最长子串 1. 题目 2.代码 4. 算法用 ...

  6. sql exist 和not exist(转载)

    exists : 强调的是是否返回结果集,不要求知道返回什么, 比如:  select name from student where sex = 'm' and mark exists(select ...

  7. Redis集合的常用操作指令

    Redis集合的常用操作指令 Sets常用操作指令 SADD 将指定的元素添加到集合.如果集合中存在该元素,则忽略. 如果集合不存在,会先创建一个集合然后在添加元素. 127.0.0.1:6379&g ...

  8. 无法打开内核设备"\\.\Global\vmx86":系统找不到指定的文件. 是否在安装 VMwareWorksation 后重新引到 ? 问题解决

    节前正常使用的工作环境, 过完春节后, 上班第一天就不正常工作了, 难不成机器也要放假休息, 虚拟机打不开了, 没办法办公可是不行的. 上网查原因, 解决问题. 上网看了很多关于此问题的解决办法, 很 ...

  9. levelDB SSTable-静态布局结构

    SSTable是Bigtable中至关重要的一块,对于LevelDB来说也是如此,对LevelDB的SSTable实现细节的了解也有助于了解Bigtable中一些实现细节.     本节内容主要讲述S ...

  10. [19/05/26-星期日] JavaScript_ 基本语法_运算符

    一.概念 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl ...