Docker 数据卷管理及优化

目录

1 数据卷实现的目的

2 为什么要用数据卷

3 docker的两种数据卷

3.1 bind mount 数据卷

实践实例:

3.2 docker managed 数据卷

实验实例:

3.3 bind mount 数据卷和docker managed 数据卷的对比

3.3.1 相同点:

3.3.2 不同点:

3.4 数据卷容器(Data Volume Container)

3.5 备份与迁移数据卷


1 数据卷实现的目的

Docker 数据卷是一个可供容器使用的特殊目录,它绕过了容器的文件系统,直接将数据存储在宿主机上。

这样可以实现以下几个重要的目的:

  • 数据持久化:即使容器被删除或重新创建,数据卷中的数据仍然存在,不会丢失。
  • 数据共享:多个容器可以同时挂载同一个数据卷,实现数据的共享和交互。
  • 独立于容器生命周期:数据卷的生命周期独立于容器,不受容器的启动、停止和删除的影响。

2 为什么要用数据卷

docker分层文件系统

  • 性能差
  • 生命周期与容器相同

docker数据卷

  • mount到主机中,绕开分层文件系统
  • 和主机磁盘性能相同,容器删除后依然保留
  • 仅限本地磁盘,不能随容器迁移

docker提供了两种卷:

  • bind mount
  • docker managed volume

3 docker的两种数据卷

3.1 bind mount 数据卷

Docker的bind mount是一种数据持久化的方式,它允许将主机文件系统的目录或文件直接挂载到容器中。通过这种方式,可以将数据存储在宿主机上,从而避免了数据仅存在于容器内的局限性,这对于需要数据持久化或者跨容器共享数据的场景特别有用。

实践实例:

[root@node-3 ~]# docker run -it --rm --name=test \-v /root/shuyan:/data1:rw \-v /etc/hosts:/data2/hosts:ro \busybox
/ # ls
bin    data2  etc    lib    proc   sys    usr
data1  dev    home   lib64  root   tmp    var/ # ls data1/
shuyanfile1  shuyanfile2  shuyanfile3  shuyanfile4  shuyanfile5
/ # ls data2/
hosts/ # touch data1/shuyanfile{6..10}
/ # ls data1/
shuyanfile1        shuyanfile3        shuyanfile5
shuyanfile2        shuyanfile4        shuyanfile{6..10}# 发现无法删除,因为是只读文件
/ # rm data2/hosts 
rm: remove 'data2/hosts'? y
rm: can't remove 'data2/hosts': Device or resource busy# 查看是否创建新文件
[root@node-3 ~]# ls shuyan/
shuyanfile1  shuyanfile2  shuyanfile3  shuyanfile4  shuyanfile5  shuyanfile{6..10}

3.2 docker managed 数据卷

  • bind mount必须指定host文件系统路径,限制了移植性
  • docker managed volume 不需要指定mount源,docker自动为容器创建数据卷目录
  • 默认创建的数据卷目录都在 /var/lib/docker/volumes
  • 如果挂载时指向容器内已有的目录,原有数据会被复制到volume

一般在不建立数据卷的时候再关闭或者说停止容器的时候,数据也是会随着容器关闭删除而删除

清理未使用的 Docker 数据卷

 docker volume prune

1. 在执行 docker volume prune 命令之前,请确保你确实不再需要这些数据卷中的数据,因为

该操作是不可逆的,一旦删除数据将无法恢复。

2. 如果有重要的数据存储在数据卷中,建议先进行备份,或者确保数据已经被妥善保存到其他地

方。

实验实例:

# 创建的逻辑卷默认放在/var/lib/docker/volumes/[root@rockynode-1 ~]# ls /var/lib/docker/volumes/
backingFsBlockDev  metadata.db  
[root@rockynode-1 ~]# docker volume create mysqldate
mysqldate[root@rockynode-1 ~]# docker volume ls 
DRIVER    VOLUME NAME
local     mysqldate# 查看逻辑卷存放路径
[root@rockynode-1 ~]# ls /var/lib/docker/volumes/
backingFsBlockDev  metadata.db  mysqldate

 ~]# docker run -d --name mysql \
-e MYSQL_ROOT_PASSWORD=shuyan \
# 将mysqldate挂载到容器内mysql的数据目录
-v mysqldate:/var/lib/mysql mysql:5.7~]# docker ps 
CONTAINER ID   IMAGE       COMMAND                   CREATED          STATUS          PORTS                 NAMES
5c48f5ce89ba   mysql:5.7   "docker-entrypoint.s…"   14 seconds ago   Up 13 seconds   3306/tcp, 33060/tcp   mysql

查看宿主机上磁盘空间

[root@rockynode-1 ~]# ls /var/lib/docker/volumes/
backingFsBlockDev  metadata.db  mysqldate  
[root@rockynode-1 ~]# ls /var/lib/docker/volumes/mysqldate/
_data
[root@rockynode-1 ~]# ls /var/lib/docker/volumes/mysqldate/_data/
auto.cnf    client-cert.pem  ibdata1      ibtmp1      performance_schema  server-cert.pem
ca-key.pem  client-key.pem   ib_logfile0  mysql       private_key.pem     server-key.pem
ca.pem      ib_buffer_pool   ib_logfile1  mysql.sock  public_key.pem      sys

发现都是MySQL数据目录之下的东西 

 ~]# docker inspect mysql | grep -A 6 Mounts"Mounts": [{"Type": "volume","Name": "mysqldate","Source": "/var/lib/docker/volumes/mysqldate/_data","Destination": "/var/lib/mysql","Driver": "local",

 

在删除掉容器之后,数据也还是存在的

3.3 bind mount 数据卷和docker managed 数据卷的对

3.3.1 相同点:

两者都是 host 文件系统中的某个路径

3.3.2 不同点:

特性/功能bind mountdocker managed volume
volume 位置可任意指定/var/lib/docker/volumes/...
对已有mount point 影响隐藏并替换为 volume原有数据复制到 volume
是否支持单个文件支持不支持,只能是目录
权限控制可设置为只读,默认为读写权限无控制,均为读写权限
移植性移植性弱,与 host path 绑定移植性强,无需指定 host 目录
 ~]# docker run -it --rm --name=test -v datavolume:/etc:rw busybox
/ # ls
bin    dev    etc    home   lib    lib64  proc   root   sys    tmp    usr    var
/ # cd etc/
/etc # ls
group          hosts          mtab           nsswitch.conf  resolv.conf
hostname       localtime      network        passwd         shadow

多开一个ssh会话

[root@rockynode-1 _data]# cd /var/lib/docker/volumes/datavolume/_data/
[root@rockynode-1 _data]# ls
group  hostname  hosts  localtime  mtab  network  nsswitch.conf  passwd  resolv.conf  shadow
[root@rockynode-1 _data]# touch shuyanfile

回到容器的会话发现多了一个文件

退出容器删除,在数据卷中数据是有保存的
/etc # [root@rockynode-1 ~]# 
[root@rockynode-1 ~]# 
[root@rockynode-1 ~]# docker ps 
CONTAINER ID   IMAGE     COMMAND   CREATED         STATUS         PORTS     NAMES
58e9f5c2cd7d   busybox   "sh"      4 minutes ago   Up 4 minutes             test
[root@rockynode-1 ~]# docker rm -f test 
test[root@rockynode-1 _data]# cd /var/lib/docker/volumes/datavolume/_data/
[root@rockynode-1 _data]# ls
group     hosts      mtab     nsswitch.conf  resolv.conf  shuyanfile
hostname  localtime  network  passwd         shadow

再等我们去创建这个数据卷的时候,他不会替换掉目录下的内容,而是对逻辑卷进行一个复制,相当于做了一个融合

[root@rockynode-1 _data]# cd /var/lib/docker/volumes/datavolume/_data/
[root@rockynode-1 _data]# ls
group     hosts      mtab     nsswitch.conf  resolv.conf  shuyanfile
hostname  localtime  network  passwd         shadow_data]# docker run --rm -it --name=test -v datavolume:/etc:ro busybox
/ # cd etc/
/etc # ls
group          hosts          mtab           nsswitch.conf  resolv.conf    shuyanfile
hostname       localtime      network        passwd         shadow

3.4 数据卷容器(Data Volume Container

数据卷容器(Data Volume Container)是 Docker 中一种特殊的容器,主要用于方便地在多个容器之间 共享数据卷。

[root@rockynode-1 ~]# docker run --rm -it --name=test \
-v datavolumes:/data:rw busybox/ # [root@rockynode-1 ~]# # 使用--volumes-from引用test容器的数据卷
[root@rockynode-1 ~]# docker run --rm -it --name=new_test \
--volumes-from test  busybox/ # ls 
bin    data   dev    etc    home   lib    lib64  proc   root   sys    tmp    usr    var
/ # ls data/
group          hosts          mtab           nsswitch.conf  resolv.conf
hostname       localtime      network        passwd         shadow

3.5 备份与迁移数据卷

备份数据卷

[root@rockynode-1 ~]# docker run --rm -it --name=test -v datavolumes:/data:rw busybox
/ # ls 
bin    data   dev    etc    home   lib    lib64  proc   root   sys    tmp    usr    var
/ # ls data/
group          hosts          mtab           nsswitch.conf  resolv.conf
hostname       localtime      network        passwd         shadow
/ # [root@rockynode-1 ~]# # 使用--volumes-from参数引用 test 容器的数据卷
# 再使用 pwd 将当前工作目录进行挂载,来接收在容器内打包数据的操作
# 其实开启new_test 容器就是作为一个备份的媒介 为将 test容器内的data数据进行备份
# 打包之后放在容器内的挂载点,实现与宿主机的数据共享
[root@rockynode-1 ~]# docker run --rm -it --name=new_test 
--volumes-from test -v `pwd`:/mount busybox/ # ls
bin    dev    home   lib64  proc   sys    usr
data   etc    lib    mount  root   tmp    var
/ # ls mount/
anaconda-ks.cfg      dockerfile           script               ??
auth                 harbor               ??                   ??
certs                images.tar.gz        ??                   ??
certsshuyan.crt      nginx-latest.tar.gz  ??                   ??
certsshuyan.key      registry.tag.gz      ??
/ # ls data/
group          hosts          mtab           nsswitch.conf  resolv.conf
hostname       localtime      network        passwd         shadow# 将镜像进行打包
/ # tar czf /mount/data.tar.gz /data/*
tar: removing leading '/' from member names# ctrl + pq 退出容器
/ # [root@rockynode-1 ~]# 

查看被挂载的目录从容器内共享的 打包的tar包

[root@rockynode-1 ~]# ls
公共  文档  anaconda-ks.cfg  certsshuyan.key  images.tar.gz
模板  下载  auth             data.tar.gz      nginx-latest.tar.gz
视频  音乐  certs            dockerfile       registry.tag.gz
图片  桌面  certsshuyan.crt  harbor           script

解压测试是否实现

[root@rockynode-1 ~]# tar xzf data.tar.gz 
[root@rockynode-1 ~]# ls data
group  hostname  hosts  localtime  mtab  network  
nsswitch.conf  passwd  resolv.conf  shadow

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

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

相关文章

【网络安全】服务基础第一阶段——第二节:Windows系统管理基础----虚拟化IP地址以及用户与组管理

目录 一、Windows网络测试工具 1.1.ping命令 1.2.tracert命令 二、IP实验内容 2.1 实验一 2.2 实验二 三、用户与组管理 3.1 用户与账户概述 3.2 用户管理 3.3 用户增删改查 3.4 增加用户 3.5 修改用户属性 3.6 删除用户 3.7 组账户概述 3.8 组账户增删改查 四、…

没有编程基础?这款数据分析工具也能轻松上手

在当前快节奏的工业环境中,工厂管理者越来越依赖数据分析来优化生产流程、提升效率、降低成本。然而,很多传统的数据分析工具不仅操作复杂,而且费用高昂,让不少工厂望而却步。最近,我发现了一款非常实用的报表工具&…

安卓主板_MTK安卓主板定制_联发科主板/开发板方案

这款安卓主板采用了联发科的MTK8788、MTK8768及MTK8766系列芯片平台,运用了64位四核/八核 Cortex-A53/A73架构,主频高达2.0 GHz。主板配置了4GB LPDDR3内存和64GB eMMC存储,同时配备了ARM Mail-T450 MP2图形处理单元(GPU),使其在4…

Java性能优化传奇之旅--Java万亿级性能优化之电商平台高峰时段性能大作战:策略与趋势洞察

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

【Linux】共享内存

目录 原理 代码 在之前,无论是匿名管道还是命名管道,说到底都是基于文件的通信,也就意味着没有为了通信让OS单独设计一套通信模块代码,而是直接复用内核中文件相关的数据结构、缓冲区、代码来实现通信的,这在一定程度…

ET6框架(七)Excel配置工具

文章目录 一、Excel表的基本规则:二、特殊特殊标记三、编译路径说明四、动态获取数据五、可导表类型查看: 一、Excel表的基本规则: 在框架中我们的Excel配置表在ET > Excel文件夹中 1.在表结构中需要注意的是起始点必须在第三行第三列,且…

鸿蒙开发 数组改变,ui渲染没有刷新

问题描述: 数组push, 数组长度改变,ui也没有刷新 打印出了数组 console.log(this.toDoData.map(item > ${item.name}).join(, ), this.toDoData.length) 原代码: Text().fontSize(36).margin({ right: 40 }).onClick(() > {TextPicker…

mysql学习教程,从入门到精通,MySQL介绍(1)

1、MySQL 教程 本教程是为初学者准备的,以帮助他们理解与MySQL语言相关的基础知识和高级概念。 mysql MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系…

如何使用IDEA远程访问家里或者公司中无公网IP的内网MySQL数据库

文章目录 前言1. 本地连接测试2. Windows安装Cpolar3. 配置Mysql公网地址4. IDEA远程连接Mysql5. 固定连接公网地址6. 固定地址连接测试 前言 本教程主要介绍如何使用Cpolar内网穿透工具实现在IDEA中也可以远程访问家里或者公司的数据库,提高开发效率!无…

Monibuca实战:如何用Go语言打造高效的直播后端

简介 Monibuca(简称:m7s) 是一个开源的实时流媒体服务器开发框架,使用 Go 语言编写。 它的设计目标是提供一个高性能、可扩展、易于定制的实时流媒体服务器解决方案。 Monibuca 的核心理念是模块化,允许开发者根据需…

linux服务器/虚拟机安装redis

py3安装(慢的一批无语了) wget http://cdn.npm.taobao.org/dist/python/3.6.5/Python-3.6.5.tgz && tar -zxvf Python-3.6.5.tgz && cd Python-3.6.5/ && ./configure --prefix/usr/local/python3 --with-ssl && make …

Golang | Leetcode Golang题解之第373题查找和最小的K对数字

题目: 题解: func kSmallestPairs(nums1, nums2 []int, k int) (ans [][]int) {m, n : len(nums1), len(nums2)// 二分查找第 k 小的数对和left, right : nums1[0]nums2[0], nums1[m-1]nums2[n-1]1pairSum : left sort.Search(right-left, func(sum in…

ESP32-IDF http请求崩溃问题分析与解决

文章目录 esp32s3 http请求崩溃问题代码讨论修正后不崩溃的代码esp32相关文章 ESP32S3板子, 一运行http请求百度网站的例子, 就会panic死机, 记录下出现及解决过程. esp32s3 http请求崩溃 一执行http请求的perform就会崩溃, 打印如图 ESP32-IDF 的http请求代码是根据官方dem…

Qt:玩转QPainter序列六(图形)

前言 继续看源码。 正文 剩下的大部分都是画各种图形的函数,它们一般都有多个重载版本,我就不一 一介绍使用了,只挑其中的一部分使用一下。 在 QPainter 类中,这些方法涉及到绘图的各种功能,主要用于设置视图变换、…

kube-scheduler调度任务的执行过程分析与源码解读(二)

概述 摘要: 上文我们对Kube-scheduler的启动流程进行了分析,本文继续探究kube-scheduler执行pod的调度任务的过程。 正文 说明:基于 kubernetes v1.12.0 源码分析 上文讲到kube-scheduler组件通过sched.Run() 启动调度器实例。在sched.Run(…

校园牛奶订购配送小程序开发制作方案

校园牛奶订购配送小程序系统的开发方案,包括对用户需求的分析、目标用户的界定、使用场景的设定以及开发功能模块的规划。校园牛奶订购配送小程序系统主要是为校园内学生和教职工提供牛奶订购与配送服务。 目标用户 主要面向在校学生、教职工以及其他有牛奶订购需求…

这四种人不能合作做生意

合伙创业千万不要和这四种人合伙,不然公司做大了都不是你的! 一、不愿出钱的人,不愿出钱就不会有决心。公司一旦有风吹草动,最先跑路的都是没有出钱的。 二、不愿付出时间的人,想用业余时间参与,不愿全身心…

如何使用Svg矢量图封装引用到vue3项目中

前言 在现代前端开发中,SVG(可缩放矢量图形)因其高质量和灵活性成为了图标和图形设计的热门选择。对于 Vue 3 项目而言,将 SVG 图标封装和引用到项目中不仅能提升性能,还能带来更高的可维护性和一致性。SVG 图标本质上…

卡西莫多的诗文集2022-2024.8月定稿

通过网盘分享的文件:卡西莫多的诗文集2022-2024.8月30-A5.pdf 链接: https://pan.baidu.com/s/1_BrcKvUthFLlty8dWNZxjQ?pwdutwd 提取码: utwd 自从解锁了一项新技能后,从藏内容诗开始,自己积攒到现在不知不觉也积累了一些诗,看…

Runway删库跑路,真的run away了!

没有任何通知,Runway在Hugging Face上的内容全部删除了! 目前具体原因不明。Runway的主页只留下了一句话: 我们不再对HuggingFace账号进行维护。 据悉,Runway在Hugging Face上,最火的、也是争议最大的项目,…