Ubuntu 上 Docker 数据备份与恢复实用指南
一 备份策略与准备
二 方法一 备份 Docker 数据卷(推荐)
docker run --rm \
-v mysql_data:/source \
-v $(pwd):/backup \
alpine sh -c "tar -zcvf /backup/mysql_data_$(date +%F).tar.gz -C /source ."
VOL_ID="7ef48a99e9642..."
docker run --rm \
-v ${VOL_ID}:/source \
-v $(pwd):/backup \
alpine sh -c "tar -zcvf /backup/vol_${VOL_ID}_$(date +%F).tar.gz -C /source ."
tar -zcvf - -C /source . | pv -s $(du -sb /source | awk '{print $1}') > /backup/file.tar.gz
# 备份
docker run --rm --volumes-from dbdata -v $(pwd):/backup busybox \
tar czvf /backup/dbdata_$(date +%F).tar.gz /dbdata
# 恢复(先建新卷容器)
docker run -d -v /dbdata --name dbdata2 ubuntu /bin/bash
docker run --rm --volumes-from dbdata2 -v $(pwd):/backup busybox \
tar xzvf /backup/dbdata_$(date +%F).tar.gz -C /
docker volume ls --format "{{.Name}}"tar tzvf 列清单)。三 方法二 备份绑定挂载与容器文件系统
# 备份
rsync -aP /host/data/ /backup/data_$(date +%F)/
# 恢复
rsync -aP /backup/data_YYYY-MM-DD/ /host/data/
# 备份
docker cp <container_id>:/var/www /backup/container_www_$(date +%F)
# 恢复
docker cp /backup/container_www_YYYY-MM-DD <container_id>:/var/www
四 方法三 备份镜像与容器元数据(可选)
# 备份
docker save -o myimage_latest.tar myimage:latest
# 恢复
docker load -i myimage_latest.tar
# 导出
docker export -o mycontainer.tar mycontainer
# 导入为镜像
docker import mycontainer.tar mynewimage:latest
五 恢复与校验及注意事项
# 恢复到已有卷(同名卷)
docker run --rm \
-v mysql_data:/target \
-v $(pwd):/backup \
alpine sh -c "tar xzvf /backup/mysql_data_YYYY-MM-DD.tar.gz -C /target"
# 若路径不同,解压到目标路径
tar xzvf /backup/file.tar.gz -C /desired/path
tar tzvf /backup/file.tar.gz