Docker容器的数据管理

news2024/11/18 19:44:03

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。


我们在使用Docker的过程中,往往需要能查看容器内应用产生的数据,或者需要把容器内的数据进行备份,甚至多个容器之间进行数据的共享,这必然涉及容器的数据管理操作。

容器中管理数据主要有两种方式:

        → 数据卷(Data Volumes)

        → 数据卷容器(Data Volume Containers)

本文将首先梳理如何在容器内创建数据卷,并且把本地的目录或文件挂载到容器内的数据卷中。

接下来梳理如何使用数据卷容器在容器和主机、容器和容器之间共享数据,并实现数据的备份和恢复。

1. 数据卷

数据卷是一个可供容器使用的特殊目录,它绕过文件系统,可以提供很多有用的特性:

→ 数据卷可以在容器之间共享和重用;

→ 对数据卷的修改会立马生效;

→ 对数据卷的更新,不会影响镜像;

→ 卷会一直存在,直到没有容器使用;

数据卷的使用,类似于Linux下对目录或文件进行mount操作。

1.1 在容器内创建一个数据卷

在用docker run命令的时候,使用-v标记可以在容器内创建一个数据卷。

docker run -d -P --name nginx -v /tmp/nginx nginx 

查看数据卷:

多次使用-v标记可以创建多个数据卷:

docker run -d -P --name nginx -v /tmp/nginx1 -v /tmp/nginx2  nginx

查看数据卷:

1.2 挂载数据目录作为数据卷

使用-v标记也可以指定挂载一个本地的已有目录到容器中去作为数据卷:

# 将主机目录/tmp/nginx挂载到容器目录/data
docker run -d --name nginx -v /tmp/nginx:/data nginx 

注意:本地目录路径需是绝对路径,如目录不存在,docker会自动创建。

创建一个文件检查挂载情况:

Docker 挂载数据卷的默认权限是读写(rw),用户也可以通过,ro指定为只读:

#挂载加上ro让容器内挂载的数据卷只读
docker run -d --name nginx -v /tmp/nginx:/data:ro  nginx

验证只读权限:

1.3 挂载一个本地文件作为数据卷

有时候我们需要从本地挂载一些文件到容器内部,就可以使用这种方法,例如将本地的localtime文件挂载到容器,使容器和宿主机时间保持一致:

docker run -d --name nginx -v /etc/localtime:/etc/localtime  nginx

2. 数据卷容器

如果用户需要在容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。

数据卷容器其实就是一个普通的容器,专门用它提供数据卷供其他容器挂载使用方法如下:

首先,创建一个数据卷容器data,并在其中创建一个数据卷挂载到 /data:

docker run -d -v /data --name data  nginx

然后其他容器使用--volumes-from来挂载data容器中的数据卷:

 docker run -d --volumes-from data --name nginx-1  nginx
 docker run -d --volumes-from data --name nginx-2  nginx

容器 nginx-1和 nginx-2 都挂载同一个数据卷到相同的/ata目录。三个容器任何一方在该目录下的写入数据,其他容器都可以看到:

可以多次使用--volumes-from参数来从多个容器挂载多个数据卷。还可以从其他已经挂载了容器卷的容器来挂载数据卷:

docker run -d --volumes-from nginx-1 --name nginx-3  nginx

挂载进去后,能看到之前的数据:

注意:使用 --volumes-from参数所挂载数据卷的容器自身并不需要保持在运行状态。

如果删除了挂载的容器(包括data、nginx-1和nginx-2),并不会删除整个数据卷,nginx-3挂载的数据卷,里面还能看到数据:

3. 数据迁移/恢复

使用数据卷容器可以让用户在容器之间自由地升级和移动数据卷,可以利用数据卷容器对其中的数据卷进行备份、恢复,以实现数据的迁移。

3.1 利用数据卷容器迁移数据

3.1.1 备份数据

docker run --volumes-from data -v $(pwd):/tmp --name worker nginx tar cvf /tmp/bak.tar.gz /data

# 命令解说:
  --volumes-from data:挂载数据卷data
  $(pwd):/tmp:把宿主机当前目录挂载到容器的/tmp下
  tar cvf /tmp/bak.tar.gz /data:把数据卷data下的文件打成压缩包/tmp/bak.tar.gz。这个压缩包会通过-v命令再同步到宿主机目录

宿主机上执行命令当前目录下就有了备份tar包:

3.1.2 导入数据到挂载了另一个数据卷的容器里

A. 创建一个数据卷data1:

docker run -d -v /data --name data1  nginx

B. 将刚刚导出来的/tmp/bak.tar.gz数据包导入到data1中:

# 注意下面的命令要和1)在相同目录执行,同时使用--rm删除迁移数据时生成的容器
docker run --rm --volumes-from data1 -v $(pwd):/tmp nginx  tar xvf /tmp/bak.tar.gz

# 如果不和1)在相同目录下,-v后面就要执行路径,如:
docker run --rm --volumes-from data1 -v /tmp:/tmp nginx  tar xvf /tmp/bak.tar.gz

C. 启动一个nginx-2挂载data1这个数据卷,点进去会看到数据已经迁移过来了:

注意点:

  • 数据卷容器可以不启动(即容器退出停止)进行备份/恢复操作;

  • 数据从数据卷data迁移到data1中,注意data和data1两个数据卷挂载到容器的路径需要是一致的,否则会迁移失败。对比这两个数据卷创建的命令:

docker run -d -v /data --name data  nginx
docker run -d -v /data --name data1  nginx

至此,数据迁移完毕。

3.2 利用数据卷容器恢复数据

3.2.1 备份数据

步骤同3.1.1 

3.2.2 删除文件,模拟数据丢失

3.2.3 恢复数据

docker run --rm --volumes-from data -v /tmp:/tmp nginx  tar xvf /tmp/bak.tar.gz

检查数据恢复:

参考:《docker技术入门与实践》

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

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

相关文章

python学习笔记——数字

一、数字概述 1.Python 数字数据类型用于存储数值。 数据类型是不允许改变的,这就意味着如果改变数字数据类型的值,将重新分配内存空间。 2.可以使用del语句删除一些数字对象的引用。 del var1[,var2[,var3[....,varN]]]3.可以通过使用del语句删除单个或…

【python014】Python爬取并解析潮汐天气简报-潮历数据

1.欢迎点赞、关注、批评、指正,互三走起来,小手动起来! 【python014】Python爬取并解析潮汐天气简报-潮历数据,源代码下载【python014】Python爬取并解析潮汐天气简报-潮历数据,源代码下载【python014】Python爬取并解…

Aria2 任意文件写入漏洞

目录 Aria2介绍漏洞描述漏洞复现 Aria2介绍 Aria2是一个在命令行下运行,多协议,多来源下载工具(HTTP / HTTPS,FTP,BitTorrent,Metalink),内建XML-RPC用户界面。Aria提供RPC服务器&a…

2.9.GoogLeNet

GoogLeNet ​ 主要解决了什么样大小的卷积核是最合适的:有时使用不同大小的卷积核组合是有利的 1.Inception块 ​ Inception块由四条并行路径组成。 前三条路径使用窗口大小为11、33和55的卷积层,从不同空间大小中提取信息。 ​ 中间的两条路径在输入…

任务管理无忧:2024年最佳7款待办事项管理软件

本文将分享2024年值得关注的7大优质待办事项管理软件:PingCode、Worktile、滴答清单、时光序、好用便签、Todoist、ClickUp。 在寻找完美的待办事项管理工具时,你是否感觉到选择众多却难以决断?无论是保持日程有序,还是优化团队协…

Linux基本用法(上)

1.计算机主要由 硬件和软件 组成 2.操作系统是什么 ? 有什么作用? 操作系统是软件的一类 主要作用是协助用户调度硬件工作,充当用户和计算机之间的桥梁 3.常见的操作系统有哪些? PC端: Windows,Linux,MacOS 移动端: Android&#xff…

UART 通信协议

文章目录 一 简介二 电平标准三 引脚定义四 数据格式五 波特率 一 简介 ​ UART (Universal Asynchronous Receiver/Transmitter),通用异步收发器,是一种串行、异步、全双工通信协议。 串行:利用一条传输线,将数据一位一位地传送…

YOLOv8改进 | 主干网络 | ⭐重写星辰Rewrite the Stars⭐【CVPR2024】

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录 :《YOLOv8改进有效…

vulntarget-a

实际部署之后的win7 ip: 192.168.127.128 具体攻击过程如下 win7 扫描服务 使用fscan扫描win 7中的服务以及漏洞 ./fscan -h 192.168.127.128 扫出来一个ms17-010以及通达oa的漏洞,既然有永恒之蓝的,直接上MSF就行了 msf6 > search ms17-010 msf6…

架子鼓鼓谱制谱什么软件好 Guitar Pro怎么编鼓谱

对那些想学架子鼓又缺乏预算的朋友来说,通过架子鼓谱子软件来模拟学习也是个不错的选择。不过,由于市面上类似的软件过多,许多人都挑花了眼!那么,架子鼓谱子软件哪个比较好用呢?下面小编就来推荐几款好用的…

HTML--JavaScript操作DOM对象

目录 本章目标 一.DOM对象概念 ​编辑 二.节点访问方法 常用方法: 层次关系访问节点 三.节点信息 四.节点的操作方法 操作节点的属性 创建节点 删除替换节点 五.节点操作样式 style属性 class-name属性 六.获取元素位置 总结 本章目标 了解DOM的分类和节…

【论文精读】 | 基于图表示的视频抑郁症识别的两阶段时间建模框架

文章目录 0、Description1、Introduction2、Related work2.1 Relationship between depression and facial behaviours2.2 Video-based automatic depression analysis2.3 Facial graph representation 3、The proposed two-stage approach3.1 Short-term depressive behaviour…

18746 逆序数

这个问题可以使用归并排序的思想来解决。在归并排序的过程中,我们可以统计逆序数的数量。当我们合并两个已经排序的数组时,如果左边的数组中的元素��于右边的数组中的元素,那么就存在逆序,逆序数的数量就是…

力扣SQL50 按分类统计薪水 条件统计

Problem: 1907. 按分类统计薪水 文章目录 思路Code 思路 &#x1f468;‍&#x1f3eb; 参考题解 Code SELECT Low Salary AS category,SUM(CASE WHEN income < 20000 THEN 1 ELSE 0 END) AS accounts_count FROM AccountsUNION SELECT Average Salary category,SUM(C…

DBus快速入门

DBus快速入门 参考链接&#xff1a; 中文博客&#xff1a; https://www.e-learn.cn/topic/1808992 https://blog.csdn.net/u011942101/article/details/123383195 https://blog.csdn.net/weixin_44498318/article/details/115803936 https://www.e-learn.cn/topic/1808992 htt…

Vue3 Pinia的创建与使用代替Vuex 全局数据共享 同步异步

介绍 提供跨组件和页面的共享状态能力&#xff0c;作为Vuex的替代品&#xff0c;专为Vue3设计的状态管理库。 Vuex&#xff1a;在Vuex中&#xff0c;更改状态必须通过Mutation或Action完成&#xff0c;手动触发更新。Pinia&#xff1a;Pinia的状态是响应式的&#xff0c;当状…

JAVA中的异常:异常的分类+异常的处理

文章目录 1. 异常的分类1.1 Error1.2 Exception1.2.1 运行时异常1.2.2 非运行时异常 2.异常的处理2.1 try catch用法2.2 throws和throw的区别 1. 异常的分类 Throwable类&#xff08;表示可抛&#xff09;是所有异常和错误的超类&#xff0c;两个直接子类为Error和Exception分…

C++11新特性——智能指针——参考bibi《 原子之音》的视频以及ChatGpt

智能指针 一、内存泄露1.1 内存泄露常见原因1.2 如何避免内存泄露 二、实例Demo2.1 文件结构2.2 Dog.h2.3 Dog.cpp2.3 mian.cpp 三、独占式智能指针:unique _ptr3.1 创建方式3.1.1 ⭐从原始(裸)指针转换&#xff1a;3.1.2 ⭐⭐使用 new 关键字直接创建&#xff1a;3.1.3 ⭐⭐⭐…

敏感信息泄露wp

1.右键查看网页源代码 2.前台JS绕过&#xff0c;ctrlU绕过JS查看源码 3.开发者工具&#xff0c;网络&#xff0c;查看协议 4.后台地址在robots,拼接目录/robots.txt 5.用dirsearch扫描&#xff0c;看到index.phps,phps中有源码&#xff0c;拼接目录&#xff0c;下载index.phps …

【Go - context 速览,场景与用法】

作用 context字面意思上下文&#xff0c;用于关联管理上下文&#xff0c;具体有如下几个作用 取消信号传递&#xff1a;可以用来传递取消信号&#xff0c;让一个正在执行的函数知道它应该提前终止。超时控制&#xff1a;可以设定一个超时时间&#xff0c;自动取消超过执行时间…