Docker数据卷容器实战
数据卷容器
数据共享
上面讲述的是主机和容器之间共享数据,那么如何实现容器和容器之间的共享数据呢?那就是创建 创建数据卷容器。
命名的容器挂载数据卷,其他容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为 数据卷容器(Data Volume Container)。
通俗地来说,docker 容器数据卷可以看成使我们生活中常用的 U 盘,它存在于一个或多个的容器中,由 docker 挂载到容器,但不属于联合文件系统,Docker 不会在容器删除时删除其挂载的数据卷。在创建一个容器时候,使用命令绑定一个父容器,这个父容器就是 数据卷容器。
特点:
- 数据卷可以在容器之间共享或重用数据
- 数据卷中的更改可以直接生效
- 数据卷中的更改不会包含在镜像的更新中
- 数据卷的生命周期一直持续到没有容器使用它为止
命令格式:docker run --volumes-from <数据卷容器名> <镜像名[:TAG | ID]>
创建三个容器 tomcat10、tomcat11、tomcat12,其中 tomcat10 是数据卷容器
[root@k8s-master ~]# docker run -d -P --name tomcat10 -v tomcat10:/usr/local/tomcat/webapps tomcat:8.5.73
c96daf52665e7955a7f34c513c9dd5be7a2206e4f7b3519a365a289bbe78f9d6
[root@k8s-master ~]# docker run -d -P --name tomcat11 --volumes-from tomcat10 tomcat:8.5.73
fd1460b6394c4085170298d0916a521669d4d5050086450b151b41fba97e3c19
[root@k8s-master ~]# docker run -d -P --name tomcat12 --volumes-from tomcat10 tomcat:8.5.73
e023742c8c9f6afcf24bb53861ecfd21c7abb0042ea096c544826d1106b9a983
证明三个容器的数据是否共享
已经创建好三个容器,并且 tomcat10 容器的数据卷目录是 tomcat10。我们可以在 tomcat10 容器的 webapps 目录下创建一个 test.txt 文件,看看 tomcat11 容器和 tomcat12 容器的 webapps 是否同步数据。
首先进入 tomcat10 容器的 webapps 目录,创建 test.txt 文件
[root@k8s-master ~]# docker exec -it tomcat10 /bin/bash
root@c96daf52665e:/usr/local/tomcat# cd webapps
webapps/ webapps.dist/
root@c96daf52665e:/usr/local/tomcat# cd webapps/
root@c96daf52665e:/usr/local/tomcat/webapps# touch test1.txt
root@c96daf52665e:/usr/local/tomcat/webapps# ls
test1.txt
然后我们进入 tomcat11 容器,看文件是否同步过来,并且创建 test2.txt 文件
[root@k8s-master u]# docker exec -it tomcat11 /bin/bash
root@fd1460b6394c:/usr/local/tomcat# cd webapps/
root@fd1460b6394c:/usr/local/tomcat/webapps# ls -l
total 0
-rw-r--r--. 1 root root 0 Feb 27 12:24 test1.txt
然后我们进入 tomcat12 容器,看文件是否同步过来
[root@k8s-master u]# docker exec -it tomcat12 /bin/bash
root@e023742c8c9f:/usr/local/tomcat# cd webapps/
root@e023742c8c9f:/usr/local/tomcat/webapps# ls -l
total 0
-rw-r--r--. 1 root root 0 Feb 27 12:24 test1.txt
最后我们看看宿主机的挂载目录
[root@k8s-master ~]# cd /var/lib/docker/volumes/tomcat10/_data/
[root@k8s-master _data]# ls
test1.txt

如果删除了挂载的容器(包括 dbdata、db1 和 db2),数据卷并不会被自动删除。如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时使用 docker rm -v 命令来指定同时删除关联的容器。这可以让用户在容器之间升级和移动数据卷。
数据备份
可以利用数据卷对其中的数据进行进行备份、恢复。
数据备份命令格式:docker run [options] --volumes-from <数据卷容器> [-v <宿主机绝对路径>:<随机路径>] <镜像名>:[TAG | ID] tar cvf <随机路径/备份名> <数据卷容器路径>
不指定宿主机挂载目录下和容器备份目录,备份 tomcat10 容器的数据卷 webapps 目录
[root@k8s-master _data]# docker run --name tomcat-backup --volumes-from tomcat10 tomcat:8.5.73 tar cvf /backup.tar /usr/local/tomcat/webapps
tar: Removing leading `/' from member names
/usr/local/tomcat/webapps/
/usr/local/tomcat/webapps/test1.txt
[root@k8s-master _data]# find / -name backup.tar
/var/lib/docker/overlay2/bc35ab2d75946a2392d68ddd0872a9656b3013a0da8e771ee4bea0dfc1bdbda2/diff/backup.tar
如果容器删除,那么该方式的备份文件也被删除,并且备份目录是容器 ID 命名,并非容器名,看一长串字符串就知道了。
指定宿主机挂载目录下和容器备份目录,备份 tomcat10 容器的数据卷 webapps 目录
[root@k8s-master _data]# docker run --volumes-from tomcat10 -v /opt/backup:/backup tomcat:8.5.73 tar cvf /backup/backup.tar /usr/local/tomcat/webapps
tar: Removing leading `/' from member names
/usr/local/tomcat/webapps/
/usr/local/tomcat/webapps/test1.txt
[root@k8s-master _data]# find / -name backup.tar
/var/lib/docker/overlay2/bc35ab2d75946a2392d68ddd0872a9656b3013a0da8e771ee4bea0dfc1bdbda2/diff/backup.tar
/opt/backup/backup.tar
注意:容器的挂载路径要和备份的文件路径保持一致,才能备份成功。
数据恢复
备份了数据,那么就需要进行数据恢复。
恢复命令格式:docker run --volumes-from <恢复到哪个数据卷容器> [-v <宿主机绝对路径>:<随机路径>] <镜像名>[:TAG | ID] tar xvf <随机路径 | 路径>
数据恢复到 tomcat20 容器的数据卷里
[root@k8s-master _data]# docker run -d --name tomcat20 -v tomcat20:/usr/local/tomcat/webapps tomcat:8.5.73
6b1b3fa0e74149197449bf0129771ff462f781d7c476365df9da1c0cc80fecd7[root@k8s-master _data]#
[root@k8s-master _data]# docker run --volumes-from tomcat20 -v /opt/backup:/backup tomcat:8.5.73 tar xvf /backup/backup.tar -C /usr/local/tomcat/webapps/
usr/local/tomcat/webapps/test1.txt
-C / 代表解压到根目录下,因为压缩包的文件基于根目录的,否则解压的目录是基于 /backup。
原理:此时 tomcat20 挂载目录是 /usr/local/tomcat/webapps,而新的容器只要挂载了 tomcat20 容器,它们两个的 /usr/local/tomcat/webapps 形成关联,新的容器的这个目录发生改变,则 tomcat20 的挂载目录也会发生改变,所以解压文件到新的容器的该目录下,实际上也是解压文件到 tomcat20 的挂载目录下,也就是实现恢复数据。
[root@k8s-master _data]# docker exec -it tomcat20 /bin/bash
root@6b1b3fa0e741:/usr/local/tomcat# cd webapps/
root@6b1b3fa0e741:/usr/local/tomcat/webapps# ls
test1.txt
挂载特性
关于到底是宿主机的挂载目录覆盖容器的挂载目录,还是反过来覆盖:
- 默认目录挂载:
- 当宿主机挂载目录已经存在时,双方挂载完成后,宿主机挂载目录覆盖容器挂载目录
- 当宿主机挂载目录不存在时,双方挂载完成后,容器挂载目录覆盖宿主机挂载目录
- 具体目录挂载
- 当宿主机挂载目录无论存不存在,双方挂载完成后,宿主机挂载目录都会覆盖容器挂载目录
默认目录挂载
| 宿主机 | 容器 | 运行结果 |
|---|---|---|
| 文件存在 | 文件存在 | 挂载成功,宿主机文件内容覆盖容器文件内容 |
| 目录存在 | 目录存在 | 挂载成功,宿主机目录内容覆盖容器目录内容 |
| ...... | ...... | ...... |
| 文件不存在 | 文件存在 | 挂载成功,容器文件内容覆盖宿主机文件内容 |
| 目录不存在 | 目录存在 | 挂载成功,容器目录内容覆盖宿主机目录内容 |
| ...... | ...... | ...... |
| 其他和 具体目录挂载 类似 |
具体目录挂载
| 宿主机 | 容器 | 运行结果 |
|---|---|---|
| 文件存在 | 文件存在 | 挂载成功,宿主机文件内容覆盖容器文件内容 |
| 目录存在 | 目录存在 | 挂载成功,宿主机目录内容覆盖容器目录内容 |
| ------ | ------ | ------ |
| 文件不存在 | 文件存在 | 挂载成功,宿主机创建空文件,并覆盖掉容器的文件,导致也为空 |
| 目录不存在 | 目录存在 | 挂载成功,宿主机创建空目录,并覆盖掉容器的文件,导致也为空 |
| ------ | ------ | ------ |
| 文件存在 | 文件不存在 | 挂载成功 |
| 目录存在 | 目录不存在 | 挂载成功 |
| ------ | ------ | ------ |
| 文件存在 | 目录存在 | 容器启动失败 |
| 目录存在 | 文件存在 | 容器启动失败 |
| ------ | ------ | ------ |
| 目录不存在 | 目录不存在 | 挂载成功,Docker 会自动在宿主机和容器内新建目录 |
| 目录不存在 | 文件存在 | 容器启动失败 |
| 目录不存在 | 目录存在 | 挂载成功,宿主机空目录内容覆盖容器内目录(空) |
相关文章:
Docker数据卷容器实战
数据卷容器 数据共享 上面讲述的是主机和容器之间共享数据,那么如何实现容器和容器之间的共享数据呢?那就是创建 创建数据卷容器。 命名的容器挂载数据卷,其他容器通过挂载这个(父容器)实现数据共享,挂载…...
【Eureka 缓存机制】
今天简单介绍一下Eureka server 的缓存机制吧✌️✌️✌️ 一、先来个小剧场:服务发现的"拖延症" 想象你是个外卖小哥(客户端),每次接单都要打电话问调度中心(Eureka Server):“现在…...
docker-compose方式启动Kafka Sasl加密认证(无zk)
首先参考文档,思考过程可以进行参考https://juejin.cn/post/7294556533932884020#heading-3 用的镜像是Bitnami,对SASL配置进行了简化,需要按照特定格式去配置jass验证 完整配置如下 镜像版本参考:https://hub.docker.com/r/bitn…...
[ComfyUI]官方已支持Skyreels混元图生视频,速度更快,效果更好(附工作流)
一、介绍 昨天有提到官方已经支持了Skyreels,皆大欢喜,效果更好一些,还有GGUF量化版本,进一步降低了大家的显存消耗。 今天就来分享一下官方流怎么搭建,我体验下来感觉更稳了一些,生成速度也更快…...
数据库导出
MySQL数据库 使用命令行导出 导出整个数据库:在命令行中输入mysqldump -u用户名 -p密码 数据库名 > 导出文件路径/文件名.sql。例如mysqldump -uroot -p123456 mydb > /home/user/mydb_backup.sql,回车后输入密码即可将名为mydb的数据库导出为SQL…...
Flask 应用结构与模块化管理详细笔记
1. 代码结构优化:StructureA 最初的 Flask 项目结构适用于小型应用,但不适用于大型应用。为了改进代码结构,我们将 URL 管理应用拆分为多个模块。 1.1 StructureA 目录结构 StructureA |-- .flaskenv |-- app.py |-- views.py |-- templat…...
Excel的两个小问题解决
(一)因为合并单元格存在,无法使用下拉自动填充公式。 解决方案: 使用 CtrlEnter 组合键 选中目标区域:选中需要应用公式的所有合并单元格区域,这些单元格可能是由 2 行或 3 行等合并而成。输入公式&…...
计算机毕业设计Python+DeepSeek-R1大模型期货价格预测分析 期货价格数据分析可视化预测系 统 量化交易大数据 机器学习 深度学习
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
JVM 面试
JVM 运行时内存区域划分是怎样的? 程序计数器:记录当前线程执行的字节码指令的地址,是线程私有的。 Java 虚拟机栈:每个方法在执行时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息&#…...
智慧后勤的消防管理:豪越科技为安全护航
智慧后勤消防管理难题大揭秘! 在智慧后勤发展得如火如荼的当下,消防管理却暗藏诸多难题。传统模式下,消防设施分布得那叫一个散,就像一盘散沙,管理起来超费劲。人工巡检不仅效率低,还容易遗漏,不…...
【Elasticsearch】(Java 版)
Elasticsearch(Java 版) 文章目录 Elasticsearch(Java 版)**1. Elasticsearch 简介****1.1 什么是 Elasticsearch?****1.2 核心概念** **2. 安装与配置****2.1 环境要求****2.2 安装步骤****Linux/macOS****Windows** …...
DeepSeek在昇腾上的模型部署 - 常见问题及解决方案
2024年12月26日,DeepSeek-V3横空出世,以其卓越性能备受瞩目。该模型发布即支持昇腾,用户可在昇腾硬件和MindIE推理引擎上实现高效推理,但在实际操作中,部署流程与常见问题困扰着不少开发者。本文将为你详细阐述昇腾Dee…...
安全面试5
文章目录 sql的二次注入在linux下,现在有一个拥有大量ip地址的txt文本文档,但是里面有很多重复的,如何快速去重?在内网渗透中,通过钓鱼邮件获取到主机权限,但是发现内网拦截了tcp的出网流量,聊一…...
【Python量化金融实战】-第2章:金融市场数据获取与处理:2.1 数据源概览:Tushare、AkShare、Baostock、通联数据(DataAPI)
本章将详细介绍四大主流金融数据源(Tushare、AkShare、Baostock、通联数据(DataAPI)),分析其特点与适用场景,并通过实战案例展示数据获取与处理的全流程。 👉 点击关注不迷路 👉 点击…...
Exoplayer(MediaX)实现音频变调和变速播放
在K歌或录音类应用中变调是个常见需求,比如需要播出萝莉音/大叔音等。变速播放在影视播放类应用中普遍存在,在传统播放器Mediaplayer中这两个功能都比较难以实现,特别在低版本SDK中,而Exoplayer作为google官方推出的Mediaplayer替…...
服务器间迁移conda环境
注意:可使用迁移miniconda文件 or 迁移yaml文件两种方式,推荐前者,基本无bug! 一、迁移miniconda文件: 拷贝旧机器的miniconda文件文件到新机器: 内网拷贝:scp -r mazhf192.168.1.233:~/miniconda3 ~/ 外…...
docker高级
文章目录 1.Docker Compose1.1 介绍1.2 compose文件1.3 常用命令1.4 安装1.5 项目说明和构建1.5.1 手工启动1.5.2 compose 编排启动1.5.3 完善 compose.yml1.5.4 加入前端容器 2.UI管理平台2.1 portainer 3.镜像发布3.1 阿里云3.2 Docker Registry3.2.1 介绍3.2.2 安装3.2.3 测…...
Redis Stream基本使用及应用场景
一、概念 Redis Streams是Redis5.0提供的一种消息队列机制,支持多播的可持久化的消息队列,用户实现发布订阅的功能,借鉴了kafka设计。 二、常用命令 命令名称描述XADD key ID field value [field value ...]添加一条消息 key:St…...
DAY40|动态规划Part08|LeetCode: 121. 买卖股票的最佳时机 、 122.买卖股票的最佳时机II 、 123.买卖股票的最佳时机III
目录 LeetCode:121. 买卖股票的最佳时机 暴力解法 贪心法 动态规划法 LeetCode:122.买卖股票的最佳时机II 基本思路 LeetCode: 买卖股票的最佳时机III、IV 基本思路 C代码 LeetCode:121. 买卖股票的最佳时机 力扣题目链接 文字讲解:121. 买卖股票的最佳时…...
【安装及调试旧版Chrome + 多版本环境测试全攻略】
👨💻 安装及调试旧版Chrome 多版本环境测试全攻略 🌐 (新手友好版 | 覆盖安装/运行/调试全流程) 🕰️ 【背景篇】为什么我们需要旧版浏览器测试? 🌍 🌐 浏览器世界的“…...
基于MAX78000与CNN的智能螺栓巡检小车:嵌入式AI实战解析
1. 项目概述与核心思路在轨道交通的日常运维中,螺栓的紧固状态检查是一项繁重且关键的任务。无论是轨道上的紧固螺栓,还是列车转向架、轮对轴承上的关键螺栓,其松动或失效都可能引发严重的安全事故。传统的人工巡检方式不仅效率低下ÿ…...
基于STM32WL与LoRaWAN的远程空气质量监测系统全栈开发实践
1. 项目概述:构建一个远程空气质量监测系统最近在做一个挺有意思的玩意儿:一个能自己找地方待着、靠太阳能供电,然后把周围空气数据悄无声息传回来的远程监测终端。核心想法很简单,就是想知道某个犄角旮旯,比如工厂周边…...
UnityExplorer:如何在游戏运行时实时调试和修改Unity项目
UnityExplorer:如何在游戏运行时实时调试和修改Unity项目 【免费下载链接】UnityExplorer An in-game UI for exploring, debugging and modifying IL2CPP and Mono Unity games. 项目地址: https://gitcode.com/gh_mirrors/un/UnityExplorer UnityExplorer是…...
10.刷机变砖、IMEI 丢失、基带未知、触控失灵?一站式终极修复方案
摘要 本文面向具备基础计算机操作能力的维修从业者与高级用户,系统讲解当前主流品牌手机(华为、小米、OPPO、vivo、一加、苹果)的刷机与维修核心流程。内容涵盖底层引导架构差异、Fastboot/Recovery/DFU模式操作规范、分区表保护策略、驱动兼容性处理以及常见硬件故障的软件…...
条件Shapley值:用shapr包实现更公平的模型可解释性
1. 项目概述与核心价值 如果你在数据科学或机器学习领域工作过一段时间,尤其是在需要向业务方或非技术团队解释模型决策的场景里,你肯定遇到过这样的困境:模型预测准确率很高,但当别人问“为什么这个客户的贷款申请被拒绝了&#…...
HsMod终极指南:60+功能全面优化炉石传说游戏体验
HsMod终极指南:60功能全面优化炉石传说游戏体验 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod HsMod是基于BepInEx框架开发的炉石传说修改插件,提供超过60项实用功…...
3秒解锁微博图片溯源能力:重新定义你的信息追踪体验
3秒解锁微博图片溯源能力:重新定义你的信息追踪体验 【免费下载链接】WeiboImageReverse Chrome 插件,反查微博图片po主 项目地址: https://gitcode.com/gh_mirrors/we/WeiboImageReverse 当你在微博上看到一张惊艳的摄影作品,想要了解…...
UI-TARS桌面版:用自然语言控制电脑的智能GUI助手终极指南
UI-TARS桌面版:用自然语言控制电脑的智能GUI助手终极指南 【免费下载链接】UI-TARS-desktop The Open-Source Multimodal AI Agent Stack: Connecting Cutting-Edge AI Models and Agent Infra 项目地址: https://gitcode.com/GitHub_Trending/ui/UI-TARS-desktop…...
终极ncmdump指南:3分钟学会NCM转MP3,让网易云音乐真正属于你
终极ncmdump指南:3分钟学会NCM转MP3,让网易云音乐真正属于你 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM文件无法在其他设备播放而烦恼吗?ncmdump这款开源工具就是你…...
Unity Library文件夹不是缓存,而是项目运行时核心枢纽
1. Library文件夹不是“缓存”,而是Unity工程的“神经系统”在Unity项目里,只要有人提“工程太大”,十有八九会冒出一句:“删掉Library文件夹不就完了?”——这话我听过不下五十遍,从刚入行的实习生&#x…...
