1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > docker export/import到docker容器迁移的思考

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

时间:2022-03-05 05:16:13

相关推荐

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

docker export 导出docker容器为一个文件,相当于一个容器快照;

docker import 根据导出的文件生成一个镜像。

export镜像到文件

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

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是将运行中的容器,打包成文件,便于迁移,在其它环境中,根据该文件再还原成镜像,通过镜像来运行容器。对应地,也可以先将容器保存为镜像,通过镜像打包成文件,文件便于迁移,可还原成镜像,进而运行容器。下面继续研究通过容器–镜像–文件–镜像–容器的方法来实现迁移。

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是我自己的容器名,大家不要无脑复制。

刷新一下页面,可以看到项目首页已经更新出了我们添加的文字信息。

docker commit 保存镜像

docker save将镜像打包成文件

现在的镜像,已经打包成了一个tar压缩文件,可以拷贝,迁移到其它的服务环境。

现在,我们把本机的容器以及镜像都删掉,再通过文件来恢复,模拟迁移后的重新部署过程。

可以看到,已经没有tomcat相关的容器,与tomcat有关的两个镜像也是从docker hub上pull下来的,没有经过任何的加工。

docker load还原镜像

docker run运行容器

此次故意将宿主机的8888端口映射到docker容器的8080端口,容器正常启动,最关键最关键的来了,访问宿主机的8888端口,访问项目首页,查看是否有我们更新的信息。

效果符合预期。

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

后期再更新docker export和docker import的操作吧。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。