docker export/import到docker容器迁移的思考

本文介绍了使用Docker进行容器迁移的两种方式:一种是利用docker export和import命令,另一种则是通过docker save和load命令。文章详细记录了在实际操作过程中遇到的问题及解决办法,并对比了这两种方法的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

docker export 导出docker容器为一个文件,相当于一个容器快照;
docker import 根据导出的文件生成一个镜像。

  1. export镜像到文件
    当前目录在/usr/local/docker-tar/目录下,此为空目录,通过docker ps看到当前正在运行的tomcat,此tomcat通过更新,可以查看到项目首页。docker export -o “my-tomcat.tar” a3ceb9987840命令将容器导出到my-tomcat.tar文件,通过ll命令查看到了导出的文件。
    在这里插入图片描述

  2. import文件为镜像
    通过docker images查看当前的所有镜像,docker import --message “this is a testing tomcat” my-tomcat.tar tomcat:1.0.1将文件my-tomcat.tar生成对应的docker镜像,tag为自定义的版本号。
    在这里插入图片描述到这里其实一起都很顺利,但当通过镜像运行容器时,总是会报错,大概意思就是linux与docker不兼容,我服了啊,原先的环境,docker都运行的好好的,export在import后就出幺蛾子了。
    在这里插入图片描述docker: Error response from daemon: OCI runtime create failed: container_linux.go:367: starting container process caused: exec: "catalina.sh": executable file not found in $PATH: unknown.最开始的异常代码好像是235,根据网上的教程,更新docker,卸载重新安装后,换成了367,没有什么作用。另外,这种方法在运行容器的时候还必须加原容器运行的commond,通过docker ps命令可以看到。
    当前测试环境有限,暂时不打算深究。
    docker export/import是将运行中的容器,打包成文件,便于迁移,在其它环境中,根据该文件再还原成镜像,通过镜像来运行容器。对应地,也可以先将容器保存为镜像,通过镜像打包成文件,文件便于迁移,可还原成镜像,进而运行容器。下面继续研究通过容器–镜像–文件–镜像–容器的方法来实现迁移。

  3. tomcat自定义
    还是通过最开始在docker hub上pull的tomcat镜像,运行一个容器,该容器是没有首页的,需要将/usr/local/tomcat/webapps.dist目录重命名为/usr/local/tomcat/webapps,原webapps目录是个空目录,先重命名为其它的文件夹。这样一来,运行的容器可以正常访问首页。
    在这里插入图片描述在/usr/local/tomcat/webapps/ROOT/目录下有一个index.jsp文件,即项目的首页,我们先把这个首页做一些小的更新,由于在docker容器中没有vi或vim命令可用,只能通过容器数据卷或者是拷贝的方式,来修改容器中的文件。此处,我们使用命令:docker cp mytomcat01:/usr/local/tomcat/webapps/ROOT/index.jsp /tomcat/index.jsp,把这个文件拷贝到宿主机的/tomcat/目录下。
    在宿主机vim /tomcat/index.jsp来修改首页文件。
    此处我们搞简单点儿,多添加一行文字,主要就是标记这是我们自己改过的tomcat。
    在这里插入图片描述保存后,使用docker /tomcat/index.jsp mytomcat01:/usr/local/tomcat/webapps/ROOT/index.jsp替换掉原tomcat容器中的首页文件,这里的mytomcat01是我自己的容器名,大家不要无脑复制。
    刷新一下页面,可以看到项目首页已经更新出了我们添加的文字信息。
    在这里插入图片描述

  4. docker commit 保存镜像
    在这里插入图片描述

  5. docker save将镜像打包成文件
    在这里插入图片描述现在的镜像,已经打包成了一个tar压缩文件,可以拷贝,迁移到其它的服务环境。
    现在,我们把本机的容器以及镜像都删掉,再通过文件来恢复,模拟迁移后的重新部署过程。
    在这里插入图片描述可以看到,已经没有tomcat相关的容器,与tomcat有关的两个镜像也是从docker hub上pull下来的,没有经过任何的加工。

  6. docker load还原镜像
    在这里插入图片描述

  7. docker run运行容器
    在这里插入图片描述此次故意将宿主机的8888端口映射到docker容器的8080端口,容器正常启动,最关键最关键的来了,访问宿主机的8888端口,访问项目首页,查看是否有我们更新的信息。
    在这里插入图片描述效果符合预期。

  8. 总结:在弄清楚docker export 和 docker import之前,应该都只会使用docker save和docker load的方式来迁移容器了,前者肯定也是可行的,不过目前看来对环境和操作要求更高,后者则更加高效。
    后期再更新docker export和docker import的操作吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

穿条秋裤到处跑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值