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中,要想实现数据的持久化(所谓 ...
随机推荐
- shouyexinlianjie
http://7xj7xs.com1.z0.glb.clouddn.com/trail_1.mp4
- 微信小程序 form 组件
表单组件:将组件内用户输入的 <switch> <input> <checkbox> <slider> <radio> <picker ...
- CMAK找不到相关编译器的问题
本机安装了vs2019,在编译vulkansdk所带的samples时,遇到 错误提示: CMake Error at CMakeLists.txt: (project): Generator Vis ...
- RAC容灾演练
RAC容灾演练:在节点一进行验证:步骤 操作命令关闭步骤 检测RAC集群资源状态 crsctl status resource -t 关闭监听 srvctl stop listener -n < ...
- 简单三步同步你的 VSCode 用户配置
https://www.cnblogs.com/knight-errant/p/10444777.html 设备重装,换设备,VSCode 又要重新配置了?不不不,简单三步,让你的 VSCode 配置 ...
- 二十四、python中sys模块
'''1.sys.argv:命令行参数List,第一个元素是程序本身路径''' import sys print (sys.argv)-------------------------------[' ...
- PriorityBlockingQueue 源码分析
PriorityBlockingQueue PriorityBlockingQueue 能解决什么问题?什么时候使用 PriorityBlockingQueue? 1)PriorityBlocking ...
- leetcode 62. 不同路径(C++)
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为“Finish”). 问总共有多 ...
- Powershell 音乐播放
目录 目录 前言 systemwindowsmediamediaplayer 前言 Powershell抱着.NET的大腿,与生俱来了许多非常便捷的功能.例如--音乐的自动播放 system.wind ...
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_07 缓冲流_5_BufferedWriter_字符缓冲输出流
使用newLine来换行 同样的效果 println的源码里面其实就用的就是newLine()