社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

手把手,教你定期备份全平台Docker数据,不惧数据丢失,把极空间打造容器中枢

可爱的小Cherry • 1 月前 • 114 次点击  

大家好,这里是Cherry,喜爱折腾、玩数码,热衷于分享自己的数码玩耍经验~

折腾了数十款NAS和数百个Docker容器项目,关注我,每日获得docker玩法

如果喜欢本文,请下方点击免费的点赞、在看

图片
🔺玩法汇总:公众号首页,左下角点击教程合集
项目均来源互联网,如有侵权,后台私信联系删除




前言

最近,我在重新整理家里的NAS,打算把原来分散的容器服务迁移到性能更强劲的极空间私有云中,满足存储、服务、计算的分离,提高实现设备性能的利用率。

在迁移过程中,我发现有一些早期部署的容器项目,使用的是docker volume来存储数据,而不是Bind映射模式。这让我不得不感慨自己运气真好,没有遇到硬盘损坏数据无法恢复的事件,不然我这些从不备份的卷数据肯定早就丢了。

为了避免后续数据丢失的风险,我决定利用极空间私有云,做好docker volume数据的定时备份,继续加强数据安全的“3-2-1”原则。

点我转跳--->NAS新手向,数据备份“3-2-1”原则应该怎么做?极空间私有云备份指南

⭐关于极空间私有云数据安全“3-2-1”怎么做,感兴趣的朋友可以阅读我的上一篇专题文章。

今天,我们要介绍的工具叫docker-volume-backupDocker,它是一款轻量级的Docker配套容器,支持将Docker卷定器或一次性备份本地目录、S3、WebDAV、Azure Blob、Dropbox 、SSH兼容存储中,并轮换使用旧备份(如果已配置)。它还支持多种对称/非对称加密备份,支持消息通知。




一、docker数据存储的两种方法

Docker 在存储数据资料的时候,提供了两种存储方式。

■第一种: 是我们常用的Bind模式,将容器内的装载路径映射到NAS里,让我们可以在NAS文件管理页面直接访问和修改。

QQ_1741068029912.png

可以在极空间的文件管理里直接对容器内容进行增、删、改。

QQ_1741068055722.png

■第二种: docker提供的卷模式(Docker Volume),通过自动生成一个存储路径来绑定容器内部路径。卷模式支持使用docker cli指令来进行复制、迁移、删除等,但是想要访问卷文件内部的资料,就不如bind模式方便。

QQ_1741068186881.png

通过指令【docker volume list】可以查看NAS里所有的卷。

QQ_1741079535999.png

通过指令【docker volume inspect 卷ID】可以查看卷的真实路径,这个路径我们在NAS前端是看不到的,只能通过SSH进行操作。因此我们使用NAS自带的备份和同步工具,也没办法备份这些数据。

所以,我们今天的目的,就是需要通过部署容器项目,来实现数据卷的定时备份和管理。

QQ_1741068274497.png




二、极空间配置WebDav/SFTP/本地目录

1、极空间打开SSH(可选)

在本文教程中,极空间是作为存储仓库而存在的,我们的主要目的是为了将其它docker容器的数据可以定时备份到极空间中。

当然,并不是说极空间本身不支持备份docker 卷,而是因为极空间目前支持将所有容器路径装载为bind模式,基本上用不到容器卷。如果我们的确想要将极空间自身的容器卷也备份的话,则需要打开极空间的SSH功能进行操作。

⭐注意,打开SSH意味着你知道哪些可以做,哪些不可以做,必须对linux和极空间zos系统有深度的认识,否则会造成无法评估的后果!此外,开启极空间SSH功能,意味着会暂时失去官方技术支持(重置系统后可恢复)!!

QQ_1741063660271.png

2、极空间创建备份仓库

首先,我们要先预创建一个存储路径,比如SATA存储14/volumeback,这个目录用来存储未来的docker volume备份文件。

QQ_1741100238501.png

接着,在系统设置——文件及共享服务中,打开WebDav和SFTP的开关。WebDav默认使用5005(http),5006(https)端口;SFTP默认使用2002端口。

QQ_1741068506557.png




三、备份Docker 卷数据

1、环境变量解析

完整的备份环境变量,比如S3\Dropbox等可以看下面的配置文件。我这里重点挑选极空间私有云本身可以提供的服务,比如webdav、local等介绍。

https://offen.github.io/docker-volume-backup/reference/ 

对于非极空间私有云的容器备份,建议大家选择webdav方法;而极空间自身的容器备份,直接选择本地存储即可。

#-----------------以下为WebDav备份----------------#极空间WEBDAV地址WEBDAV_URL="http://192.168.0.129:5055"极空间WEBDAV路径WEBDAV_PATH="/sata14-15011111111/volumeback"极空间账号、密码WEBDAV_USERNAME="15011111111"WEBDAV_PASSWORD="123456789"禁用SSL证书验证WEBDAV_URL_INSECURE="false"#-----------------以下为SFTP备份----------------#极空间SSH地址SSH_HOST_NAME="192.168.0.129"极空间SSH端口SSH_PORT="2022"极空间存储真实路径SSH_REMOTE_PATH="/sata14-15011111111/volumeback"极空间账号、密码SSH_USER="15011111111"SSH_PASSWORD="123456789"SSH密钥存放位置SSH_IDENTITY_FILE="/root/.ssh/id_rsa"SSH密钥SSH_IDENTITY_PASSPHRASE=""#-----------------以下为备份加密规则----------------#加密选项互斥,只能选择一种方式。对称加密(GPG密码)GPG_PASSPHRASE=""非对称加密(GPG公钥环,多行值可用管道符)GPG_PUBLIC_KEY_RING=""对称加密(age密码)AGE_PASSPHRASE=""非对称加密(age公钥,逗号分隔多个密钥,支持age和ssh密钥)AGE_PUBLIC_KEYS=""#-----------------以下为定时清理规则----------------#保留最近N天的备份(0或正整数启用,-1禁用)BACKUP_RETENTION_DAYS="-1"清理操作时间缓冲(防止备份时长波动导致误删),s(秒)、m(分)、h(小时)。BACKUP_PRUNING_LEEWAY="1h"#-----------------备份计划----------------#支持cron格式。若未设置值,默认每天午夜运行。BACKUP_CRON_EXPRESSION="@daily"存储本地备份时,再创建一个最新备份的硬链接。BACKUP_LATEST_SYMLINK="backup.latest.tar.gz"


2、备份方法

首先,为了确保数据备份的完整性,我们需要停止待备份的容器! 接着通过SSH工具访问不同的Linux系统后台,完善并执行下面的Docker Cli就可以进行卷数据备份。

🔻以WebDav为例,运行的时候删掉复制成一行,用空格间隔。

docker run --name=backup \-v /etc/timezone:/etc/timezone:ro \-v /etc/localtime:/etc/localtime:ro \-v 待备份卷名1:/backup/data1 \-v 待备份卷名2:/backup/data2 \-v /本地备份路径:/archive \-e BACKUP_CRON_EXPRESSION="@daily" \-e WEBDAV_URL="http://192.168.0.129:5055" \-e WEBDAV_PATH="/sata14-15011111111/volumeback" \-e WEBDAV_USERNAME="15011111111" \-e WEBDAV_PASSWORD="123456789" \--entrypoint backup \


    
offen/docker-volume-backup:v2.43.2

🔻以本地目录/local/data备份为例,运行的时候删掉复制成一行,用空格间隔。

docker run --name=backup \-v /etc/timezone:/etc/timezone:ro \-v /etc/localtime:/etc/localtime:ro \-v 待备份卷名1:/backup/data1 \-v 待备份卷名2:/backup/data2 \-v /local/data:/archive \-e BACKUP_CRON_EXPRESSION="@daily" \--entrypoint backup \offen/docker-volume-backup:v2.43.2

执行结果反馈,可以看到数据传输日志。逻辑基本上是先复制一个目标卷的备份,并映射到容器内,然后将其压缩为tar格式。接着通过webdav、s3、dropbox、local等方式将压缩包同步到备份仓库中。

QQ_1741079471547.png

如图,我将其它NAS里的容器卷,通过webdav成功备份到了极空间文件里。

QQ_1741099966089.png

3、数据还原方法

1️⃣从备份还原卷:

1、解压备份包tar -C /tmp -xvf  backup.tar.gz2、创建一个临时容器docker run -d --name temp -v 卷名:/backup_restore alpine3、将解压的数据包复制到卷中docker cp /path/解压的文件 temp:/backup_restore4、停止并删除临时容器docker stop temp && docker rm temp

2️⃣还原历史版本:

1、停止需要还原数据的容器docker stop 容器A2、删除现在的卷docker volume rm 卷名3、创建同名的新卷并还原快照docker run --rm -it -v 卷名:/backup/data1 -v /local/data:/archive:ro alpine tar -xvzf /archive/备份文件.tar.gz4、重新启动容器docker start 容器A





总结

在我们日常NAS的使用过程中,除了文档资料需要备份外,NAS里各式各样的虚拟机、容器数据也建议大家定期进行备份。

尤其在数据价值越来越贵的年代,养成个人数据备份的好习惯,远远比购买昂贵的硬盘来做Raid、做同步性价比要高得多,而且实用的多。

本文通过极空间提供的webdav、local、sftp/ssh服务,实现了所有设备的容器数据定时备份,让极空间私有云可以真正发挥存储中心的作用,满足海量数据存储的需求。


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/180083
 
114 次点击