将一台服务器上的环境通过docker转换到另一台服务器

为了方便管理和维护,一般在配置服务器的时候都会将环境搭建到docker容器中方便测试和维护
但我的服务器到期了,所有现在要转移所有环境到新的(更便宜的)服务器上
虽然我知道还有个东西叫做docker私有仓库,但穷限制了我的想象力。。。
第一步

docker ps

查看所有容器
将一台服务器上的环境通过docker转换到另一台服务器_第1张图片
第二步
查看所有镜像

docker images

将一台服务器上的环境通过docker转换到另一台服务器_第2张图片
第三步
将需要转移的容器保存为镜像

docker commit 容器名称 镜像名称

将一台服务器上的环境通过docker转换到另一台服务器_第3张图片
有多个就操作多次
将一台服务器上的环境通过docker转换到另一台服务器_第4张图片
第四步
使用docker save命令可以将已有镜像保存为tar 文件。

docker save –o 文件名.tar 镜像名

有多个就保存多次
将一台服务器上的环境通过docker转换到另一台服务器_第5张图片
第五步
就是通过文件传输工具把所有的tar文件都转到新的服务器上
最后还需要转过去的还有docker-compose.yml文件(如果你安装了docker-compose)
将一台服务器上的环境通过docker转换到另一台服务器_第6张图片

第六步
传输tar包完成后,执行命令加载tar包和运行镜像

# 加载恢复镜像
docker load -i 镜像名.tar

将一台服务器上的环境通过docker转换到另一台服务器_第7张图片

加载完成后如果有docker compose.yml文件的,直接用文件启动容器即可
没有的手动启动(要和之前创建容器的配置一样)
例如:

# 在镜像恢复之后,基于该镜像再次创建启动容器
docker run -di --name=nginx -p 80:80 nginx

所以在创建docker的时候,一定要创建一个docker-compose.yml文件
方便后期操作(如果你和我一样因为没钱要转移服务器的话。。。。)

最后一步

如果有镜像在原来的服务器上创建容器时添加了映射路径,那就要把映射文件一起复制过去
不然在把镜像传送过去后创建容器会发现,容器虽然转移过来了,但是文件没有转移过来
将一台服务器上的环境通过docker转换到另一台服务器_第8张图片
将一台服务器上的环境通过docker转换到另一台服务器_第9张图片
这是因为宿主机与容器做了路径映射,再commit一个新的镜像时,该路径下的所有数据都会被抛弃,不会被保存到新镜像中
可以使用命令验证容器是否做了路径映射

docker inspect --format=’{{.Mounts}}’ 镜像名

将一台服务器上的环境通过docker转换到另一台服务器_第10张图片

值得注意的时,这里的MySQL,elasticsearch,redis比较特殊,创建容器时我并没有做路径映射,但是docker自动做了这些操作
在这里插入图片描述
对于进行了路径映射的容器,用上面的命令找到对应的路径,然后再把文件全部复制到新服务器上对应的文件路径去就可以了,配置好的路径转移过去了也不会变化

但是MySQL,elasticsearch,redis则需要在转移到新的服务器上时,由于时系统自动配置的,所以路径名称也是随机生成的,还需要先查看系统自动映射的文件路径在复制
在这里插入图片描述
找到新服务器上的路径,然后将原服务器上的文件全转过来
将一台服务器上的环境通过docker转换到另一台服务器_第11张图片
进入MySQL容器检查
将一台服务器上的环境通过docker转换到另一台服务器_第12张图片
但有些时候将镜像转移过去后可能由于系统不同的原因不会自动创建路径映射
所有最保险的方法就是在新服务器创建容器时手动添加配置路径映射,获取在docker-compose.yml里配置,配置的时候可以把映射路径固定了,然后就不必麻烦服务器了

当然还有更简单的
就是用Navicat工具直接传输了
将一台服务器上的环境通过docker转换到另一台服务器_第13张图片
将一台服务器上的环境通过docker转换到另一台服务器_第14张图片
将一台服务器上的环境通过docker转换到另一台服务器_第15张图片
除了速度有点慢以外,其他没啥缺点,比直接移动文件更保险一点

再遇docker-compose的具体配置明天写
这里就不测试了,太晚了,睡了,晚安

你可能感兴趣的:(服务器,java,docker)