Docker数据卷操作

news2024/11/23 23:40:23

1. 为什么使用数据卷

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

总结为两个作用:

  • 持久化数据
  • 共享数据

 

一个特点:

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

容器示意图

 

2. 数据卷基本操作

2.1 创建数据卷

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

lisen@ubuntu:~$ sudo docker volume create db_vol
db_vol

使用这种方式创建的数据卷可也被docker volume管理,如查看,删除等。新建的数据卷被保存在/var/lib/docker/volumes目录下。

2.2 查看数据卷

使用一下命令可以查看数据卷

lisen@ubuntu:~$ sudo docker volume ls
DRIVER              VOLUME NAME
local               db_vol

2.3 查看数据卷详细信息

docker volume inspect 命令以json的格式显示数据卷的详细信息

lisen@ubuntu:~$ sudo docker volume inspect db_vol
[
    {
        "CreatedAt": "2020-02-01T11:33:52+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/db_vol/_data",
        "Name": "db_vol",
        "Options": {},
        "Scope": "local"
    }
]
lisen@ubuntu:~$

2.4 数据卷删除

lisen@ubuntu:~$ sudo docker volume rm db_vol
db_vol
lisen@ubuntu:~$

3. 数据卷的使用

3.1 先创建数据卷再挂载

1)在使用数据卷前先创建一个,docker volume create 数据卷名称

lisen@ubuntu:~$ sudo docker volume create data-vol
data-vol

2)创建容器使用数据卷(mount)

lisen@ubuntu:~$ sudo docker run -d -it \
> --name volumetest \
> --mount source=data-vol,target=/data \
> ubuntu
1ab0c61bf24c52aeb0f3d0764f8743b9579eeb3a3b79a12a04cfa3ecf1bd50a9

注:加了“\”意为将最后的回车换行给注释了,系统理解为命令还没有结束,因而是继续等待用户进行输入,直到读到结束符,如回车,1ab0c61bf24c52aeb0f3d0764f8743b9579eeb3a3b79a12a04cfa3ecf1bd50a9
是生成的容器id,--mount 后没有带type参数,默认为 volume

简写方式(-v):

lisen@ubuntu:~$ sudo docker run -d -it \
> --name volumetest \
> -v data-vol:/data \
> ubuntu

3)创建成功后切换到宿主机的 /var/lib/docker/volumes/data-vol/_data目录(如果没有权限,先切换为root用户), 创建一个用与测试的文件,数据卷挂载成功,则在容器中也可以看到这个文件。

root@ubuntu:/var/lib/docker/volumes/data-vol/_data# echo "hello volume" > test.txt
root@ubuntu:/var/lib/docker/volumes/data-vol/_data# ls
test.txt

为方便对比,新打开一个命令终端进入容器,查看在宿主机上创建的文件在容器的对应目录中是否存在

root@ubuntu:/# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
1ab0c61bf24c        ubuntu              "/bin/bash"         21 minutes ago      Up 21 minutes                           volumetest
root@ubuntu:/# docker exec -it 1ab0 /bin/bash
root@1ab0c61bf24c:/# ls -l /data
total 4
-rw-r--r-- 1 root root 13 Feb  1 04:30 test.txt
root@1ab0c61bf24c:/# cat /data/test.txt
hello volume
root@1ab0c61bf24c:/#

4)在容器中对测试文件进行修改,然后来到宿主机的对应目录,验证文件是否修改。

root@1ab0c61bf24c:/# echo "update in container" >> /data/test.txt
root@1ab0c61bf24c:/# cat /data/test.txt
hello volume
update in container
root@1ab0c61bf24c:/#

此时容器中的文件已经改变,到宿主机的对应目录中进行查看

root@ubuntu:/var/lib/docker/volumes/data-vol/_data# cat test.txt
hello volume
update in container

3.2 直接挂载宿主机目录

通过这种方式不需要事先创建数据卷,直接指定宿主机的一个目录挂载到容器中,但宿主机中对应的目录要存在,否则会报类似于下面的异常:
docker: Error response from daemon: invalid mount config for type "bind": bind source path does not exist: /root/vdata.
1)mount方式创建容器命令如下:

root@ubuntu:/# mkdir /home/lisen/vdata
root@ubuntu:/# docker run -d -it \
> --name volumetest02 \
> --mount type=bind,source=/home/lisen/vdata,target=/vdata \
> ubuntu
530677db6f3d9e94057e8acb389afe3d514e4df3ac4418e80eaa08567a926fa0

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

root@ubuntu:/# docker run -dit --name volumetest02 -v /home/lisen/vdata:/vdata ubuntu
9de51fd527dc81ddcadf47fd5b61a6969b884493b0fac710f4a2d83efbfccb33

可以使用上例类似的方面来对数据卷进行验证。具体过程不再详细描述。

注:建议使用3.1所示的方式使用数据卷,直接挂载目录的方式不被docker volume管理。

3.3 只读数据卷

创建的数据卷默认是可以读写的,这适合于绝大多数情况,也可以将卷设置为只读的,如下所示
1)mount方式创建容器命令如下:

root@ubuntu:/# mkdir /home/lisen/vdata
root@ubuntu:/# docker run -d -it \
> --name volumetest02 \
> --mount type=bind,source=/home/lisen/vdata,target=/vdata,ro \
> ubuntu
530677db6f3d9e94057e8acb389afe3d514e4df3ac4418e80eaa08567a926fa0

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

root@ubuntu:/# docker run -dit --name volumetest02 -v /home/lisen/vdata:/vdata:ro ubuntu
9de51fd527dc81ddcadf47fd5b61a6969b884493b0fac710f4a2d83efbfccb33

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

4. 数据卷容器

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

4.1 新建数据卷容器

root@ubuntu:/# docker run -it -d --name data-volume-con -v /data ubuntu
26552f43385236a8e41ecd727ad3e4ccf9da6a99bcc5ef0fa49a81c17c49b9e5

26552f4338... 是创建的数据卷容器Id

4.2 新建一个容器来使用数据卷容器

root@ubuntu:/# docker run -it -d --name db-con-1 --volumes-from data-volume-con ubuntu
263999d5aa43dac11c619cc1f644b736339031c459644b68cab8ce044a66ab53

参数--volumes-from用于指定数据卷容器

进入新建的容器,在挂载的目录中(data目录,即创建数据卷容器时指定的目录)新建一个测试文件。

root@ubuntu:/# docker exec -it db-con-1 /bin/bash
root@263999d5aa43:/# ls
bin   data  etc   lib    media  opt   root  sbin  sys  usr
boot  dev   home  lib64  mnt    proc  run   srv   tmp  var
root@263999d5aa43:/# echo "test volume container" > /data/test.txt
root@263999d5aa43:/# ls /data
test.txt
root@263999d5aa43:/# cat /data/test.txt
test volume container
root@263999d5aa43:/#

然后来到进入数据卷容器,验证刚才新建的测试文件在数据卷容器中是否存在:

root@ubuntu:/# docker exec -it data-volume-con /bin/bash
root@26552f433852:/# ls
bin   data  etc   lib    media  opt   root  sbin  sys  usr
boot  dev   home  lib64  mnt    proc  run   srv   tmp  var
root@26552f433852:/# cd data
root@26552f433852:/data# ls
test.txt
root@26552f433852:/data# cat test.txt
test volume container
root@26552f433852:/data#

4.3 数据卷容器的备份与恢复

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

我们将刚才创建的数据卷备份

root@ubuntu:/# docker run --rm \
> --name backup \
> --volumes-from data-volume-con \
> -v /host-backup:/con-backup \
> ubuntu tar cvf /con-backup/backup200201.tar /data
/data/
/data/test.txt
tar: Removing leading `/' from member names
root@ubuntu:/# ls
bin   dev       etc   host-backup  lib    lost+found  mnt  proc  run   snap  sys  usr  vmlinuz
boot  dump.rdb  home  initrd.img   lib64  media       opt  root  sbin  srv   tmp  var
root@ubuntu:/#
  • --rm 参数,指定了创建的容器为临时容器,运行完后将自动删除,我们只是借助这个容器完成备份,备份完成后数据存放于宿主机中,容器自然也就不需要了。
  • --volumes-from 参数,指定了需要备份的数据卷容器
  • -v 参数,指定了用来备份数据的数据卷,/host-backup为宿主机目录,/con-backup为对应的容器目录
  • tar 命令完成数据压缩,注意压缩的源为容器目录,因为压缩命令实际上实在容器中执行的,确切的说是在backup容器中执行(--name参数指定的),压缩完成后自然也会保存到宿主机目录。

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

root@ubuntu:/# docker run -it --name data-volume-con2 -v /data ubuntu

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

root@ubuntu:/# docker run --rm \
> --name huanyuan \
> --volumes-from data-volume-con2 \
> -v /host-backup:/container-back \
> ubuntu tar xvf /container-back/backup200201.tar -C /data
data/
data/test.txt
root@ubuntu:/#
  • --rm 参数,请参见“数据备份”部分的解释
  • --volumes-from 参数,指定用于保存还原数据的容器
  • -v 参数, 用于指定存有备份数据的数据卷,/host-backup是宿主机上用来存放备份数据的目录,将其挂载到容器的/container-back目录,tar命令通过/container-back获取到备份的数据,然后解压。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

功率放大器在压电传感器矩形阵列成像研究中的应用

实验名称:激光和压电传感器密集型矩形阵列成像质量的比较分析 研究方向:Lamb波、无损检测、缺陷成像和定位 测试目的: 将密集型矩形阵列分别与压电传感器检测技术和激光检测技术相结合,利用幅值成像和符号相干因子成像实现对铝板结…

vector模拟实现下篇及迭代器失效和深浅拷贝问题详解

文章目录1:构造函数1.1默认构造函数1.2迭代器构造1.3用n个val构造1.4拷贝构造2:operator3:析构函数和clear4:迭代器失效问题4.1:删除偶数深浅拷贝1:构造函数 1.1默认构造函数 vector():_start(nullptr),_end(nullptr),_endofstorage(nullptr){}1.2迭代器构造 template<clas…

手动安装Kylin5.0版本的过程

官方文档 https://kylin.apache.org/目前kylin3,4版本是有docker版本和安装包的,5.0只有docker没有安装包 安装包 https://kylin.apache.org/download/安装kylin5.0 Kylin5.0文档拉取镜像 docker pull apachekylin/apache-kylin-standalone:5.0.0运行镜像 docker run -d \ …

linux-jdk、nginx

一、安装nginx Nginx是一个web服务器也可以用来做负载均衡及反向代理使用&#xff0c; 目前使用最多的就是负载均衡&#xff0c;这篇文章主要介绍了centos8 安装 nginx Nginx是一种开源的高性能HTTP和反向代理服务器&#xff0c;负责处理Internet上一些最大站点的负载。 它…

数据结构——重点代码汇总

顺序表 设计算法&#xff0c;从顺序表L中删除值为x的元素。要求算法的时间复杂度为O(n)&#xff0c;空间复杂度为O(1)。设计算法&#xff0c;判断一个字符串是否是回文。如abc3cba是回文序列&#xff0c;而1331不是回文序列。从顺序存储结构的线性表a中删除第i个元素起的k个元…

SuperMap GIS 倾斜摄影数据处理 QA

一、倾斜摄影数据简介 倾斜摄影&#xff08;Oblique photography&#xff09;是指由一定倾斜角度的航摄相机所获取的影像。倾斜摄影技术是国际摄影测量领域近十几年发展起来的一项高新技术&#xff0c;该技术通过从一个垂直、四个倾斜、五个不同的视角同步采集影像&#xff0c…

深度学习训练营之天气识别P3

深度学习训练营之天气识别原文链接环境介绍前置工作设置GPU导入数据数据查看数据预处理加载数据可视化数据检查数据配置数据集prefetch()功能详细介绍&#xff1a;构建CNN网络编译模型训练结果可视化原文链接 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记…

卫龙上市首日破发:高瓴、红杉、腾讯等账面亏损,刘卫平为董事长

12月15日&#xff0c;卫龙美味全球控股有限公司&#xff08;下称“卫龙”&#xff0c;HK:09985&#xff09;在港交所上市。本次上市&#xff0c;卫龙的发行价格为10.56港元/股&#xff0c;募资总额约为10.18亿港元&#xff0c;募资净额约为8.99亿港元。 上市首日&#xff0c;卫…

Web3中文|NFT如何助力项目进入Web3?

自NFT流行以来&#xff0c;一直有人将这些由区块链驱动的代币视作贯彻人类精神的最终疗法。 但是NFT真的都存储在区块链上了吗&#xff1f;如果是这样的话&#xff0c;怎么还会出现百万NFT被盗的事件呢&#xff1f; 如果你也想过这些问题&#xff0c;那么请相信我&#xff0c…

在现有项目里面添加 TSX 并编写组件过程记录

首先需要安装编译支持和 vite 支持插件 ## babel 基础插件 yarn add vue/babel-plugin-jsx -D## 项目用 vite 构建的就需要按照这个 yarn add vitejs/plugin-vue-jsx -D 使用插件 按照 babel-plugin-jsx 的指引在 babel 配置项中启用插件&#xff1a; {"plugins":…

Linux操作系统常见问题汇总

1.系统启动流程。 uboot -> kernel -> 根文件系统。 uboot第一阶段属于汇编阶段&#xff1a; 定义入口&#xff08;start.S&#xff09;&#xff1a;uboot中因为有汇编阶段参与&#xff0c;因此不能直接找main.c。 设置异常向量&#xff1a;当硬件发生故障的时候CPU会…

K8s Dashboard 部署

1、下载 Dashboard 的 yaml 文件 点击链接下载 YAML 文件 2、源码包中 yaml 文件在哪里 3、修改 yaml 文件 vim recommended.yaml... kind: Service apiVersion: v1 metadata:labels:k8s-app: kubernetes-dashboardname: kubernetes-dashboardnamespace: kubernetes-dashboard…

Java web 2022跟学尚硅谷(十) 后端基础 书城

Java web 2022跟学尚硅谷十 后端基础 书城验证码kaptcha和缓存cookie简单了解cookie步骤简单创建cookie的样例代码CookieServlet01hello.html页面结果Cookie保存结果第二次请求cookie的APIKaptcha验证码使用步骤显示效果验证码的校验相关类KaptchaServlet01书城1.2正则表达式正…

C语言经典题目—单链表求和

练习的题目<单链表求和>题目难度较小。 1、题目描述 小明输入了一个长度为 n 的数组&#xff0c;他想把这个数组转换成链表&#xff0c;链表上每个节点的值对应数组中一个元素的值&#xff0c;然后遍历链表并求和各节点的值。输入描述&#xff1a; 第一行输入一个正整数…

Linux下内存空间分配、物理地址与虚拟地址映射

一、Linux内核动态内存分配与释放 1.1 kmalloc函数 Kmalloc分配的是连续的物理地址空间。如果需要连续的物理页&#xff0c;可以使用此函数&#xff0c;这是内核中内存分配的常用方式&#xff0c;也是大多数情况下应该使用的内存分配方式。 传递给函数的最常用的标志是GTP_A…

火山引擎DataTester:无需研发人力,即刻开启企业A/B实验

近日&#xff0c;火山引擎A/B测试平台—— DataTester 对产品内A/B实验的“可视化编辑器”进行了新的升级&#xff0c;对交互、预览、Xpath的层次结构视图等能力均做了优化。 据介绍&#xff0c;火山引擎DataTester的可视化编辑器&#xff0c;可以让用户无需编写任何代码&#…

基于java+springboot+mybatis+vue+mysql的CSGO游戏比赛赛事管理系统

项目介绍 CSGO赛事管理系统利用网络沟通、计算机信息存储管理&#xff0c;有着与传统的方式所无法替代的优点。比如计算检索速度特别快、可靠性特别高、存储容量特别大、保密性特别好、可保存时间特别长、成本特别低等。在工作效率上&#xff0c;能够得到极大地提高&#xff0…

基于JAVA+SpringMVC+Mybatis+Vue+MYSQL的大健康老年公寓管理系统

项目介绍 本系统采用java语言开发&#xff0c;后端采用ssm框架&#xff0c;前端采用vue技术&#xff0c;数据库采用mysql进行数据存储。 管理员后台页面&#xff1a; 功能&#xff1a;主页、个人中心、护理人员管理、收费标准管理、接待登记管理、房间信息管理、床位信息管理…

ASEMI肖特基二极管MBR30200FCT封装,MBR30200FCT体积

编辑-Z ASEMI肖特基二极管MBR30200FCT参数&#xff1a; 型号&#xff1a;MBR30200FCT 最大重复峰值反向电压&#xff08;VRRM&#xff09;&#xff1a;200V 最大RMS电桥输入电压&#xff08;VRMS&#xff09;&#xff1a;140V 最大直流阻断电压&#xff08;VDC&#xff09…

Android 相机预览 横屏竖屏 -- 显示

相机在设备上处于固定位置&#xff0c;无论设备是否 是手机、平板电脑或计算机。当设备方向更改时&#xff0c; 相机方向更改。常见的布局显示比率是 4:3。 对于前置摄像头&#xff0c;图像缓冲区逆时针旋转&#xff08;从 传感器的自然方向&#xff09;对于后置摄像头&#xf…