【DevOps系列】Docker数据卷(volume)详解

【DevOps系列】Docker数据卷(volume)详解

文章目录

  • 【DevOps系列】Docker数据卷(volume)详解
    • 一、概述
    • 二、数据卷
    • 三、为什么使用数据卷volume
      • 数据卷的作用:
      • 数据卷的特点:
    • 四、数据卷volume基本操作
      • 4.1 创建数据卷
      • 4.2 查看数据卷
      • 4.3 查看数据卷详细信息
      • 4.4 数据卷删除
    • 五、数据卷的使用
      • 5.1 先创建数据卷在挂载
      • 5.2 创建容器使用数据卷
      • 5.3 直接挂载宿主机目录
        • 1). mount方式创建容器命令如下:
        • 2). -v方式创建命令如下:
      • 5.4 只读数据卷
        • 1). mount方式创建容器命令如下:
        • 2). -v方式创建(可以理解为简写方式):
      • 5.5 数据卷容器
        • 1).新建数据卷容器
        • 2).新建一个容器来使用数据卷容器
      • 5.6 数据卷容器
        • 1).数据卷的备份
        • 2).数据还原

一、概述

Docker的镜像是由多个只读的文件系统叠加在一起形成。启动一个容器的时候,docker会加载只读层并在只读层的上面(栈顶)增加一个读写层。如果需要修改只读层的文件,那么这个文件层需要复制到读写层。该文件的只读版本还在,只是被上面写层的文件副本隐藏。当删除docker或重新启动时,之前的更改文件会消失。在Docker中,只读层与读写层的组合称为Union File System(联合文件系统)。Docker将运用与运行的环境打包形成容器运行,Docker容器产生的数据,如果不通过docker commits生成新的镜像,使得数据做为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有,为了能保存数据在Docker,Docker设计了一个机制既(Volume)

为了很好的实现数据保存和数据共享,Docker提出了Volume这个概念,就是绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上,这个目录或文件称为数据卷

二、数据卷

在这里插入图片描述

数据卷(Volume)是一个可供一个或多个容器使用的特殊目录,它绕过UFS,可以提供以下一些特性:

  • 数据卷可在容器之间共享或重用数据。
  • 卷中的更改可以直接生效。
  • 数据卷中的更改不会包含在镜像的更新中。
  • 数据卷的生命周期一直持续到没有容器使用它为止。

三、为什么使用数据卷volume

卷是在一个或多个容器内被选定的目录,为docker提供持久化数据或共享数据,是docker存储容器生成和使用的数据的首选机制。对卷的修改会直接生效,当提交或创建镜像时,卷不被包括在镜像中。

数据卷的作用:

  1. 持久化数据
  2. 共享数据

数据卷的特点:

  1. 即使生效
  2. 卷的更新不影响镜像
  3. 即使容器停止或被删除,卷默认也一致存在

四、数据卷volume基本操作

4.1 创建数据卷

使用如下命令可以创建一个数据卷

  • docker volume create 卷名
docker volume create db_vol

使用这种方式创建的数据卷可也被docker volume管理,如查看,删除等。

4.2 查看数据卷

docker volume ls

4.3 查看数据卷详细信息

  • docker volume inspect 卷名
docker volume inspect db_vol

4.4 数据卷删除

  • docker volume rm 卷名
docker volume rm db_vol

五、数据卷的使用

5.1 先创建数据卷在挂载

docker volume create data_volume

5.2 创建容器使用数据卷

docker run -d -it \
> --name volumetest \
> --mount source=data-vol,target=/data \
> ubuntu

注:加了“\”意为将最后的回车换行给注释了,系统理解为命令还没有结束,因而是继续等待用户进行输入,直到读到结束符。

简写方式(-v):

docker run -d -it \
> --name volumetest \
> -v data-vol:/data \
> ubuntu

5.3 直接挂载宿主机目录

通过这种方式不需要事先创建数据卷,直接指定宿主机的一个目录挂载到容器中,但宿主机中对应的目录要存在,否则会报一下异常

docker: Error response from daemon: invalid mount config for type "bind": bind source path does not exist: /root/vdata.

1). mount方式创建容器命令如下:

docker run -d -it \
> --name volumetest02 \
> --mount type=bind,source=/home/lisen/vdata,target=/vdata \
> ubuntu

2). -v方式创建命令如下:

docker run -dit --name volumetest02 -v /home/lisen/vdata:/vdata ubuntu

5.4 只读数据卷

创建的数据卷默认是可以读写的,这适合于绝大多数情况,也可以将卷设置为只读的

1). mount方式创建容器命令如下:

docker run -d -it \
> --name volumetest02 \
> --mount type=bind,source=/home/lisen/vdata,target=/vdata,ro \
> ubuntu

2). -v方式创建(可以理解为简写方式):

docker run -dit --name volumetest02 -v /home/lisen/vdata:/vdata:ro ubuntu

数据卷的主要作用是数据持久化和数据共享,所以一般不用只读方式。

5.5 数据卷容器

用途:数据卷容器主要目的是多个容器之间共享一些持续更新的数据,数据卷容器也是一个容器,专门提供数据卷给其他容器挂载。

1).新建数据卷容器

docker run -it -d --name data-volume-con -v /data ubuntu

2).新建一个容器来使用数据卷容器

docker run -it -d --name db-con-1 --volumes-from data-volume-con ubuntu

参数–volumes-from用于指定数据卷容器;进入新建的容器,在挂载的目录中(data目录,既创建数据卷容器时指定的目录)新建一个测试文件。

5.6 数据卷容器

1).数据卷的备份

创建一个容器,该容器既挂载了需要备份的数据卷(有volumes-from参数指定),又挂载了用来备份数据的数据卷(可以用-v参数指定),通过tar压缩命令,将volumes-from参数指定的需要备份的数据卷,压缩到用来备份的数据卷中(等同于保存到了宿主机对应的目录中)。

docker run --rm \
> --name backup \
> --volumes-from data-volume-con \
> -v /host-backup:/con-backup \
> ubuntu tar cvf /con-backup/backup200201.tar /data
  • –rm 参数,指定了创建的容器为临时容器,运行完后将自动删除,我们只是借助这个容器完成备份,备份完成后数据存放于宿主机中,容器自然也就不需要了。
  • –volumes-from 参数,指定了需要备份的数据卷容器
  • -v 参数,指定了用来备份数据的数据卷,/host-backup为宿主机目录,/con-backup为对应的容器目录
  • tar 命令完成数据压缩,注意压缩的源为容器目录,因为压缩命令实际上实在容器中执行的,确切的说是在backup容器中执行(–name参数指定的),压缩完成后自然也会保存到宿主机目录。

2).数据还原

新建一个数据卷容器,这个容器作为存放还原数据的容器。

docker run -it --name data-volume-con2 -v /data ubuntu

创建一个临时容器,既挂载了用于存放还原数据的数据卷容器,又挂载了存有备份数据的数据卷,然后使用tar命令,将备份的数据解压到存放还原数据的数据卷中。

  • –rm 参数,请参见“数据备份”部分的解释
  • –volumes-from 参数,指定用于保存还原数据的容器
  • -v 参数, 用于指定存有备份数据的数据卷,/host-backup是宿主机上用来存放备份数据的目录,将其挂载到容器的/container-back目录,tar命令通过/container-back

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/109553.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序中如何查看指定会员的付款记录

在小程序中,我们可以通过一些简单的步骤来查看指定会员的付款记录。下面是具体的操作流程: 1. 找到指定的会员卡。在管理员后台->会员管理处,找到需要查看付款记录的会员卡。也支持对会员卡按卡号、手机号和等级进行搜索。 2. 查看会员卡…

测试平台前端部署

这里写目录标题 一、前端代码打包1、打包命令2、打包完成后,将dist文件夹拷贝到nginx文件夹中3、重新编写default.conf4、将之前启动的容器进行停止并且删除,再重新创建容器5、制作Dockerfile二、编写Dockerfile一、前端代码打包 1、打包命令 npm run build2、打包完成后,…

【C语言】指针和数组笔试题解析

指针是C语言的灵魂,他的玩法多种多样,这篇文章带来指针的笔试题详解,可以帮助我们更好的理解与巩固指针的知识 目录 预备知识:题目: 题目比较多,但切记戒骄戒躁,保持空杯心态,相信看…

高级深入--day23

处理给规范的文字 处理的大多数文字最好都是比较干净、格式规范的。格式规范的文字通常可以满足一些需求,通常格式规范的文字具有以下特点: 使用一个标准字体(不包含手写体、草书,或者十分“花哨的”字体)即使被复印或拍照,字体还是很清晰,…

OpenCV_CUDA_VS编译安装

一、OpenCV 我这里是下载的OpenCV4.5.4,但是不知道到在vs里面build时一直报错,后面换了4.7.0的版本测试,安装成功。 Release OpenCV 4.5.4 opencv/opencv GitHub 这个里面有官方预编译好的OpenCV库,可以直接食用。 扩展包&am…

ora.ai:基于GPT4的自定义AI聊天机器人平台

【产品介绍】​ 名称​ ora.ai​ 具体描述​ ora.ai是一个让你在几分钟内创建自定义AI聊天机器人的网站,你可以在ora.ai上使用超过35万个由用户创建的AI人物,探索、混合和互动。你可以轻松地生成视觉效果,比如你最喜欢的城市的图…

JavaScript中的Generator函数及其使用方式

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ Generator函数⭐ 创建Generator函数⭐ 调用Generator函数⭐ Generator函数的应用1. 异步编程2. 生成器(Generator) ⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧…

14. 线性代数 - 线性方程组

文章目录 线性方程组矩阵行列式全排列和逆序数N阶行列式(非)齐次线性方程Hi,大家好。我是茶桁。 结束了「微积分」部分的学习之后我们稍作休整,今天正式开始另外一部分:「线性代数」的学习。小伙伴们放松完回来要开始紧张起来了。 我们之前说过,不管是哪一个工程学科,根…

pytorch安装(windows)

1. torch 简介 torch总共分为两个版本,GPU版和CPU版,CPU版安装非常简单,直接pip install 安装即可,在此详细介绍 GPU 版的安装方式。 GPU 版安装需要注意以下几个地方,需要进行匹配才能安装上,否则即便安…

HTTP协议的基本概念与理解!

一、什么是HTTP协议 HTTP(超文本传输协议)是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷…

wait函数() waitpid函数()

wait函数 /*#include <sys/types.h>#include <sys/wait.h>pid_t wait(int *wstatus);功能&#xff1a;等待任意一个子进程结束&#xff0c;如果子进程结束或者中断了&#xff0c;那么就回收他的资源参数&#xff1a; wstatus进程退出时的状态信息&#xff0c;传入…

5.docker可视化工具(Portainer)

本文操作&#xff0c;在 192.168.204.102 机器执行 安装最新版 portainer&#xff0c;请使用 portainer/portainer-ce 镜像。图片来源&#xff1a;https://hub.docker.com/r/portainer/portainer。   来这里可查看最新版本&#xff1a;https://github.com/portainer/p…