【无标题】

Docker Compose企业实战系列(七):容器项目备份、迁移与恢复完整方案

前言

到目前为止,我们已经搭建了一套完整企业级容器架构:

Nginx网关 + Vue前端 + SpringBoot后端 + MySQL + Redis

但很多人上线后会遇到致命问题:

  • 换服务器全部环境重来?

  • 重装系统数据全部丢失?

  • 误删容器数据库数据全无?

  • 项目无法快速迁移、无法回滚?

本篇给你生产级全套备份 & 迁移 & 恢复方案:

镜像备份、数据卷备份、数据库备份、整项目迁移、一键恢复,全覆盖,企业运维标准流程。

一、Docker项目需要备份哪些东西?

很多新手只备份代码,漏掉关键数据,导致翻车。

完整容器项目必须备份三项:

  1. 业务数据卷:MySQL数据、Redis缓存数据

  2. 自定义镜像:前端、后端打包镜像

  3. 配置文件:compose、nginx配置、env环境变量

二、数据卷备份(核心!防止删容器丢数据)

1. 宿主机挂载目录备份(我们当前项目模式)

我们全套项目数据都是挂载到宿主机目录:./mysql/data、./redis/data

最简单、最稳的备份方式:直接打包整个项目目录

bash 复制代码
# 进入项目根目录
cd full-stack-docker

# 打包整个项目(配置+数据+代码全部打包)
tar -zcvf project-backup-$(date +%Y%m%d).tar.gz ./*

执行完成会生成:project-backup-20251201.tar.gz 格式备份包

2. Docker Volume 数据卷备份通用方法

如果是docker管理的volume,使用以下通用备份命令:

bash 复制代码
# 备份指定数据卷
docker run --rm -v 数据卷名:/source -v $(pwd):/backup alpine tar -zcvf /backup/volume-backup.tar.gz -C /source .

三、MySQL数据库独立备份(生产必备)

目录打包只能保证数据不丢,数据库必须单独SQL备份,防止文件损坏、碎片问题。

1. 一键导出MySQL整库SQL

bash 复制代码
# 替换为你的密码、数据库名
docker exec mysql mysqldump -uroot -p123456 spring_db > mysql-backup-$(date +%Y%m%d).sql

2. SQL文件恢复数据库

bash 复制代码
cat mysql-backup.sql | docker exec -i mysql mysql -uroot -p123456 spring_db

四、Redis数据备份与恢复

1. 手动触发RDB持久化备份

bash 复制代码
docker exec redis redis-cli -a Redis@2026 save

执行后会在 ./redis/data生成 dump.rdb 备份文件

2. 恢复Redis数据

  1. 停止redis容器

  2. 替换data目录下dump.rdb

  3. 重启容器自动加载数据

bash 复制代码
docker compose restart redis

五、自定义镜像备份(防止换机器重新打包)

我们的前端、后端都是自定义构建镜像,换服务器需要重新打包很慢。

直接导出镜像文件,任意机器直接导入使用。

1. 查看本地镜像

bash 复制代码
docker images

2. 导出镜像为tar文件

bash 复制代码
# 导出后端镜像
docker save -o springboot-image.tar full-stack-docker_springboot-service

# 导出前端镜像
docker save -o web-image.tar full-stack-docker_web

3. 新服务器导入镜像

bash 复制代码
docker load -i springboot-image.tar
docker load -i web-image.tar

六、整项目服务器迁移完整流程(零丢失、零重构)

这是本篇最核心的实战流程,换服务器直接照做!

1. 旧服务器操作

bash 复制代码
# 1. 整项目打包
tar -zcvf full-project-backup.tar.gz full-stack-docker/

# 2. 导出数据库SQL
docker exec mysql mysqldump -uroot -p123456 spring_db > db.sql

2. 传输文件到新服务器

使用 scp、宝塔、FTP 任意方式,把备份包传到新服务器。

3. 新服务器部署

bash 复制代码
# 解压项目
tar -zxvf full-project-backup.tar.gz

# 进入目录启动项目
cd full-stack-docker
docker compose up -d

✅ 所有配置、数据、环境全部原样恢复,无需改代码、无需重新配置

七、自动定时备份(生产终极方案)

手动备份容易忘,直接配置Linux定时任务crontab 每日自动备份。

1. 编辑定时任务

bash 复制代码
crontab -e

2. 添加每日凌晨2点自动备份规则

bash 复制代码
0 2 * * * /bin/bash /你的项目路径/backup.sh

3. 编写backup.sh脚本

bash 复制代码
#!/bin/bash
DATE=$(date +%Y%m%d)
cd /你的项目路径

# 数据库备份
docker exec mysql mysqldump -uroot -p123456 spring_db > ./backup/db-$DATE.sql

# 项目整体打包
tar -zcvf ./backup/project-$DATE.tar.gz ./*

八、高频踩坑总结

  • 只备份不导出SQL:文件挂载损坏会导致数据库彻底报废

  • 不备份镜像:换机器需要重新打包、环境不一致

  • 直接删容器慌数据:只要数据卷目录还在,重建容器数据自动恢复

  • 备份不轮转:长期备份占用磁盘,建议定期清理7天前备份

  • 迁移不重启Docker:新服务器权限不同,建议重启Docker再启动项目

九、本期总结

本篇彻底搞定了 Docker Compose 项目的备份与迁移:

  • ✅ 项目目录整体备份(配置+环境+文件)

  • ✅ MySQL独立SQL备份,保证数据安全

  • ✅ Redis RDB数据持久备份

  • ✅ 自定义镜像导入导出,无需重复构建

  • ✅ 整项目一键迁移,换服务器无痛上线

  • ✅ 定时自动备份,生产长期稳定运行

至此,你的容器项目已经具备企业级容灾、迁移、恢复能力。

下期预告

Docker Compose企业实战系列(八):多环境隔离|开发、测试、生产环境一键切换

解决多环境配置混乱、打包出错、环境变量冲突问题,实现一套代码适配多套环境。

相关推荐
广州华水科技44 分钟前
2026年单北斗GNSS变形监测系统推荐榜单,解锁GNSS位移监测新高度
前端
xcyxiner1 小时前
DicomViewer24 修复编译bug(window test 失败)
前端·qt
linux_cfan1 小时前
videojs v10 源代码系列解读:34 · `createComposition`:类型安全的冲突检测
前端·安全
赵谨言1 小时前
红蓝对抗Docker渗透复盘-技能与产出汇总
docker·容器·eureka
Lysander.Jovian2 小时前
mysql数据库基本使用
mysql
今年下半年2 小时前
【Spring Boot】多种存储文件(FastDFS / MinIO / 阿里云 OSS)接入设计说明(附源码)
spring boot·分布式·中间件·简单工厂模式·策略模式
Shadow(⊙o⊙)2 小时前
MySQL索引
数据库·mysql
utmhikari2 小时前
【AI原生】借助AI之力优化个人博客前端样式
前端·css·hexo·next·个人博客·ai-native·vibe coding