一、前提条件:
之前聊到,在ubuntu虚拟机上面安装了Yapi和MongoDB容器,运行Yapi程序。现在要将其迁移到另一台服务器上,保留所有数据。
参考了以下两位同学的博客,万分感谢:
1. 卷的基本操作中讲到如何运行一个容器并且加载某个已经存在的卷 https://www.cnblogs.com/yjlch1016/p/9033078.html
2. 博客 https://blog.csdn.net/s78365126/article/details/88065144 教你 如何打包卷和恢复卷
第一步:在服务器2上安装Docker。在此不做多的描述了。
第二步:在服务器1上,打包数据卷:
$ docker run -i -t --volumes-from mongo-yapi -v $(pwd):/backup mongo tar cvf /backup/backupdata.tar /data/db
参数解释:
volumes -from mongo-yapi:表示要用mongo-yapi这个容器的数据卷。 $(pwd):获取当前目录路径 backup:执行备份指令 tar /backup/backupdata.tar /data/db : 打包容器内需要保留的数据目录到backupdata.tar 文件。
打包完成了,看到目标文件乖巧的躺在那里。(ls -a 命令)
第三步:将tar文件传输到新服务器上。此处不演示。
第四步:创建临时容器,用空目录映射到之前要保留的数据目录下。
$ docker run -itd -v /data/db --name data1 mongo /bin/bash
第五步:创建临时容器恢复数据卷到刚刚创建的新容器data1中。这个刷屏了。所以只留了部分截图。--rm 属性会在执行完后立即删除该容器
$ docker run --rm --volumes-from data1 -v $(pwd):/backup mongo tar xvf /backup/backupdata.tar
第六步:查看都有哪些数据卷存在,并且可用
$ docker volume list
查看卷的基本信息。这俩个卷,后创建的那个是我们要用到的。xxxxxxxxxxxxxxxx是容器ID,我就这么写了。
$ docker volume inspect xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
第七步:运行一个mongo容器,使用已经被恢复的卷。xxxxxxxxxxxxxxxx是容器ID。
$ docker run -d --name mongo-yapi -v xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:/data/db mongo
第八步:加载Yapi镜像:
$ docker pull registry.cn-hangzhou.aliyuncs.com/anoy/yapi
第九步:初始化, 这个时候如果不出意外的话应该有一个报错:管理员账号初始化失败。这个不用管。因为数据库中原有管理员账号,所以报这个错是正常的。
docker run -it --rm --link mongo-yapi:mongo --entrypoint npm --workdir /api/vendors registry.cn-hangzhou.aliyuncs.com/anoy/yapi run install-server
第十步:启动Yapi服务。
docker run -d --name yapi --link mongo-yapi:mongo --workdir /api/vendors -p 3000:3000 registry.cn-hangzhou.aliyuncs.com/anoy/yapi server/app.js
第十一步:在浏览器中打开:http://192.168.23.133:3000,进入系统。能够看到,直接打开了迁移之前的数据,完完整整。