备份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
相关推荐
Web4Browser19 分钟前
Headless 浏览器自动化适合哪些任务?巡检、截图和提交动作要分级
运维·前端·自动化
難釋懷23 分钟前
Nginx浏览器强制缓存
运维·nginx·缓存
花和满楼30 分钟前
K8s 1.36 ImageVolume GA:OCI 镜像不再只能跑容器
java·容器·kubernetes
大博士.J33 分钟前
视频号主体违规与认证上限?正确的解决方式
运维·python·自动化
hey you~1 小时前
400电话选型技术测评:一个开发视角的线路质量评估方案
运维·网络·数据库·400电话·企业通信
筱羽_筱羽1 小时前
跟着“Ubuntu18.04/20.04编译Linux5.10.76+Xenomai-3.2.1+IgH”教程遇到的问题
linux·运维·ubuntu
DolphinScheduler社区1 小时前
Apache DolphinScheduler 6 月治理优化,补齐调度运维全链路细节
大数据·运维·云原生·apache·海豚调度
hj2862513 小时前
Docker 核心知识点整理(网络 + Dockerfile + 原理 + 命令)
网络·docker·容器
无忧.芙桃3 小时前
线程同步与线程互斥(上)
linux·运维·操作系统·运维开发
xywww1687 小时前
大模型 API 选型实战:GPT、Gemini、Claude 接入时该看哪些指标?
运维·服务器·人工智能·python·gpt·langchain