5.Docker存储卷
一、概述
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存储卷的更多相关文章
- Docker系列05—Docker 存储卷详解
本文收录在容器技术学习系列文章总目录 1.存储卷介绍 1.1 背景 (1)docker 的 AFUS 分层文件系统 docker镜像由多个只读层叠加面成,启动容器时,docker会加载只读镜像层并在镜 ...
- 6、Docker存储卷
Why Data Volumes? 来自马哥教育 Data volumes Volume types 绑定挂载卷:在宿主机和容器上各指明绑定路径才能进行绑定. docker管理卷:在容器内指定挂载 ...
- Docker存储卷(V18.X)
简介 介绍 Docker的存储卷称之为volume,本质上容器上的一个或者多个目录,而这些目录绕过了联合文件系统,与宿主机中的目录或者其他容器目录进行了绑定关系,这种绑定关系可以看作Linux的mou ...
- Docker存储卷
六.Docker 存储卷(volume) COW:写时复制 Bind mount volume:手动mount绑定的卷 # docker run --name centos-3 -it -v /dat ...
- docker 存储卷 Volumes
一,docker容器面临的困境: 容器运行中产生的数据,是放到容器栈的最顶层,当容器停止并被删除后,这些数据就被删除了. docker采用COW(写时复制)策略,导致性能低下.比如有个mysql容器, ...
- Docker存储卷篇
Docker存储卷篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.写时复制(COW)机制 所谓写时复制的效果如上图所示: Docker镜像由多个只读层叠加而成,启动容器 ...
- Docker 学习6 Docker存储卷
一.什么是存储卷 二.为什么要用到数据卷 三.数据卷是怎么被管理的 四.存储卷种类 五.在容器中使用存储卷 1.只声明容器路径 [root@localhost docker]# docker run ...
- Docker系列03—Docker 存储卷
一.存储卷介绍 1.1 背景 Docker 的 AFUS 分层文件系统 docker镜像由多个只读层叠加而成,启动容器时,docker会加载只读镜像层并在镜像栈顶部加一个读写层: 如果运行的容器修改了 ...
- 你必须知道的Docker数据卷(Volume)
本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章. 一.将Docker数据挂载到容器 在Docker中,要想实现数据的持久化(所谓 ...
随机推荐
- vue中移动端自适应方案
安装 lib-flexible 1.npm i lib-flexible 2.在项目入口文件 main.js 里 引入 lib-flexible import ‘lib-flexible’ 3.添加m ...
- Java继承和多态-Static关键字
1. 什么是Static 关键字? Static 能够与变量,方法和类一起使用,称为静态变量,静态方法.如果在一个类中使用static修饰变量或者方法的话,它们可以直接通过类访问,不需要创建一个类的对 ...
- (转)Matplotlib的子图subplot的使用
转:https://www.jianshu.com/p/de223a79217a 前言 Matplotlib的可以把很多张图画到一个显示界面,这就设计到面板切分成一个一个子图.这是怎么做到的呢.mat ...
- php中钩子(hook)的应用示例demo
我们先来回顾下原本的开发流程:产品汪搞出了一堆需求:当用户注册成功后需要发送短信.发送邮件等等:然后聪明机智勇敢的程序猿们就一扑而上:把这些需求转换成代码扔在 用户注册成功 和 跳转到首页 之间: 没 ...
- 逻辑回归模型(Logistic Regression, LR)--分类
逻辑回归(Logistic Regression, LR)模型其实仅在线性回归的基础上,套用了一个逻辑函数,但也就由于这个逻辑函数,使得逻辑回归模型成为了机器学习领域一颗耀眼的明星,更是计算广告学的核 ...
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_07 缓冲流_3_BufferedInputStream_字节缓冲
内容改成abc 来个数组缓冲
- 学习《Oracle PL/SQL 实例讲解 原书第5版》---创建student schema
接上篇,运行脚本createStudent.sql后结果不符. 又运行了一遍rebuildStudent.sql就好了. 图: 原来是这样的,还以为是语言问题: 额,本来是打算截图的.但是发现没问题了 ...
- 实现atoi
1. 去掉首位空格 2. 判断首位是否有正负号 3. 判断各位是否是0~9,有其他字符直接返回当前结果 public class Solution { public int atoi(String ...
- PHP 中的 $this, static , self ,parent 等等关键字的总结
先说结论: self 和 __CLASS__,都是对当前类的静态引用,取决于定义当前方法所在的类.也就是说,self 写在哪个类里面, 它引用的就是谁.$this 指向的是实际调用时的对象,也就是说, ...
- [BZOJ2588]Count on a tree(LCA+主席树)
题面 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中lastans是上一个询问的答案,初始为0,即第一个询问 ...