Docker容器中数据两种持久化存储方式:卷和挂载宿主目录
镜像使用的是分层存储,容器也是如此。每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为容器存储层。容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。
按照Docker最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。
(1).卷(volumes):是宿主机器的文件系统的一部分,由Docker进行管理(在Linux,存储于/var/lib/docker/volumes/)。非Docker程序不应该去修改这些文件。Docker推荐使用卷进行持久化数据。卷可支持卷驱动(volume drivers),该驱动允许用户将数据存储到远程主机或云服务商(cloud provider)或其它。没有名字的卷叫匿名卷(anonymous volume),有名字的卷叫命名卷(named volume)。匿名卷没有明确的名字,当被初始化时,会被赋予一个随机名字。
卷是一个可供一个或多个容器使用的特殊目录,它绕过UFS,可以提供很多有用的特性:A.卷可以在容器之间共享和重用;B.对卷的修改会立马生效;C.对卷的更新,不会影响镜像;D.卷默认会一直存在,即使容器被删除。
卷的使用,类似于Linux下对目录或文件进行mount,镜像中的被指定为挂载点的目录中的文件会复制到卷中(仅卷为空时会复制)。卷是被设计用来持久化数据的,它的生命周期独立于容器,Docker不会在容器被删除后自动删除卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的卷。
(2).挂载宿主目录(bind mounts, 绑定挂载):通过将宿主机器的路径挂载到容器里的这种方式,从而数据持久化,因此绑定挂载可将数据存储在宿主机器的文件系统的任何地方。非Docker程序可修改这些文件。绑定挂载是Docker早期就存在的,相比起卷,绑定挂载十分简单明了。在开发Docker应用时,应使用命名卷(named volume)代替绑定挂载,因为用户不能对绑定挂载进行Docker CLI(command line interface, 命令行界面)命令操作。
绑定挂载常用于:A.同步配置文件,如:将宿主主机的DNS配置文件(/etc/resolv.conf)同步至容器中;B.在开发程序时,将源代码或Artifact同步至容器中。这种用法与Vagrant类似。
卷相关操作命令如下:
docker volume create vol1 # 创建一个卷,如卷名为vol1
docker volume ls # 查看所有的卷
docker volume inspect vol1 # 查看指定卷的信息,如卷vol1
# 启动一个挂载卷的容器,如将卷名为"vol1"挂载到容器的/home/fengbingchun目录;新建的容器名为"yyyy"; -P,随机端口映射,容器内部端口随机映射到主机的端口
docker run -it -P --name yyyy --mount source=vol1,target=/home/fengbingchun fengbingchun/ubuntu:16.04 /bin/bash
docker inspect yyyy # 查看容器中卷的具体信息,卷的信息在"Mounts"字段内,"yyyy"为容器名
docker volume rm vol1 # 删除卷,如卷名为"vol1",需要卷"vol1"没有被任何容器使用时才能删除
docker volume prune # 删除所有没有被使用的卷
挂载主机目录相关操作命令如下:
# 挂载一个本地主机的目录到容器中去,新建的容器名为"test"; -P,随机端口映射,容器内部端口随机映射到主机的端口;
# "/home/GitHub"为本地主机目录,本地目录的路径必须是绝对路径;"/home/fengbingchun"为挂载到容器此目录;Docker挂载主机目录的默认权限是读写
docker run -it -P --name test --mount type=bind,source=/home/GitHub,target=/home/fengbingchun fengbingchun/ubuntu:16.04 /bin/bash # linux
docker run -it -P --name test --mount type=bind,source=e:\GitCode,target=/home/fengbingchun fengbingchun/ubuntu:16.04 /bin/bash # windows
docker inspect yyyy # 查看容器中挂载主机目录的具体信息,挂载主机目录的配置信息在"Mounts"字段内,"yyyy"为容器名
Docker容器中数据两种持久化存储方式:卷和挂载宿主目录相关推荐
- java中创建两种线程的方式_java中创建线程的两种方式有什么区别?
*** 一.创建线程 1.继承Thread类 定义类继承Thread, 重写run()方法, 将线程中要执行的代码写在run()方法中 创建该类对象, 调用start()方法就可以开启一条新线程, 新 ...
- Redis详解之-事件订阅和持久化存储方式(RDB和AOF)(二)
转载:https://blog.csdn.net/u010963948/article/details/78881057 对以前的内容进行一下总结和复习. 了解Redis的基本参数配置和使用. 了解事 ...
- Redis中两种持久化机制RDB和AOF
redis是一个内存数据库,数据保存在内存中,但是我们都知道内存的数据变化是很快的,也容易发生丢失.幸好Redis还为我们提供了持久化的机制,分别是RDB(Redis DataBase)和AOF(Ap ...
- Redis 中两种持久化机制详解
Redis 持久化机制(快照.AOF) 快照 (Snapshot) 1. 客户端方式之 BGSAVE(多线程执行) 2. 客户端方式之 SAVE(单线程执行) 3. 服务器配置方式之 配置快照触发条件 ...
- Linux中的Docker容器的数据卷
一.数据卷的概念 1.数据卷是宿主机中的一个目录或者文件 2.当容器目录和数据卷目录绑定后,对方的修改会立即同步 3.一个数据卷可以被多个容器同时挂载 4.一个容器也可以挂载多个数据卷 二.数据卷的作 ...
- 批量插入数据库语句java_java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)...
java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码) 发布于 2020-7-22| 复制链接 本文通过实例代码给大家分享了MyBatis批量插入数据到Oracle数据库 ...
- 如何在Docker容器中运行Docker [3种方法]
在本博客中,我将向您介绍在docker中运行docker所需的三种不同方法. Docker In Docker的用处 dockerIndocker的一个潜在用处是CI管道,在代码成功构建后,您需要在其 ...
- C语言学习笔记-----scanf【通过键盘将数据输入到变量中】(两种用法)
C语言学习笔记-----scanf[通过键盘将数据输入到变量中](两种用法) 用法一:scanf("输入控制符",输入参数): 功能: 将从键盘输入的字符转化为输入控制符所规定格式 ...
- docker 容器共享数据_如何在Docker容器之间共享数据
docker 容器共享数据 介绍 (Introduction) Docker is a popular containerization tool used to provide software a ...
最新文章
- Tor 出口节点将运行在图书馆的电脑上
- 一个不错的权限管理模块设计案例
- 搜索引擎是如何判断网站质量的?
- CCNA-(9)-思科交换机特点
- mysql+enable+sql+log_CentOS7下利用rsyslog+loganalyzer配置日志服务器及Linux和windows客户端配置...
- VTK:几何对象之OpenVRCube
- Git强制覆盖还原本地救火命令
- nodejs里socket.on和socket.once的单步调试
- 66 http的无状态协议和cookie概述
- linux路由器实际配置案例
- matlab表格三维柱状图,excel制作四维数据表格-excel三维柱形图 ,请问如何根据excel表格中的数据......
- 推荐:年度巨献:《Ubuntu桌面生存指南》(作者:ghosert)
- win10更新后C盘空间变小解决方法
- (java毕业设计)基于java汽车租赁管理系统源码
- 计算机科学 期刊 模板,计算机学报投稿模板.doc
- 关于固态硬盘SSD的4K对齐
- SpringSecurity---细粒度的权限控制
- 队列的应用--火车车厢重排列
- Android 中关与类转换异常的问题。
- 4g网络什么时候淘汰_4G网络即将被淘汰?4G手机:我还没过时
热门文章
- Open3D DbScanClustering聚类算法
- Python、Matplot的subplot实现一行3列的子图绘制,并添加背景色
- 机器学习(2)特征提取1 -- 字典特征提取
- java string改变的影响_为什么Java的string类要设成immutable(不可变的)
- opencv中image watch插件安装与使用教程
- 电话号码正则表达式键盘弹起验证
- 在Ubuntu 14.04.3 64bit上安装照片编辑软件Fotoxx 15.10
- Linux 下获取本机所有网卡 以及 网卡对应ip 列表
- 设计模式 之美 -- 原型模式
- MQTT Qos类型解释