Docker Compose企业实战系列(七):容器项目备份、迁移与恢复完整方案
前言
到目前为止,我们已经搭建了一套完整企业级容器架构:
Nginx网关 + Vue前端 + SpringBoot后端 + MySQL + Redis
但很多人上线后会遇到致命问题:
-
换服务器全部环境重来?
-
重装系统数据全部丢失?
-
误删容器数据库数据全无?
-
项目无法快速迁移、无法回滚?
本篇给你生产级全套备份 & 迁移 & 恢复方案:
镜像备份、数据卷备份、数据库备份、整项目迁移、一键恢复,全覆盖,企业运维标准流程。
一、Docker项目需要备份哪些东西?
很多新手只备份代码,漏掉关键数据,导致翻车。
完整容器项目必须备份三项:
-
业务数据卷:MySQL数据、Redis缓存数据
-
自定义镜像:前端、后端打包镜像
-
配置文件: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数据
-
停止redis容器
-
替换data目录下dump.rdb
-
重启容器自动加载数据
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企业实战系列(八):多环境隔离|开发、测试、生产环境一键切换
解决多环境配置混乱、打包出错、环境变量冲突问题,实现一套代码适配多套环境。