ubuntu docker数据怎么备份
导读:Ubuntu 上 Docker 数据备份与恢复实用指南 一 备份策略与准备 识别数据位置:持久化数据通常位于 Docker 数据卷(Volume)、绑定挂载(Bind Mount) 或 容器可写层。优先备份卷数据,避免直接操作 Docke...
Ubuntu 上 Docker 数据备份与恢复实用指南
一 备份策略与准备
- 识别数据位置:持久化数据通常位于 Docker 数据卷(Volume)、绑定挂载(Bind Mount) 或 容器可写层。优先备份卷数据,避免直接操作 Docker 内部目录。
- 选择方法:
- 卷数据:用“临时容器 + tar”打包最安全通用。
- 绑定挂载目录:可直接用 rsync 或 tar。
- 无法停容器时:对数据库等先执行应用层导出(如 mysqldump),再备份卷。
- 环境检查与空间评估:确认 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 ." - 匿名卷示例(用卷 ID):
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 ." - 需要查看进度可安装 pv 并替换打包命令为:
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} } " - 用 Shell 循环对命名卷执行“单卷备份”命令;匿名卷可用卷 ID 备份。
- 建议加入保留策略(如保留最近 30 天)与备份后校验(如
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 cp 便捷但不包含容器元数据(如启动命令、环境变量);如需完整可重建性,结合镜像/容器导出或记录编排文件。
四 方法三 备份镜像与容器元数据(可选)
- 镜像备份与恢复
# 备份 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 前保存镜像资产;容器层备份仅作补充,持久化数据仍以卷/绑定挂载为主。
五 恢复与校验及注意事项
- 卷数据恢复
# 恢复到已有卷(同名卷) 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 - 必要时做恢复演练,确认应用能正常启动与读写。
- 列出归档内容:
- 注意事项
- 不建议直接复制 /var/lib/docker/volumes/ 内部文件,易产生一致性问题;应通过“临时容器 + tar”方式操作。
- 生产环境尽量在 低峰期 执行,或先对数据库执行应用层备份(如 mysqldump)。
- 权限与安全:备份文件含敏感数据时注意 权限与加密,并做好 异地/离线 留存与定期清理策略。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: ubuntu docker数据怎么备份
本文地址: https://pptw.com/jishu/768801.html
