Docker 数据管理

文章目录

  • 前言
  • 1、Dcoker 文件体系
  • 2、volume挂载案例
    • 2.1、挂载运行一个容器实例
      • 方法1
      • 方法2
  • 3、volumes-from 案例
  • 4、备份/恢复数据卷
  • 5、删除数据卷

前言

为什么要有数据管理?
因为:

  • Docker 是不提供持久化的 ,容器是不稳定的;
  • 一个容器一个服务;
  • 多个容器可能要共享一块数据;
  • docker容器每次创建都是新开一个容器,不必理会旧的容器什么状态。

这种情况下,每次的更新部署非常方便,但是这样一来所有的数据就需要持久化存储到宿主机里。就引出了docker的数据管理知识。

1、Dcoker 文件体系

在这里插入图片描述
docker 数据卷默认位置:

/var/lib/docker/volumes

挂载以后,目录是共享的;数据不应该放到容器中,而是要求宿主机分一块目录给容器用来存放数据。

删除容器,是不会删除volumes目录的(强制除外)

2、volume挂载案例

2.1、挂载运行一个容器实例

方法1

docker run -it --name centosTest -v /opt/data centos /bin/bash

此刻就进入了容器内部。

然后查看确实产生了 /opt/data 目录,在该目录下新建一个123 文件,并去查看宿主机目录下是否存在:
在这里插入图片描述
然后先查看 容器:
在这里插入图片描述
查看元数据及文件新增
在这里插入图片描述

[{"Id": "dee355965bca29c9355a5e9bff5132f89337b59b4e30c2459e89b6f64238ad2f","Created": "2023-08-06T11:12:05.096013057Z","Path": "/bin/bash","Args": [],"State": {"Status": "running","Running": true,"Paused": false,"Restarting": false,"OOMKilled": false,"Dead": false,"Pid": 14786,"ExitCode": 0,"Error": "","StartedAt": "2023-08-06T11:12:05.96660496Z","FinishedAt": "0001-01-01T00:00:00Z"},"Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6","ResolvConfPath": "/var/lib/docker/containers/dee355965bca29c9355a5e9bff5132f89337b59b4e30c2459e89b6f64238ad2f/resolv.conf","HostnamePath": "/var/lib/docker/containers/dee355965bca29c9355a5e9bff5132f89337b59b4e30c2459e89b6f64238ad2f/hostname","HostsPath": "/var/lib/docker/containers/dee355965bca29c9355a5e9bff5132f89337b59b4e30c2459e89b6f64238ad2f/hosts","LogPath": "/var/lib/docker/containers/dee355965bca29c9355a5e9bff5132f89337b59b4e30c2459e89b6f64238ad2f/dee355965bca29c9355a5e9bff5132f89337b59b4e30c2459e89b6f64238ad2f-json.log","Name": "/centosTest","RestartCount": 0,"Driver": "overlay2","Platform": "linux","MountLabel": "","ProcessLabel": "","AppArmorProfile": "","ExecIDs": null,"HostConfig": {"Binds": null,"ContainerIDFile": "","LogConfig": {"Type": "json-file","Config": {}},"NetworkMode": "default","PortBindings": {},"RestartPolicy": {"Name": "no","MaximumRetryCount": 0},"AutoRemove": false,"VolumeDriver": "","VolumesFrom": null,"ConsoleSize": [50,180],"CapAdd": null,"CapDrop": null,"CgroupnsMode": "host","Dns": [],"DnsOptions": [],"DnsSearch": [],"ExtraHosts": null,"GroupAdd": null,"IpcMode": "private","Cgroup": "","Links": null,"OomScoreAdj": 0,"PidMode": "","Privileged": false,"PublishAllPorts": false,"ReadonlyRootfs": false,"SecurityOpt": null,"UTSMode": "","UsernsMode": "","ShmSize": 67108864,"Runtime": "runc","Isolation": "","CpuShares": 0,"Memory": 0,"NanoCpus": 0,"CgroupParent": "","BlkioWeight": 0,"BlkioWeightDevice": [],"BlkioDeviceReadBps": [],"BlkioDeviceWriteBps": [],"BlkioDeviceReadIOps": [],"BlkioDeviceWriteIOps": [],"CpuPeriod": 0,"CpuQuota": 0,"CpuRealtimePeriod": 0,"CpuRealtimeRuntime": 0,"CpusetCpus": "","CpusetMems": "","Devices": [],"DeviceCgroupRules": null,"DeviceRequests": null,"MemoryReservation": 0,"MemorySwap": 0,"MemorySwappiness": null,"OomKillDisable": false,"PidsLimit": null,"Ulimits": null,"CpuCount": 0,"CpuPercent": 0,"IOMaximumIOps": 0,"IOMaximumBandwidth": 0,"MaskedPaths": ["/proc/asound","/proc/acpi","/proc/kcore","/proc/keys","/proc/latency_stats","/proc/timer_list","/proc/timer_stats","/proc/sched_debug","/proc/scsi","/sys/firmware"],"ReadonlyPaths": ["/proc/bus","/proc/fs","/proc/irq","/proc/sys","/proc/sysrq-trigger"]},"GraphDriver": {"Data": {"LowerDir": "/var/lib/docker/overlay2/6b5f1d67ac77a57910dbe442356bec38416d3fa9f355c9810a04de8a0032c20a-init/diff:/var/lib/docker/overlay2/0351cac31df5ec6bd716f7dd314842417100097dcad45cdbf3b2b602df85ac0d/diff","MergedDir": "/var/lib/docker/overlay2/6b5f1d67ac77a57910dbe442356bec38416d3fa9f355c9810a04de8a0032c20a/merged","UpperDir": "/var/lib/docker/overlay2/6b5f1d67ac77a57910dbe442356bec38416d3fa9f355c9810a04de8a0032c20a/diff","WorkDir": "/var/lib/docker/overlay2/6b5f1d67ac77a57910dbe442356bec38416d3fa9f355c9810a04de8a0032c20a/work"},"Name": "overlay2"},"Mounts": [{"Type": "volume","Name": "75d6a87411d050df05a6a6b9179ff9abbd89afc34641ce7bbf435d6671172565","Source": "/var/lib/docker/volumes/75d6a87411d050df05a6a6b9179ff9abbd89afc34641ce7bbf435d6671172565/_data","Destination": "/opt/data","Driver": "local","Mode": "","RW": true,"Propagation": ""}],"Config": {"Hostname": "dee355965bca","Domainname": "","User": "","AttachStdin": true,"AttachStdout": true,"AttachStderr": true,"Tty": true,"OpenStdin": true,"StdinOnce": true,"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd": ["/bin/bash"],"Image": "centos","Volumes": {"/opt/data": {}},"WorkingDir": "","Entrypoint": null,"OnBuild": null,"Labels": {"org.label-schema.build-date": "20210915","org.label-schema.license": "GPLv2","org.label-schema.name": "CentOS Base Image","org.label-schema.schema-version": "1.0","org.label-schema.vendor": "CentOS"}},"NetworkSettings": {"Bridge": "","SandboxID": "f35da6a5c2575f9ed03c6474b59c0358c9b3944ce5f0fb6b20655df61a2dc185","HairpinMode": false,"LinkLocalIPv6Address": "","LinkLocalIPv6PrefixLen": 0,"Ports": {},"SandboxKey": "/var/run/docker/netns/f35da6a5c257","SecondaryIPAddresses": null,"SecondaryIPv6Addresses": null,"EndpointID": "ba7973b2a91ca6dc3e75351903537ecd4158116edfc2871a2c94a8d77a19cc95","Gateway": "172.17.0.1","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"IPAddress": "172.17.0.2","IPPrefixLen": 16,"IPv6Gateway": "","MacAddress": "02:42:ac:11:00:02","Networks": {"bridge": {"IPAMConfig": null,"Links": null,"Aliases": null,"NetworkID": "348aaaac8b83d35b8f2b750e66eefa696566a774d5791710e2b15e0e3d101332","EndpointID": "ba7973b2a91ca6dc3e75351903537ecd4158116edfc2871a2c94a8d77a19cc95","Gateway": "172.17.0.1","IPAddress": "172.17.0.2","IPPrefixLen": 16,"IPv6Gateway": "","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"MacAddress": "02:42:ac:11:00:02","DriverOpts": null}}}}
]

里面的 Mounts 部分 是挂载的意思:
在这里插入图片描述
然后查看对应的宿主机位置:

ls /var/lib/docker/volumes/75d6a87411d050df05a6a6b9179ff9abbd89afc34641ce7bbf435d6671172565/_data

在这里插入图片描述
这里确实看到了之前创建的文件。

然后进入宿主机目录下新增文件,看容器内部是否会出现同样的文件:
在这里插入图片描述
转到容器终端窗口:
在这里插入图片描述
同样产生了 456文件。两边是互通的。

方法2

命令:

docker run -it --name centosTest2 -v /opt/data:/data centos /bin/bash

在这里插入图片描述
这种方式对于容器来说是一样的,对于宿主机来说,多出了如下目录:
在这里插入图片描述
需要修改主机目录时,可以使用该命令。

3、volumes-from 案例

引用数据卷命令:

docker run -it --name cen1 --volumes-from centosTest centos

在这里插入图片描述

4、备份/恢复数据卷

备份:

docker run --rm --volumes-from data -v $(pwd):/backup centos tar cvf /backup/data.tar /opt/data

恢复:

docker run --rm --volumes-from data -v $(pwd):/backup centos tar xvf /backup/data.tar -C /

释义:
docker run --rm ----- 启动一个新的容器,执行完毕删除
–volumes-from data ------- data容器中挂载卷
-v $(pwd):/backup --------挂载当前目录到容器中为backup
cvf /backup/data.tar /opt/data --------- 备份/opt/data目录(即卷中所有的数据)为data.tar

xvf /backup/data.tar -C / ---------- 解压data.tar 到根目录/ ,因tar归档中已包含了/opt/data路径

5、删除数据卷

docker rm -v data

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

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

相关文章

mac ssh连接另一台window虚拟机vm

vmware配置端口映射 编辑(E) > 虚拟网络编辑器(N)... > NAT设置(S)... window防火墙,入站规则添加5555端口 控制面板 > 系统和安全 > Windows 防火墙>高级设置>入站规则>新建规则... tips windows查看端口命令:netstat -ano | f…

【从零学习python 】14.Python字符串常见操作(二)

文章目录 count替换内容分隔splitrsplitsplitlinespartitionrpartition 修改大小写capitalizetitlelowerupper 空格处理1. ljust2. rjust3. center4. lstrip5. rstrip6. strip 字符串拼接字符串运算符进阶案例 count 返回 str 在 start 和 end 之间在 mystr 里面出现的次数。 …

EthereumArbitrumOptimism节点搭建

Ethereum节点搭建 Ethereum节点搭建可基于源码或基于docker。这里介绍基于docker的方式搭建。 拉取镜像 docker pull ethereum/client-go 建议将镜像源配置为阿里云的镜像源 启动容器 docker run -itd -p 8545:8545 -p 30303:30303 --name eth -v /data/eth:/root/.ethere…

java-IDEA MAVEN查看依赖树,解决jar包重复和冲突

如果这里面的依赖关系有红线,就说明有包冲突,一般都是版本不一致,可以在idea里下一个插件Maven Helper,点击install并重启IDEA 打开pom.xml文件,在下方会出现Dependency Analyzer,选择它会出现重复依赖列表,选择对应的依赖,右键红…

BI技巧丨利用Index计算半累计

在实际的业务场景中,特别是财务模块和库存管理模块,经常需要我们针对每个月的期初期末进行相关指标计算,这也是我们之前曾经提到的Calculate基础应用——半累计计算。 现在我们也可以通过微软新推出的Index开窗函数来解决这一问题。 INDEX函…

Mapbox加载天地图CGCS2000矢量瓦片地图

1.背景 最近在做天地图的项目,要基于MapBox添加CGCS2000矢量切片数据,但是 Mapbox 只支持web 墨卡托(3857)坐标系的数据。Github有专业用户修改了mapbox-gl的相关代码,支持CGCS2000的切片数据加载,并且修改…

dji uav建图导航系列(一)建图

文章目录 1、uav + rplidir雷达1.2、思岚激光雷达1.3、dji uav的launch文件2、cartographer激光建图2.1、启动文件2.2、config修改2.3、建图过程3、融合odom+laser建图1、uav + rplidir雷达 思岚激光雷达frame为base_laser_link, 无人机frame为base_footprint。 文件uav_lid…

【Python】同步、异步、堵塞、非堵塞、回调

原文作者:我辈李想 版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。 文章目录 一、Python中的同步异步二、Python中的堵塞非堵塞三、Python中的回调四、异步编程 一、Python中的同步异步 在 Python 中,同步和…

【OS】操作系统中,页框/页帧见解

文章目录 页框大小的取决因素页框大小的查询不同大小的页框,适用于哪些场景? 页框大小的取决因素 页框(Page Frame)是指操作系统中用于存储页面的物理内存块,其大小通常由操作系统的设计和硬件架构决定。在现代计算机…

手动实现 Spring 底层机制 实现任务阶段一编写自己 Spring 容器-准备篇【2】

😀前言 手动实现 Spring 底层机制的第2篇 实现了任务阶段一编写自己 Spring 容器-准备篇【2】 🏠个人主页:尘觉主页 🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的…

docker 删除镜像文件

docker 容器里面太多镜像,D盘满了 四 查看和移除镜像 1 查看镜像 docker images 2 移除镜像命令 docker rmi 镜像名称 # 只输入前四位即可 五 实际有效操作 清除所有不使用的资源 docker system prune 这个命令将会删除所有不使用的镜像、容器和数据卷等资…

js 动态设置transformOrigin

transformOrigin属性用于指定元素变换的原点。 // 获取要设置的元素 const element document.getElementById(your-element-id);// 设置transformOrigin属性 element.style.transformOrigin 50% 50%; // 以元素中心为原点// 或者使用变量来设置 const x 0; // x坐标 const …

后端进阶之路——深入理解Spring Security配置(二)

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 「推荐专栏」: ★java一站式服务 ★ ★前端炫酷代码分享 ★ ★ uniapp-从构建到提升★ ★ 从0到英雄,vue成神之路★ ★ 解决算法,一个专栏就够了★ ★ 架…

python操作数据库

python操作数据库 首先安装数据插件 pip install pymysqlfrom pymysql import Connection # 引入数据库第三方包# 创建链接 conn Connection(host"localhost", # 主机名ipport3306,user"root",# 用户名password"123456" # 密码 )print(con…

【STM32RT-Thread零基础入门】 2. 新建RT-Thread项目

硬件:STM32F103ZET6、ST-LINK、usb转串口工具 文章目录 前言一、新建RT-Thread项目二、项目结构三、构建项目四、下载程序(调试器下载)五、终端交互总结 前言 RT-Thread的全称是Real Time Thread,顾名思义,它是一个嵌…

UE中低延时播放RTSP监控视频解决方案

第1章 方案简介 1.1 行业痛点 在各种智慧城市、智慧社区、智慧水利、智慧矿山等数字孪生项目中,经常使用通UE来开发三维可视化场景。在这些场景中通常都需要把现场的各种监控视频在UE的可视化场景中接入,主要包含海康威视、大华、宇视、华为等众多监控…

如何理解容量测试?如何做容量测试?

1、如何理解容量测试? 容量测试,是性能测试里的一部分,它的目的是测量系统的最大容量,为系统扩容、性能优化提供参考,节省成本投入,提高资源利用率。就是运用各种方法和工具在这种复杂的情况下去不断验证容…

Android JNI--C语言基础

1, #include 相当于java的导包操作 例如&#xff1a;#include <stdio.h> <> 代表寻找系统的资源 “” 代表寻找我们自己写的资源 .h .hpp(声明文件 头文件) .c .cpp &#xff08;实现文件&#xff09; 2&#xff0c;代码结构 int main() { // 函数的主入…

Rust 编程小技巧摘选(8)

目录 Rust 编程小技巧(8) 1. 取整函数 floor() 2. 取整函数ceil() 3. 取整函数 round() 4. 保留小数位数 5. 字符串转整数 unwrap() unwrap_or() Rust 编程小技巧(8) 1. 取整函数 floor() floor函数对浮点数进行向下取整 示例代码&#xff1a; fn main() {let x: …

[C++项目] Boost文档 站内搜索引擎(5): cpphttplib实现网络服务、html页面实现、服务器部署...

在前四篇文章中, 我们实现了从文档文件的清理 到 搜索的所有内容: 项目背景: &#x1fae6;[C项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍…文档解析、处理模块parser的实现: &#x1fae6;[C项目] Boost文档 站内搜索引擎(2): 文档文本解析模块…