在 Ubuntu 上使用 Docker 时,备份通常分为容器数据备份、镜像备份、卷(Volume)备份和compose 项目备份。下面按常见场景给你一套实用方案。
如果你把数据放在 volume 里:
docker volume ls
备份某个 volume(如 mysql_data):
docker run --rm \
-v mysql_data:/volume \
-v $(pwd):/backup \
alpine \
tar czf /backup/mysql_data.tar.gz -C /volume .
恢复:
docker run --rm \
-v mysql_data:/volume \
-v $(pwd):/backup \
alpine \
tar xzf /backup/mysql_data.tar.gz -C /volume
如果数据在容器内部(不推荐但常见):
docker cp 容器名:/data ./data_backup
或导出容器文件系统:
docker export 容器名 > container.tar
⚠️ export 不包含 volume 数据
docker save nginx:latest > nginx.tar
docker load < nginx.tar
docker commit 容器名 备份镜像名
docker save 备份镜像名 > 容器备份.tar
⚠️ 不推荐长期使用,仅应急
一般只需要备份:
docker-compose.yml.env示例:
tar czf myapp_backup.tar.gz \
docker-compose.yml \
.env \
data/
Docker 默认数据目录:
/var/lib/docker
停止 Docker 后备份:
sudo systemctl stop docker
sudo tar czf docker_backup.tar.gz /var/lib/docker
sudo systemctl start docker
⚠️ 占用空间大,仅适合迁移
#!/bin/bash
DATE=$(date +%F)
docker run --rm \
-v mysql_data:/volume \
-v /backup:/backup \
alpine \
tar czf /backup/mysql_$DATE.tar.gz -C /volume .
加 crontab:
0 3 * * * /root/backup.sh
| 项目 | 推荐方式 |
|---|---|
| 数据库 | volume + 数据库 dump |
| 配置文件 | git / 压缩包 |
| 镜像 | docker save |
| 生产环境 | 定期 + 异地备份 |
如果你告诉我:
我可以给你一套可直接用的备份脚本。