Docker 数据卷简介

为什么用数据卷

  • 宿主机无法直接访问容器中的文件
  • 容器中的文件没有持久化,导致容器删除后,文件数据也随之消失
  • 容器之间也无法直接访问互相的文件

为解决这些问题,docker加入了数据卷(volumes)机制,能很好解决上面问题,以实现:

  • 容器与主机之间、容器与容器之间共享文件
  • 容器中数据的持久化
  • 将容器中的数据备份、迁移、恢复等

数据卷的特点

  • 数据卷存在于宿主机的文件系统中,独立于容器,和容器的生命周期是分离的。
  • 数据卷可以目录也可以是文件,容器可以利用数据卷与宿主机进行数据共享,实现了容器间的数据共享和交换。
  • 容器启动初始化时,如果容器使用的镜像包含了数据,这些数据会拷贝到数据卷中。
  • 容器对数据卷的修改是实时进行的。
  • 数据卷的变化不会影响镜像的更新。数据卷是独立于联合文件系统,镜像是基于联合文件系统。镜像与数据卷之间不会有相互影响。

Docker 数据卷管理

Docker挂载容器数据卷的三种方式

  • bind mounts:将宿主机上的一个文件或目录被挂载到容器上。
  • volumes:由Docker创建和管理。使用docker volume命令管理
  • tmpfs mounts:tmpfs 是一种基于内存的临时文件系统。tmpfs mounts 数据不会存储在磁盘上。

 bind mounts方式挂载数据卷

利用  docker run/create的参数为容器挂载数据卷

方式一: -v, --volume参数

  • -v 宿主机文件或文件夹路径:容器中的文件或者文件夹路径

方式二:--mount参数

  • --mount type=bind, src=宿主机文件或文件夹路径, dst=容器中的文件或者文件夹路径

注意:src指定的文件和路径必须提前创建或存在

方式一:命令演示

把宿主机上 root 目录下的 volume_dir  绑定到 到容器的c_dir下  (使用 -v 挂载 宿主机上的文件/文件夹不存在的话会自动创建

docker run -dti -v /root/volume_dir:/root/c_dir centos

在容器内创建一个文件

docker exec ab2 touch /root/c_dir/text.txt  

这时在宿主机的 volume_dir 目录下可以查看

方式二:命令演示

把宿主机上 root 目录下的 mount_dir  绑定到 到容器的c_dir2下  (使用 -mount 挂载 宿主机上的文件/文件夹不存在的话会报错

docker run -dti --mount type=bind,src=/root/mount_dir,dst=/root/c_dir2 centos
docker exec 5f7c touch /root/c_dir2/text.txt
ls

volumes方式挂载数据卷

利用docker run/create为容器挂载数据卷

方式一: -v, --volume参数

  • -v VOLUME-NAME:容器中的文件或者文件夹路径

方式二:--mount 参数

  • --mount type=volume, src=VOLUME-NAME, dst=容器中的文件或者文件夹路径

volume对象管理

  • docker volume 命令管理volume数据卷对象
  • docker volume create 创建数据卷对象
  • docker volume inspect 查看数据卷详细信息
  • docker volume ls 查看已创建的数据卷对象
  • docker volume prune 删除未被使用的数据卷对象
  • docker volume rm 删除一个或多个数据卷对象

查看 docker 中所有的数据卷

docker volume ls

方式一:命令演示 (指定了一个docker 中不存在的数据卷,会自动的创建)

docker run -dti -v volume_test:/root/c_dir centos
docker volume ls

方式二:命令演示(指定了一个docker 中不存在的数据卷,会自动的创建

docker run -dti --mount type=volume,src=volume-test2,dst=/root/c_dir centos

tmpfs mount方式挂载数据卷

利用docker run/create为容器挂载数据卷

  • --mount type=tmpfs, dst=PATH

命令演示

docker run -dti --mount type=tmpfs,dst=/root/c_dir centos
docker volume ls

 共享其他容器的数据卷-数据卷容器

利用docker run/create 的--volumes-from参数指定数据卷容器

  • docker run/create --volumes-from CONTAINER
docker run -dti --mount type=volume,src=volume,dst=/root/c_dir centos
docker run -dti --volumes-from 5fe centos
docker volume ls
docker volume inspect volume
cd /var/lib/docker/volumes/volume/_data

# 在两个容器中创建文件
docker exec 5fe touch /root/c_dir/text.txt
docker exec 5fee24 touch /root/c_dir/new_text.txt
ls

可以发现他们是共用一个数据卷的

Docker 数据卷注意事项

Docker的数据卷更多会是使用volumes方式来进行使用。使用时需注意:

  • 如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中。
  • 如果挂载一个非空的数据卷到容器中的一个目录中(这个目录为空),那么容器中的目录中会显示数据卷中的数据。如果原来容器中的目录中有数据,那么这些原始数据会被隐藏掉(隐藏掉数据卷中的原始数据,只显示容器本身的数据)。
  • 这两个规则都非常重要,灵活利用第一个规则可以帮助我们初始化数据卷中的内容。掌握第二个规则可以保证挂载数据卷后的数据总是你期望的结果。

重点掌握

  • 数据卷特征和简介
  • mount方式绑定数据卷
  • 数据卷挂载的三种形式
  • 数据卷使用的注意事项

Docker 核心技术之数据管理的更多相关文章

  1. Docker容器的数据管理

    Docker容器的数据管理 Docker容器的数据管理 什么是数据卷(Data Volume)? 数据卷是经过特殊设计的目录,可以绕过联合文件系统(UFS),为一个或者多个容器提供访问 数据卷设计的目 ...

  2. Docker 核心技术与实现原理

    提到虚拟化技术,我们首先想到的一定是 Docker,经过四年的快速发展 Docker 已经成为了很多公司的标配,也不再是一个只能在开发阶段使用的玩具了.作为在生产环境中广泛应用的产品,Docker 有 ...

  3. Docker核心技术

    Docker核心技术 1.cgroup 即controller group,其重要概念是子系统,首先挂载子系统,然后才有control group.例如cpu子系统,挂载至系统之后,创建一个cgrou ...

  4. Docker学习(14) Docker容器的数据管理

    Docker容器的数据管理 Docker容器的数据卷 重要: Docker的数据卷容器 Docker数据卷的备份和还原

  5. 深入浅出Docker(一):Docker核心技术预览

    Docker是PaaS供应商dotCloud开源的一个基于LXC 的高级容器引擎,源代码托管在 GitHub 上, 基于Go语言开发并遵从Apache 2.0协议开源.Docker提供了一种在安全.可 ...

  6. Docker入门之五数据管理

    在Docker使用过程中,需要对数据进行持久化或需要在多个容器之间进行数据共享,就会涉及容器的数据管理操作.主要有两种方式:1.数据卷 2.数据卷容器. 一.数据卷 数据卷是一个可供容器使用的特殊目录 ...

  7. 后端技术杂谈10:Docker 核心技术与实现原理

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  8. docker核心技术(2)

    鸟瞰容器生态系统 一谈到容器,大家都会想到 Docker. Docker 现在几乎是容器的代名词.确实,是 Docker 将容器技术发扬光大.同时,大家也需要知道围绕 Docker 还有一个生态系统. ...

  9. 【转】Docker 核心技术与实现原理

    转自:https://draveness.me/docker 提到虚拟化技术,我们首先想到的一定是 Docker,经过四年的快速发展 Docker 已经成为了很多公司的标配,也不再是一个只能在开发阶段 ...

随机推荐

  1. 【TensorFlow篇】--Tensorflow框架可视化之Tensorboard

    一.前述 TensorBoard是tensorFlow中的可视化界面,可以清楚的看到数据的流向以及各种参数的变化,本文基于一个案例讲解TensorBoard的用法. 二.代码 设计一个MLP多层神经网 ...

  2. Python3+unitest自动化测试初探(中篇)

    目录 6.生成测试报告 7.编写邮件发送工具 8.发送邮件 发布 0 86 编辑 删除 Python3+unitest自动化测试初探(中篇)(2019-04-18 01:41) 发布 3 245 编辑 ...

  3. 前端笔记之JavaScript面向对象(一)Object&函数上下文&构造函数&原型链

    一.对象(Object) 1.1 认识对象 对象在JS中狭义对象.广义对象两种. 广义:相当于宏观概念,是狭义内容的升华,高度的提升,范围的拓展.狭义:相当于微观概念,什么是“狭”?因为内容狭隘具体, ...

  4. 利用shell脚本生成CHANGELOG.md(包含git提交规范)

    前言 我们经常看到github上面有很多CHANGELOG.MD包含版本的更新信息,如果我们的git提交能遵循一定的规范,那么使用gitlog就能很方便的生成它 生成结果  shell脚本 http ...

  5. [深度概念]·K-Fold 交叉验证 (Cross-Validation)的理解与应用

    K-Fold 交叉验证 (Cross-Validation)的理解与应用 我的网站 1.K-Fold 交叉验证概念 在机器学习建模过程中,通行的做法通常是将数据分为训练集和测试集.测试集是与训练独立的 ...

  6. SLAM+语音机器人DIY系列:(一)Linux基础——2.安装Linux发行版ubuntu系统

    摘要 由于机器人SLAM.自动导航.语音交互这一系列算法都在机器人操作系统ROS中有很好的支持,所以后续的章节中都会使用ROS来组织构建代码:而ROS又是安装在Linux发行版ubuntu系统之上的, ...

  7. 【转载】解析 java 按值传递还是按引用传递

    原文链接  说明: (1):“在Java里面参数传递都是按值传递”这句话的意思是:按值传递是传递的值的拷贝,按引用传递其实传递的是引用的地址值,所以统称按值传递. (2):在Java里面只有基本类型和 ...

  8. svn 卡死住,关闭后,用CleanUp报错解决

    一.问题描述: 经常用SVN的人都知道,有时候更新文件更新着更新一般,突然卡顿住,死在那边动都不动出现提示:svn cleanup failed–previous operation has not ...

  9. eclipse导入java工程

    1)File下的import选项 2)点击General,选择Existing Projects into Workspace,点击next 3)点击Browse,在弹出的窗口中选择导入工程所在的文件 ...

  10. vue 模板template

    入门 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8& ...