🎯 备份和迁移数据

## 迁移方式介绍 容器中的数据,如果没有用挂载目录,删除容器后就会丢失数据。 前面我们已经讲解了如何 [挂载目录](doc:kze7f0ZR) 如果你是用`bind mount`直接把宿主机的目录挂进去容器,那迁移数据很方便,直接复制目录就好了 如果你是用`volume`方式挂载的,由于数据是由容器创建和管理的,需要用特殊的方式把数据弄出来。 >s 本文档课件配套 [视频教程](https://www.bilibili.com/video/BV11L411g7U1?p=8) ## 备份和导入 Volume 的流程 备份: - 运行一个 ubuntu 的容器,挂载需要备份的 volume 到容器,并且挂载宿主机目录到容器里的备份目录。 - 运行 tar 命令把数据压缩为一个文件 - 把备份文件复制到需要导入的机器 导入: - 运行 ubuntu 容器,挂载容器的 volume,并且挂载宿主机备份文件所在目录到容器里 - 运行 tar 命令解压备份文件到指定目录 ## 备份 MongoDB 数据演示 - 运行一个 mongodb,创建一个名叫`mongo-data`的 volume 指向容器的 /data 目录 `docker run -p 27018:27017 --name mongo -v mongo-data:/data -d mongo:4.4` - 运行一个 Ubuntu 的容器,挂载`mongo`容器的所有 volume,映射宿主机的 backup 目录到容器里面的 /backup 目录,然后运行 tar 命令把数据压缩打包 `docker run --rm --volumes-from mongo -v d:/backup:/backup ubuntu tar cvf /backup/backup.tar /data/` 最后你就可以拿着这个 backup.tar 文件去其他地方导入了。 ## 恢复 Volume 数据演示 - 运行一个 ubuntu 容器,挂载 mongo 容器的所有 volumes,然后读取 /backup 目录中的备份文件,解压到 /data/ 目录 `docker run --rm --volumes-from mongo -v d:/backup:/backup ubuntu bash -c "cd /data/ && tar xvf /backup/backup.tar --strip 1"` >d 注意,volumes-from 指定的是容器名字 strip 1 表示解压时去掉前面1层目录,因为压缩时包含了绝对路径 --- >d 觉得老师讲得不错的话,记得点赞、关注、分享,鼓励下老师 你们的鼓励会让老师更加有动力继续创造更多更好的内容 你可以到 [Github issue](https://github.com/gzyunke/test-docker/issues) 给我提问或反馈遇到的问题。