【无标题】

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企业实战系列(八):多环境隔离|开发、测试、生产环境一键切换

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

相关推荐
excel1 小时前
IndexNow:让搜索引擎更快发现网站更新的主动通知协议
前端·后端·架构
子兮曰1 小时前
CSS 复现 23 种设计风格:从拟物到液态玻璃的成本阶梯与兜底写法【实战】
前端·css·视觉设计
凯凯姜2 小时前
MySQL 联合索引设计与索引失效
数据库·mysql
虚无境2 小时前
如何用AI帮我写出实用的插件
前端·javascript·ai编程
柳杉3 小时前
从数字化到数智化:3D 可视化大屏的下一个五年
前端·ai编程·数据可视化
专业程序开发源3 小时前
springboot欧缇蔓月子中心管理系统82697-计算机课程设计、毕业设计
java·spring boot·后端·python·spring·django·课程设计
风骏时光牛马3 小时前
从零到实战:AI全栈学习进阶路线
前端
莫逸风4 小时前
【毕设源码二期01】校园失物招领系统:从发布线索到核验交接
spring boot·毕业设计·课程设计·react
FRing034 小时前
JavaScript入门到精通二十六(变量提升、函数剩余参数、展开运算符、ES6箭头函数)
开发语言·前端·javascript·es6·箭头函数
用户360055579004 小时前
Kestrel_VLLM - 15 · decode 优化四连击:19ms → 8ms
前端