1. 功能概述

  • 停用docker,打包docker目录并加密存储,自动清理旧备份
  • 飞牛os定时拉取备份进行本地存储,并定期清理旧备份

2. 服务器端操作

2.1 安装 7-Zip

apt update && apt install p7zip-full -y

2.2 创建打包脚本

编辑脚本文件:

vim /root/docker_backup.sh

示例脚本内容:

#!/bin/bash


DOCKER_ROOT="/docker"                  # Docker 根目录
OUTPUT_DIR="/docker_backup"            # 备份输出目录
BACKUP_PASS="xxxx"                     # 7z 解压密码
DATE=$(date +%Y%m%d)
FILE_NAME="docker_bak_$DATE.7z"

# 创建备份目录
mkdir -p $OUTPUT_DIR

# 1. 停止容器(保证数据库和笔记文件不再写入)
echo "Stopping all containers..."
RUNNING=$(docker ps -q)
if [ -n "$RUNNING" ]; then
    docker stop $RUNNING
fi

# 2. 7z 加密打包
# -p: 指定密码
# -mhe=on: 文件名加密
# -mx=3: 压缩级别(1-9,建议3或5)
# -y: 自动确认
echo "Packing and Encrypting with 7-Zip..."
7z a -p"$BACKUP_PASS" -mhe=on -mx=3 -y $OUTPUT_DIR/$FILE_NAME $DOCKER_ROOT


# 3. 启动容器
echo "Starting containers..."
if [ -n "$RUNNING" ]; then
    docker start $RUNNING
fi

# 4. 清理 3 天前的旧备份
echo "Cleaning old backups..."
find $OUTPUT_DIR -type f -mtime +3 -delete

echo "Backup Task Completed: $FILE_NAME"

2.3 设置定时任务

每天凌晨 4 点自动执行备份脚本:

0 4 * * * /bin/bash /root/docker_backup.sh >> /root/docker_backup.log 2>&1

3. 仓储端(飞牛 OS)

3.1 生成密钥对(仅需一次)

在飞牛 OS 终端执行:

ssh-keygen -t ed25519
  • 一路回车,不设置 passphrase
  • 生成的密钥位于 /root/.ssh/ 目录下

3.2 配置服务器信任关系

  • 在飞牛 OS 查看公钥内容:
cat /root/.ssh/id_ed25519.pub
  • 复制完整公钥字符串
  • 在服务器上操作,将公钥添加到信任列表:
vim ~/.ssh/authorized_keys

将公钥粘贴到文件末尾并保存。

3.3 配置 SSH 别名(飞牛OS端)

编辑配置文件:

vim /root/.ssh/config

示例内容:

Host *
    IdentityFile ~/.ssh/id_ed25519   # 使用 Ed25519 密钥

Host sg111
    HostName 111.119.xxx.xxx
    User root
    Port 22

3.4 测试 SSH 免密登录

在飞牛 OS 终端执行:

ssh sg111
  • 如果无需输入密码即登录,说明免密配置成功。

3.5 飞牛 OS 任务计划自动拉取备份

前提:

  • 已生成密钥并配置服务器 authorized_keys
  • 已在 ~/.ssh/config​ 配置别名 sg111
  • 已在应用中心安装任务计划应用

3.6 任务脚本示例

#!/bin/bash

# 设置存放目录
TARGET_DIR="/vol2/1000/home/个人/电子产品/备份文件/docker_backup"
DATE_STR=$(date "+%Y-%m-%d %H:%M:%S")

echo "=========================================="
echo "开始备份任务: $DATE_STR"
echo "目标目录: $TARGET_DIR"

# 1. 进入目录并显示当前状态
cd "$TARGET_DIR" || exit
echo "当前目录文件数: $(ls -1 | wc -l)"

# 2. 拉取最新备份
FILE_NAME="docker_bak_$(date +%Y%m%d).7z"
echo "正在从服务器拉取: $FILE_NAME ..."

# 记录耗时
{ time scp sg111:/docker_backup/$FILE_NAME . ; } 2>&1

# 3. 检查同步结果
if [ -f "$FILE_NAME" ]; then
    echo "成功:文件 $FILE_NAME 已同步至本地。"
    du -sh "$FILE_NAME"
else
    echo "失败:未能在服务器上找到文件或传输中断。"
fi

# 4. 清理 15 天前的旧备份
echo "正在清理 15 天前的旧备份..."
find . -name "docker_bak_*.7z" -mtime +15 -print -delete

echo "任务执行完毕!"
echo "=========================================="

# 列出所有备份文件
ls -lh

以上流程实现了 Docker 目录的定期加密备份、自动清理、以及异地安全存储,适用于个人及小型团队的数据保障需求。

标签: 自动化, Docker, 备份, 飞牛OS, 加密

添加新评论