随笔 - 120  文章 - 0  评论 - 35  阅读 - 85万

docker之数据卷管理

docker之数据卷的备份和还原

1、现在利用镜像创建一个nginx的服务容器,并挂载一个数据卷

[root@docker ~]# docker run -v /data -d -p80:80 --name web1 centos_nginx:v4 
55a45a822c29a1e673d7ca2fb65a4d08fe6c896f5b4fa08fac4d45950e9e7f67

2、进入到容器内,向空的数据卷目录/data添加一些数据

复制代码
[root@docker ~]# docker exec -it web1 /bin/bash
[root@55a45a822c29 nginx-1.12.2]# cd /data/
[root@55a45a822c29 data]# ll
total 0
[root@55a45a822c29 data]# mkdir wadeson
[root@55a45a822c29 data]# vim wadeson/web1.text
bash: vim: command not found
[root@55a45a822c29 data]# vi wadeson/web1.text 
[root@55a45a822c29 data]# cat wadeson/web1.text 
this is in web1
复制代码

3、创建另外一个容器以上面web1容器作为共享数据卷,并将共享的数据卷进行tar压缩备份,并通过映射到本机host

[root@docker ~]# docker run -d --volumes-from web1 -v /root/backup:/backup centos tar cvf /backup/data.tar /data
081dd7df6371b86e33106664390a8a2780a1f8fc46d69b88adec2970f6d394cf

上面命令详解:

--volumes-from web1:表示创建的容器基于web1容器内的数据卷(即两个容器共享数据卷),web1的数据卷为/data

tar vcf /backup/data.tar  /data:创建的容器将/data进行tar压缩

-v /root/backup:/backup :将容器内的目录/backup与本机host的/root/backup进行映射

总的命令解释:创建一个新容器数据卷基于共享web1容器的数据卷,将数据卷进行tar压缩到容器内某个目录,并映射到本机host的目录

复制代码
[root@docker ~]# ll backup/data.tar 
-rw-r--r--. 1 root root 10240 Nov  2 22:24 backup/data.tar
[root@docker ~]# cd backup/
[root@docker backup]# ll
total 12
-rw-r--r--. 1 root root 10240 Nov  2 22:24 data.tar
[root@docker backup]# tar xf data.tar 
[root@docker backup]# cd data
[root@docker data]# ll
total 0
drwxr-xr-x. 2 root root 23 Nov  2 22:13 wadeson
[root@docker data]# cat wadeson/web1.text 
this is in web1
复制代码

而此次创建的容器的状态为exited也不会影响数据卷的备份:

于是基于数据卷的备份就ok了

 

现在将备份好的数据进行恢复还原:

1、创建一个空数据卷的容器web2:(创建的数据卷目录名称必须和备份的数据卷名称一致)

[root@docker ~]# docker run -it -v /data --name web2 centos /bin/bash
[root@090eb911d368 /]# ll /data0/
total 0

2、创建一个容器与web2共享数据卷,将备份的数据解压到数据卷/data中:

[root@docker ~]# docker run --volumes-from web2 -v /root/backup:/backup centos tar xvf /backup/data.tar
data/
data/wadeson/
data/wadeson/web1.text

启动的新容器与web2容器共享数据卷目录/data,而本机host将/root/backup下面的数据压缩文件映射到了新容器的/backup目录下,并执行了命令将数据压缩文件解压到了数据卷/data中

如果没有--volumes-from web2那么将不会有数据卷目录/data

3、创建一个新容器共享数据卷,查看数据内容:

[root@docker ~]# docker run -it --volumes-from web2 --name web3 centos sh -c "ls -l /data/wadeson" 
total 4
-rw-r--r--. 1 root root 16 Nov  3 02:13 web1.text

 

posted on   wadeson  阅读(1526)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示