Docker容器备份还原
外观
Docker容器备份还原[编辑 | 编辑源代码]
介绍[编辑 | 编辑源代码]
Docker容器备份还原是容器化运维中的核心操作之一,它允许用户保存容器的当前状态(包括文件系统、配置和数据)并在需要时恢复。备份可用于灾难恢复、迁移或版本回滚。与虚拟机不同,Docker容器的备份通常基于镜像或数据卷实现。
备份方法[编辑 | 编辑源代码]
1. 通过容器提交(commit)生成镜像[编辑 | 编辑源代码]
将运行中的容器保存为镜像,是最简单的备份方式。
# 查看运行中的容器
docker ps
# 提交容器为镜像(语法:docker commit <容器ID> <镜像名:标签>)
docker commit abc123 my-backup:v1
# 验证镜像
docker images | grep my-backup
输出示例:
REPOSITORY TAG IMAGE ID CREATED SIZE my-backup v1 a1b2c3d4e5 2 minutes ago 250MB
2. 导出容器文件系统(export/import)[编辑 | 编辑源代码]
将容器的文件系统打包为tar归档,适合跨主机迁移。
# 导出容器
docker export abc123 > container-backup.tar
# 导入为镜像
docker import container-backup.tar my-imported-image:v1
3. 数据卷备份[编辑 | 编辑源代码]
若容器使用数据卷(Volumes),需单独备份卷数据。
# 创建临时容器挂载数据卷并备份
docker run --rm --volumes-from my-container -v $(pwd):/backup alpine \
tar cvf /backup/volume-backup.tar /path/to/volume
还原方法[编辑 | 编辑源代码]
从镜像恢复[编辑 | 编辑源代码]
# 基于备份镜像启动新容器
docker run -d --name restored-container my-backup:v1
从tar归档恢复[编辑 | 编辑源代码]
# 导入tar文件后运行
docker run -d --name imported-container my-imported-image:v1
数据卷还原[编辑 | 编辑源代码]
# 解压备份到新容器的数据卷
docker run --rm --volumes-from new-container -v $(pwd):/backup alpine \
tar xvf /backup/volume-backup.tar -C /path/to/volume
实际案例[编辑 | 编辑源代码]
场景: 备份一个运行MySQL的容器并迁移到新服务器。
1. 备份容器与数据卷
# 提交容器为镜像
docker commit mysql-container mysql-backup:v1
# 备份数据卷
docker run --rm --volumes-from mysql-container -v $(pwd):/backup alpine \
tar cvf /backup/mysql-data.tar /var/lib/mysql
2. 在新服务器还原
# 加载镜像并启动容器
docker load < mysql-backup.tar
docker run -d --name new-mysql -v mysql-data:/var/lib/mysql mysql-backup:v1
# 恢复数据
docker run --rm --volumes-from new-mysql -v $(pwd):/backup alpine \
tar xvf /backup/mysql-data.tar -C /var/lib/mysql
高级技巧[编辑 | 编辑源代码]
- 差异备份:结合`docker diff`命令识别容器文件变化,仅备份增量部分。
- 自动化工具:使用`cron`定时执行备份脚本。
注意事项[编辑 | 编辑源代码]
- 备份镜像会包含容器所有层,可能导致文件较大。
- 数据卷备份需确保容器停止写入,避免数据不一致。
流程图[编辑 | 编辑源代码]
数学表达[编辑 | 编辑源代码]
备份大小估算公式(假设镜像层为叠加存储):
其中:
- 是镜像第i层的大小
- 是容器的可写层大小