Docker容器的数据管理

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


我们在使用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  nginxdocker 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.mzph.cn/pingmian/51119.shtml

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

相关文章

信创终端操作系统上vmware的命令行操作

原文链接:信创终端操作系统上vmware的命令行操作 Hello,大家好啊!今天给大家带来一篇关于在信创终端操作系统上使用命令行操作VMware的文章。通过命令行管理VMware虚拟机可以提高效率,特别是在需要批量操作或自动化管理时。本文将…

Python脚本批量将md文件转化成pdf

自己学编程时做了很多笔记,如今累积起来已经有几十个了,有很多图片链,怕哪天图床垮了图片就找不到了,于是就想把当时的 md 文件都转成 pdf 。 看了点文章,就开始实践: 1.下载 pandoc 和 CTex 2.ChatGpt …

VS2022创建C C++ GTEST工程

原因 需要对带代码进行单元测试,选择在Visual studio 中使用GTEST 框架。 实施 创建一个常规的控制台可执行程序。然后使用NUGET安装包 安装GTEST 头文件和动态库,同时安装GTEST ADAPTER。 安装可能提示找不到包源,此时需要根据提示配置一…

如何使用API快速打造健康医疗系统?

在数字医疗市场,数据是人们经常谈及的一个话题。当前,消费者医疗和健康应用收集的数据越来越多,电子健康记录的实施也创造出了大量有关病人的电子信息。 API接口在智慧医院跨网、跨机构之间的业务协同和数据共享交换中得到数据共享。支撑了医…

环境搭建-Docker搭建MySQL

Docker搭建MySQL 一、前言二、Docker安装MySQL5.7安装三、建立远程连接四、Docker安装MySQL8.0 一、前言 本文使用的Docker使用Windows搭建,Linux版本的搭建方式一样。 Windows系统搭建Docker 二、Docker安装MySQL5.7安装 拉取MySQL指定版本的镜像 docker pull …

Redis从入门到超神-(十二)Redis监听Key的过期事件

前言 试想一个业务场景,订单超过30分钟未支付需要做自动关单处理,修改订单状态,库存回退等,你怎么实现?方案一:可以使用定时任务扫表,通过支付状态和下单时间来判断是否支付过期。但是这样的方案是非常消耗…

2846. 边权重均等查询

Powered by:NEFU AB-IN Link 文章目录 2846. 边权重均等查询题意思路代码 2846. 边权重均等查询 题意 现有一棵由 n 个节点组成的无向树,节点按从 0 到 n - 1 编号。给你一个整数 n 和一个长度为 n - 1 的二维整数数组 edges ,其中 edges[i] [ui, vi…

实战:在Spring Boot中使用线程池

在处理高并发请求时,直接创建和销毁线程会带来巨大的开销。线程池通过重用现有的线程来减少这种开销,提高应用的性能和响应速度。SpringBoot提供了便捷的方式来配置和使用线程池。 在SpringBoot中使用线程池,可以有效提高应用的并发处理能力…

MacOS DockerDesktop配置文件daemon.json的位置

如果因为通过可视化页面修改配置错误导致客户端启动不起来,可以去找对应的配置文件通过 vim 修改后重启客户端 cd ~/.docker/

C#使用Clipper2进行多边形合并、相交、相减、异或的示例

Clipper2库介绍 开源库介绍: Clipper2在Github上的地址:https://github.com/AngusJohnson/Clipper2 Clipper2库对简单和复杂多边形执行交集(Intersection)、并集(Union)、差分(Difference&…

protobuf编译之后找不到isStringEmpty方法

原因: 与mysql的jar包冲突了 解决办法&#xff1a; 在MySQL中排除proto-java <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.22</version><scope>runtime</scope>&l…

Webpack 从入门到精通

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 一、Webpack 简介 二、Webpack 的核心概念 三、Webpack 的安装与配置 安装 Node.js 安装 Webpack 初始…

戴着苹果Vision Pro,如何吃花生米

6月底苹果Vision Pro国内开售&#xff0c;我早早到官网预订了一台。选择必要的配件&#xff0c;输入视力信息&#xff0c;定制符合自己视力的蔡司镜片。确实贵。把主要配件和镜片配齐&#xff0c;要3万6&#xff0c;比Pico、META的眼镜贵一个数量级。 Vision Pro出来后&#x…

C语言之.(结构体,枚举,共用体的应用)

C语言之.(结构体&#xff0c;枚举&#xff0c;共用体的应用) 结构体&#xff0c;套联合体&#xff0c;枚举的应用例子

C语言100基础拔高题(3)

1.利用递归函数调用方式&#xff0c;将所输入的5个字符&#xff0c;以相反顺序打印出来。 解题思路&#xff1a;通过反复调用一个打印最后一个元素的函数&#xff0c;来实现此功能。源代码如下: #include<stdio.h> void oposize(char str[], int len); int main() {//利…

Springboot集成Elasticsearch High Level REST Client实现增删改查实战

获取源码&#x1f6a9; 需要完整代码资料&#xff0c;请一键三连后评论区留下邮箱&#xff0c;安排发送&#xff01;&#xff01;&#xff01;&#x1f916; 什么是High Level REST Client&#xff1f; Elasticsearch 的 High Level REST Client 是一个用于与 Elasticsearch…

ARCGIS PRO DSK GraphicsLayer创建文本要素

一、判断GraphicsLayer层【地块注记】是否存在&#xff0c;如果不存在则新建、如果存在则删除所有要素 Dim GraphicsLayer pmap.GetLayersAsFlattenedList().OfType(Of ArcGIS.Desktop.Mapping.GraphicsLayer).FirstOrDefault() 获取当前map对象中的GetLayer图层 Await Queue…

Web 安全之 OOB(Out-of-Band)攻击详解

OOB&#xff08;Out-of-Band&#xff09;攻击是指一种网络安全攻击技术&#xff0c;攻击者利用目标系统与外部资源之间的通信来获取信息或检测漏洞是否存在。这种攻击方式不会通过目标系统的直接响应来显示攻击结果&#xff0c;而是通过外部信道&#xff08;如 DNS、HTTP、SMTP…

用python解释进程与协程(python实例二十八)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.创建进程池&#xff0c;异步执行多个任务 3.1 代码构思 3.2 代码示例 3.3 运行结果 4. 模拟协程堵塞 4.1 代码构思 4.2 代码示例 4.3 运行结果 5.总结 1.认识Python Python 是一个高…

Javascript前端面试(七)

JavaScript 部分 1. JavaScript 有哪些数据类型&#xff0c;它们的区别&#xff1f; JavaScript 共有八种数据类型&#xff0c;分别是 Undefined、Null、Boolean、 Number、String、Object、Symbol、BigInt。 其中 Symbol 和 BigInt 是 ES6 中新增的数据类型&#xff1a; ●Sym…