【Docker 那些事儿】容器数据卷的妙手

这篇具有很好参考价值的文章主要介绍了【Docker 那些事儿】容器数据卷的妙手。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

随着容器删除数据卷,Kubernetes原理与实战,云原生,kubernetes,docker,容器,云计算


随着容器删除数据卷,Kubernetes原理与实战,云原生,kubernetes,docker,容器,云计算

🌟 前言

上一篇文章讲了 Docker 的数据卷:【Docker 那些事儿】容器数据卷的本手
 
本篇文章将继续承接上一篇,讲讲数据卷的恢复与迁移,以及管理
随着容器删除数据卷,Kubernetes原理与实战,云原生,kubernetes,docker,容器,云计算

1. 数据的恢复与迁移

容器对于宿主机来说就是一个进程,有时难免出现故障。

在生产环境中,人们很少会去修复一个容器,通常是将原来的容器删除,并重新运行一个新的容器继续提供服务。

这时就需要用到 Docker 数据卷的恢复与迁移技术。

🍑 恢复数据卷

恢复数据卷是将备份数据恢复到原容器中。

在上一篇文章中已经在宿主机中做好了数据备份,下面模拟数据丢失来对容器数据卷进行恢复。示例代码如下👇
随着容器删除数据卷,Kubernetes原理与实战,云原生,kubernetes,docker,容器,云计算
以上示例为了模拟数据丢失,将容器中文件 /var/volume1/a.txt var/volume2/b.txt 删除。

下面进行数据恢复,示例代码如下👇
随着容器删除数据卷,Kubernetes原理与实战,云原生,kubernetes,docker,容器,云计算
以上示例通过创建新容器对数据卷容器进行挂载,并将宿主机数据目录挂载到容器,再将解压后的数据存放到指定路径下。

下面进入容器查看数据是否成功恢复,示例代码如下👇
随着容器删除数据卷,Kubernetes原理与实战,云原生,kubernetes,docker,容器,云计算
从以上示例中可以看到,数据文件 a.txtb.txt 都已经成功恢复。

🍑 迁移数据卷

迁移数据卷是将备份数据恢复到新建容器中。

新建容器并解压备份文件到新的容器数据卷,示例代码如下:
随着容器删除数据卷,Kubernetes原理与实战,云原生,kubernetes,docker,容器,云计算
以上示例新建了容器 new-container,并挂载了数据卷目录 volume1volume2,但数据卷中并没有数据。

下面使用 Ctrl+P+Q 组合键退出当前容器终端,将备份数据迁移到容器 new-container 中,示例代码如下:
随着容器删除数据卷,Kubernetes原理与实战,云原生,kubernetes,docker,容器,云计算
从以上示例中可以看到,数据已经迁移成功。

建议新容器创建时挂载的数据卷路径与先前备份的数据卷路径保持一致,否则会出现数据恢复不全的情况,示例代码如下:
随着容器删除数据卷,Kubernetes原理与实战,云原生,kubernetes,docker,容器,云计算
以上示例中,路径没有保持一致,备份之后发现只恢复了 volume1 中的数据,volume2 中的数据没有恢复。

为了避免这种情况的发生,可以修改 -C 参数后面的路径,使数据正常恢复,示例代码如下:
随着容器删除数据卷,Kubernetes原理与实战,云原生,kubernetes,docker,容器,云计算
以上示例通过修改路径,使数据完整的备份到容器 new-container 中。

2. 管理数据卷

🍑 与容器关联

数据卷最大的优势是 可以用来做持久化数据,它的生命周期是独立的

Docker 不会在容器被删除后自动删除数据卷,也不存在类似垃圾回收的机制来处理没有被任何容器使用的数据卷。

但难免会有无用的数据卷,用户可以通过在删除容器的命令中添加参数,在删除容器的同时删除数据卷。

Docker数据卷可以通过命令与容器关联,删除容器时,数据卷也随之删除。

  • docker rm -v

删除容器时添加-v参数会将数据卷一并删除。

  • docker run --rm

创建、运行容器时添加 --rm 参数,容器运行结束时容器与数据卷会被一并删除。
 
如果不对数据卷进行及时清理,/var/lib/Docker/volumes/ 目录下就会产生许多残留目录。
 
但删除的数据卷是无法找回的,建议再三确认之后在执行操作。

下面创建一个容器并挂载数据卷,再将容器删除查看数据,示例代码如下:
随着容器删除数据卷,Kubernetes原理与实战,云原生,kubernetes,docker,容器,云计算
以上示例中,将挂载了数据卷的容器删除之后,容器挂载的数据卷还存在。

下面在删除容器的同时添加 -v 参数,删除该容器的数据卷,示例代码如下:
随着容器删除数据卷,Kubernetes原理与实战,云原生,kubernetes,docker,容器,云计算
以上示例在删除容器时添加了 -v 参数,数据卷也同时被删除,清理了无用的数据卷,节省了磁盘空间。

创建容器时,在命令中添加 --rm 参数,终止容器时会自动删除容器及数据卷,示例代码如下:
随着容器删除数据卷,Kubernetes原理与实战,云原生,kubernetes,docker,容器,云计算
以上示例在创建容器命令中添加了 --rm 参数,并执行了该命令。

下面通过另一个终端查看宿主机的挂载目录,示例代码如下:
随着容器删除数据卷,Kubernetes原理与实战,云原生,kubernetes,docker,容器,云计算
上述示例中,容器创建成功,数据卷目录也挂载成功。

下面通过 exit 命令退出终端,并再次查看宿主的挂载目录,示例代码如下:
随着容器删除数据卷,Kubernetes原理与实战,云原生,kubernetes,docker,容器,云计算
以上示例中,使用 exit 命令退出容器之后,数据卷也被删除。

🍑 命令管理

Docker 中有专门的容器数据卷命令供用户来管理容器数据卷。下面通过示例介绍容器数据卷命令的一些参数。

  • create

创建数据卷。

示例代码如下:
随着容器删除数据卷,Kubernetes原理与实战,云原生,kubernetes,docker,容器,云计算
以上示例中通过在 docker volume 命令中添加 create 参数,创建出了命名为 test 的新容器数据卷。

  • ls

列出数据卷。

示例代码如下:
随着容器删除数据卷,Kubernetes原理与实战,云原生,kubernetes,docker,容器,云计算
以上示例通过 docker volume 命令添加 ls 参数查看数据卷,可以看到刚刚创建的test数据卷。

另外,在宿主机的挂载目录中也可以查看数据卷信息,示例代码如下:
随着容器删除数据卷,Kubernetes原理与实战,云原生,kubernetes,docker,容器,云计算
上述示例通过宿主机挂载目录查看容器数据卷,与数据卷目录下查看到的结果相同。

  • inspect

显示一个或多个数据卷的详细信息。

首先创建一个容器,并为其挂载刚刚创建的容器数据卷,示例代码如下:
随着容器删除数据卷,Kubernetes原理与实战,云原生,kubernetes,docker,容器,云计算
以上示例将刚刚创建的容器数据卷 test 作为新容器 test-container 的数据卷,

也就是将 test 数据卷在宿主机上的目录 /var/lib/Docker/volumes/test/_data 挂载到容器内的 /volume 中。

接着,通过命令查看容器 test-container 的数据卷信息,示例代码如下:
随着容器删除数据卷,Kubernetes原理与实战,云原生,kubernetes,docker,容器,云计算
上述示例通过查看容器挂载信息得知容器 test-container 成功挂载 test 数据卷。

另外,还可以在宿主机中使用 docker inspect 命令查看指定数据卷的信息,示例代码如下:
随着容器删除数据卷,Kubernetes原理与实战,云原生,kubernetes,docker,容器,云计算

  • rm

删除一个或多个数据卷。

首先将容器停止并删除,再查看数据卷信息,示例代码如下:
随着容器删除数据卷,Kubernetes原理与实战,云原生,kubernetes,docker,容器,云计算
以上示例中,容器 test-container 已经被删除,但数据卷 test 仍然存在。

下面通过在命令中添加 rm 参数对数据卷 test 进行删除并查看数据卷信息,示例代码如下:
随着容器删除数据卷,Kubernetes原理与实战,云原生,kubernetes,docker,容器,云计算
以上示例中,数据卷被成功删除。

  • prune

删除所有未被使用的数据卷。

在前面的示例中可以看到,本地残留了一些未被使用的数据卷,用户可以使用一条命令将其删除。示例代码如下:
随着容器删除数据卷,Kubernetes原理与实战,云原生,kubernetes,docker,容器,云计算
以上示例通过命令删除了三个未使用的数据卷,释放了 33B 的空间。

在执行命令时,Docker 会询问是否要删除没有被使用的数据卷,如果确定,在终端输入"y" 即可,否则输入"N"。

下面查看数据卷是否被成功删除,示例代码如下:
随着容器删除数据卷,Kubernetes原理与实战,云原生,kubernetes,docker,容器,云计算
从以上示例中可以看到,没有被使用的数据卷已经被成功删除,本地没有数据卷。

3. 总结

这两篇篇文章详细全面地讲解了:
 
使用 Docker 数据卷长久存储容器数据、以 Docker 容器作为容器数据卷、备份 Docker 数据卷中的数据、恢复 Docker 容器数据以及迁移和删除 Docker 容器数据卷等数据卷相关知识。
 
相信大家已经可以熟练运用容器数据卷技术。文章来源地址https://www.toymoban.com/news/detail-779688.html

到了这里,关于【Docker 那些事儿】容器数据卷的妙手的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【docker 实战】Docker数据卷的清理

    Docker 在长时间使用的情况下,经常需要删除旧的容器并创建新的容器,长此以往,Docker 的数据卷 volumes 会产生了非常多的僵尸文件,这些将是稳健大都是未绑定容器的目录 在 Docker 1.9 以上的版本中,官方提供用于查询僵尸文件的命令: Docker 1.13 引入了类似于 Linux 上 df 的命

    2024年02月07日
    浏览(51)
  • Docker之数据卷的使用

      🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的博客专栏《Docker之数据卷的使用》。🎯🎯 🎁如果感觉还不错的话请给我关注加三连吧!🎁🎁           Docker 提供了多种方式来管理容器中的数据,以确保 数

    2024年01月21日
    浏览(48)
  • 【后端那些事儿】Redis设计与实现(一) 数据结构,耐心看完你比Redis还懂Redis!

    本文章主要为了帮助读者认识Redis的数据结构,并深入了解Redis的数据结构,创作不易,希望得到大家的点赞、收藏、关注!谢谢! 1.1简单动态字符串(SDS)的定义 Redis的简单动态字符串(Simple Dynamic String,SDS)是Redis内部使用的字符串表示方式。SDS是一种可以自动扩展长度的字

    2024年01月22日
    浏览(40)
  • Docker基本使用【数据卷的挂载及常用命令】

    镜像和容器: 当我们利用docker安装应用时,Docker会自动搜索并下载应用的镜像(image),镜像不仅包含应用本身还包含应用所需要的环境、配置、系统函数库。Docker会在运行镜像时创建一个隔离的环境,称为容器(container) 输入以下命令: 命令解读: docker run :创建并运行

    2024年03月19日
    浏览(42)
  • [apue] 进程控制那些事儿

    在介绍进程的创建、启动与终止之前,首先了解一下进程的唯一标识——进程 ID,它是一个非负整数,在系统范围内唯一,不过这种唯一是相对的,当一个进程消亡后,它的 ID 可能被重用。不过大多数 Unix 系统实现延迟重用算法,防止将新进程误认为是使用同一 ID 的某个已

    2024年04月08日
    浏览(49)
  • HTTP的那些事儿

    超文本传输协议(Hyper Text Transfer Protocol,HTTP),它是 在计算机世界中的两个点之间传递文本,图片,多媒体等超文本文件的协议 。HTTP处在 数据链路层,网络层,传输层,应用层 中的应用层,基于TCP之上。 应用广泛,各大网站,APP都离不开HTTP的身影 无状态,和TCP不同,

    2023年04月15日
    浏览(53)
  • Redis那些事儿(一)

            说到redis大家都不陌生,其中包括:共有16个数据库,默认为第0个数据库;数据以key-value键值的形式存储;数据类型包括String、List、Hash、Set等,其中最常用的是字符串;是单线程的、基于内存的,主要受内存和网络带宽的影响… 这些都是基于Redis的基础理论知识

    2024年02月05日
    浏览(56)
  • Redis那些事儿(三)

            接着上一篇Redis那些事儿(二) ,这一篇主要介绍Redis基于Geo数据结构实现的地理服务,它提供了一种方便的方式来存储和处理与地理位置相关的数据。Geo数据结构是Redis的一种特殊数据类型,用于存储地理位置信息,每个地理位置被表示为经度和纬度的坐标,可

    2024年02月05日
    浏览(61)
  • 【C++11那些事儿(一)】

    在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。不过由于TC1主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标

    2023年04月14日
    浏览(40)
  • [apue] 进程环境那些事儿

    众所周知,main 函数为 unix like 系统上可执行文件的\\\"入口\\\",然而这个入口并不是指链接器设置的程序起始地址,后者通常是一个启动例程,它从内核取得命令行参数和环境变量值后,为调用 main 函数做好安排。main 函数原型为: 这是 ISO C 和 POSIX.1 指义的,当然还存在下面几种

    2024年02月11日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包