最近工作上有需求要迁移现在docker上的容器和数据到新的服务器上, 但网上搜了很多博客, 真正实用且有效的寥寥无几, 最后自己爬了不少坑干掉了这个需求, 写博客记录一下操作过程, 希望后来的小伙伴能够少走些弯路! 接下来的操作根据mongoDB数据库的迁移举例!
一 查看当前mongo容器挂载的数据卷, 找到容器数据卷信息
docker inspect mongo
Mounts属性就是告诉我们容器相关的数据卷信息 :
"Mounts": [
{
"Type": "volume",
"Name": "64fc04261571782d92a7e9b486f3876b7713c24c57ba08a3406b36ee2356ca6e",
"Source": "/var/lib/docker/volumes/64fc04261571782d92a7e9b486f3876b7713c24c57ba08a3406b36ee2356ca6e/_data",
"Destination": "/data/configdb",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
{
"Type": "volume",
"Name": "mongo_data_yapi",
"Source": "/var/lib/docker/volumes/mongo_data_yapi/_data",
"Destination": "/data/db",
"Driver": "local",
"Mode": "z",
"RW": true,
"Propagation": ""
}
注:在Volumes信息里面也可以看到
二 备份单个数据卷(结尾会讲如何备份多个数据卷)
docker run -i -t --volumes-from mongo-yapi -v $(pwd):/backup mongo tar cvf /backup/backupdata.tar /data/db
相关option说明:
--volumes-from : 表示引用哪个容器的数据卷
$(pwd) : 获取当前目录路径
backup : 执行备份指令
tar /backup/backupdata.tar /data/db : 打包容器内需保留的数据目录
三 备份后的数据转移到新服务器后恢复单个数据卷
转移过程省略, ftp一键传过去即可
docker run -itd -v /data/db --name data1 mongo /bin/bash
创建临时容器用空目录映射到之前要保留的数据目录下, 切记-v 后不要创建数据卷映射到容器目录, 要保证目录的干净完整以便于等会儿恢复数据不会再遭遇未知的bug
docker run --rm --volumes-from data1 -v $(pwd):/backup mongo tar xvf /backup/backupdata.tar
创建临时容器恢复数据卷到刚刚创建的新容器data1中, --rm 属性会在执行完后立即删除该容器
四 引用临时容器数据卷正式安装mongo
docker inspect data1
查询上一步创建的临时容器data1的数据卷
docker run -d --name mongo-yapi -v mongo_data_yapi:/data/db mongo
引用临时容器数据卷构建新的容器, 搞定后删除临时容器即可! 此时运行已经成功了!!!!!!!!!!!!!!!! 烟花, 礼炮, 意大利炮!!!
Final补充 : 备份及恢复多个数据卷
1> 备份多个数据卷
docker run -tid --rm --volumes-from mongo-yapi -v $(pwd):/backup mongo tar cvf /backup/backup.tar /var/volume1 /var/volume2
/var/volume1 /var/volume2 即容器内映射的两个目录
2> 创建临时容器及恢复多个数据卷
docker run -tid -v /data/db -v /data/configdb --name data1 mongo /bin/bash
docker run --rm --volumes-from data1 -v $(pwd):/backup mongo tar xvf /backup/backup.tar -C /
/data/configdb
/data/db
-C属性是根据备份好的打包数据指定好同样的的映射到容器内的目录
@@完结!
如果你遇到了其他的问题或者你也和我一样对技术充满热情, 欢迎随时与我交流! wechat: s13037657871