备份Docker

  • 备份脚本
bash 复制代码
#!/bin/bash
PROJ_DIR="/home/proj/HelloProj"
BACKUP_DIR="/home/chenph/docker-backup/$(date +%Y%m%d_%H%M%S)"

mkdir -p $BACKUP_DIR
cd $PROJ_DIR

echo "=== 备份 HelloProj ==="
echo "项目: $PROJ_DIR"
echo "备份: $BACKUP_DIR"

# 1. 备份 compose 文件
echo "[1/2] 备份配置..."
cp docker-compose.yml $BACKUP_DIR/
cp -r key nginx.conf superset_config.py $BACKUP_DIR/ 2>/dev/null
echo "  ✓ 配置文件"

# 2. 备份数据目录(关键!)
echo "[2/2] 备份数据目录..."

# 列出所有 bind mount 的本地目录
for dir in \
    app \
    mosquitto/config mosquitto/data \
    metabase-data \
    redash-data \
    gitea-data \
    jenkins-data \
    redisdata \
    superset_data \
    qdrant_storage; do
    
    if [ -d "$dir" ]; then
        size=$(du -sm $dir 2>/dev/null | cut -f1)
        echo "  打包: $dir (${size}MB)"
        
        # 保持目录结构打包
        tar czf $BACKUP_DIR/${dir//\//_}.tar.gz $dir
    else
        echo "  跳过: $dir (不存在)"
    fi
done

# 生成恢复脚本
cat > $BACKUP_DIR/restore.sh << 'EOF'
#!/bin/bash
DIR=$(dirname $0)
cd "$DIR"

echo "=== 恢复 HelloProj ==="

# 解压所有数据
echo "[1/2] 解压数据..."
for f in *.tar.gz; do
    echo "  解压: $f"
    tar xzf "$f"
done

# 移动配置文件到正确位置
mv key nginx.conf superset_config.py ../ 2>/dev/null || true

echo "[2/2] 启动服务..."
docker compose up -d

echo "=== 完成 ==="
echo "注意:确认配置文件路径是否正确"
EOF
chmod +x $BACKUP_DIR/restore.sh

chown -R chenph:chenph /home/chenph/docker-backup

echo ""
echo "=== 备份完成 ==="
echo "位置: $BACKUP_DIR"
echo "总大小: $(du -sh $BACKUP_DIR | cut -f1)"
echo ""
echo "内容清单:"
ls -lh $BACKUP_DIR/
  • 修改权限
bash 复制代码
# 1. 删除原来的脚本(如果存在)
rm -f /home/chenph/backup-docker.sh

# 2. 创建新脚本
nano /home/chenph/backup-docker.sh

# 3. 赋权限
chmod +x /home/chenph/backup-docker.sh

# 4. 运行
sudo /home/chenph/backup-docker.sh
  • 输出
bash 复制代码
root@iv-yds1fiuww0bw80bhehin:/home/proj/HelloProj# sudo /home/proj/HelloProj/backup-docker.sh
=== 备份 HelloProj ===
项目: /home/proj/HelloProj
备份: /home/chenph/docker-backup/20260319_193334
[1/2] 备份配置...
  ✓ 配置文件
[2/2] 备份数据目录...
  打包: app (1MB)
  打包: mosquitto/config (1MB)
  打包: mosquitto/data (1MB)
  打包: metabase-data (15MB)
  打包: redash-data (1MB)
  打包: gitea-data (2MB)
  打包: jenkins-data (319MB)
  打包: redisdata (4MB)
  打包: superset_data (92MB)
  打包: qdrant_storage (79MB)

=== 备份完成 ===
位置: /home/chenph/docker-backup/20260319_193334
总大小: 320M

内容清单:
total 320M
-rw-r--r-- 1 chenph chenph 2.1K Mar 19 19:33 app.tar.gz
-rw-r--r-- 1 chenph chenph 4.7K Mar 19 19:33 docker-compose.yml
-rw-r--r-- 1 chenph chenph  51K Mar 19 19:33 gitea-data.tar.gz
-rw-r--r-- 1 chenph chenph 243M Mar 19 19:33 jenkins-data.tar.gz
drwxr-xr-x 2 chenph chenph 4.0K Mar 19 19:33 key
-rw-r--r-- 1 chenph chenph 4.1M Mar 19 19:33 metabase-data.tar.gz
-rw-r--r-- 1 chenph chenph  474 Mar 19 19:33 mosquitto_config.tar.gz
-rw-r--r-- 1 chenph chenph  262 Mar 19 19:33 mosquitto_data.tar.gz
-rw-r--r-- 1 chenph chenph 2.0K Mar 19 19:33 nginx.conf
-rw-r--r-- 1 chenph chenph  63M Mar 19 19:33 qdrant_storage.tar.gz
-rw-r--r-- 1 chenph chenph  116 Mar 19 19:33 redash-data.tar.gz
-rw-r--r-- 1 chenph chenph 177K Mar 19 19:33 redisdata.tar.gz
-rwxr-xr-x 1 chenph chenph  417 Mar 19 19:33 restore.sh
-rw-r--r-- 1 chenph chenph 1.2K Mar 19 19:33 superset_config.py
-rw-r--r-- 1 chenph chenph  11M Mar 19 19:33 superset_data.tar.gz
相关推荐
XiaoMaqqqq5 小时前
市面上正规的IP驱动产业新场景新工具哪家强
运维·python·网络协议·tcp/ip
huainingning6 小时前
RJ SW Console口忘记密码处理方法
linux·运维·服务器
布裘6 小时前
【银河麒麟】桌面系统循环登录,无法进入桌面?
linux·运维·服务器
慧都小项6 小时前
程序到了Linux才出错?用CLion把调试接到目标环境
linux·运维·服务器
Lsetea7 小时前
OpenSSL verify报unhandled critical extension:error 34与关键扩展排查
运维·https·ssl证书·openssl·证书链
guo_wen_qiang7 小时前
docker的备份与迁移
运维·docker·容器
Ruiery8 小时前
Linux 6.6内核内存管理深度解析(一):物理内存初始化 — memblock 怎么把内存交给 buddy
linux·运维·服务器
Android系统攻城狮9 小时前
Linux Gstreamer深度解析之gst_audio_encoder_get_frame_max调用流程与实战(五十九)
linux·运维·服务器·gstreamer音视频·音视频进阶·gstreamer音视频进阶
忆挽篱笙歌9 小时前
makefil
linux·运维·服务器
小小龙学IT10 小时前
Kubernetes 深度实践:架构、API 与避坑指南
容器·架构·kubernetes