利用极空间,定期备份全网Docker数据,不惧数据丢失

2025-03-14 10:44:55 20点赞 100收藏 12评论

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

前言

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

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

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

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

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


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

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

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

利用极空间,定期备份全网Docker数据,不惧数据丢失

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

利用极空间,定期备份全网Docker数据,不惧数据丢失

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

利用极空间,定期备份全网Docker数据,不惧数据丢失

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

利用极空间,定期备份全网Docker数据,不惧数据丢失

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

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

利用极空间,定期备份全网Docker数据,不惧数据丢失

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

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

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

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

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

利用极空间,定期备份全网Docker数据,不惧数据丢失

2、极空间创建备份仓库

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

利用极空间,定期备份全网Docker数据,不惧数据丢失

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

利用极空间,定期备份全网Docker数据,不惧数据丢失

三、备份Docker 卷数据

1、环境变量解析

完整的备份环境变量,比如S3Dropbox等可以看下面的配置文件。我这里重点挑选极空间私有云本身可以提供的服务,比如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等方式将压缩包同步到备份仓库中。

利用极空间,定期备份全网Docker数据,不惧数据丢失

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

利用极空间,定期备份全网Docker数据,不惧数据丢失

3、数据还原方法

1️⃣从备份还原卷:

1、解压备份包

tar -C /tmp -xvf backup.tar.gz

2、创建一个临时容器

docker run -d --name temp -v 卷名:/backup_restore alpine

3、将解压的数据包复制到卷中

docker cp /path/解压的文件 temp:/backup_restore

4、停止并删除临时容器

docker stop temp && docker rm temp

2️⃣还原历史版本:

1、停止需要还原数据的容器

docker stop 容器A

2、删除现在的卷

docker volume rm 卷名

3、创建同名的新卷并还原快照

docker run --rm -it -v 卷名:/backup/data1 -v /local/data:/archive:ro alpine tar -xvzf /archive/备份文件.tar.gz

4、重新启动容器

docker start 容器A


总结

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

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

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

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
12评论

  • 精彩
  • 最新
  • 收藏起来,备用

    校验提示文案

    提交
    [大吃一惊] [大吃一惊] [大吃一惊] 收藏=看过

    校验提示文案

    提交
    收起所有回复
  • 手机里都是家里小朋友照片,舍不得删😂😂

    校验提示文案

    提交
    有舍才有得 [傻笑]

    校验提示文案

    提交
    收起所有回复
  • 头图是怎么回事

    校验提示文案

    提交
    什么怎么回事 [皱眉]

    校验提示文案

    提交
    收起所有回复
  • 一键备份挺方便的

    校验提示文案

    提交
  • 极空间的NAS确实可以,正在考虑入手

    校验提示文案

    提交
  • 这功能也太强大了

    校验提示文案

    提交
  • 正要入手,感谢分享呀!

    校验提示文案

    提交
  • 极空间挺好玩的

    校验提示文案

    提交
  • 收藏起来备用

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
100
扫一下,分享更方便,购买更轻松