背景
现在许多信创项目有一套自己的容器和服务管理,实际上是变种docker,这是可以远程更新的基础。然而,由于各种原因,信创云平台不会给我们提供直接登录应用服务器的权限,也不会给完全管理容器和服务管理应用的所有权限,更新自己项目系统的时候一般只提供某个平台去上传和构建代码,最后推送到自己项目的容器下,并通过容器和服务管理页面去启动推送过来的镜像。
但是做过信创项目的都知道,云平台提供的代码上传和构建平台做得很菜,培训也约等于没有,加之还有可能在用两三年后又告诉你换了代码构建平台…总之用起来特别难受,费时费心。所以我们后续考虑通过运维机器直接推送这条路径。
准备
1.需要有一台运维机器且能双向通信应用容器:
因为我们需要把代码(一般是docker镜像的形式)拉下来,在运维机器替换更新后再重新打包上传回应用容器里。如果这点做不到,就不要看下去了。
2.运维机器上部署docker:
利用docker的远程拉取和推送功能将老代码下载并更新上传。
实现
前端更新方法
本更新方法针对静态页面形式部署的前端,在服务器中是一个个html+样式+相关js脚本等组成的文件。
1.拉取前端镜像到跳板机的docker,后续将在此基础上做更新:docker pull 19.1.2.2:11/100010023/mainproject-fe:版本号
2.启动镜像,将/root/data1/映射给容器内的/root:docker run -d -p 4001:80 --name mainproject-fe -v /root/data1:/root 19.1.2.2:11/100010023/mainproject-fe:第一步的版本号
3.将从本地上传要更新的前端到跳板机,这里以formdesigner-web为例,先解压好。命令:mv formdesigner-web /root/data1/ 将解压后的formdesigner-web复制到跳板机的/root/data1。此时容器内的/root能直接拿到容器外的/root/data1下面的东西。
4.docker exec -it mainproject-fe /bin/sh 进入容器,命令:cd /usr/share/nginx/html进入前端文件夹,再用命令: rm -rf formdesigner-web 删除旧版本前端,最后用命令: mv /root/* ./ 将前端从/root复制到/usr/share/nginx/html
5./usr/share/nginx/html下,命令ls -la 查看文件时间,如果formdesigner-web 时间是最新的,则更新成功。然后执行 chmod 777 -R formdesigner-web,将权限改成任何用户都能访问。
6.exit命令退出容器, 保存镜像 docker commit mainproject-fe 19.1.2.2:11/100010023/mainproject-fe:新的版本号
7.该步骤只是验证前面更新替换成功没有,实际可不做。启动一下上一步形成的镜像:docker run -d -p 4001:80 --name mainproject-fe 19.1.2.2:11/100010023/mainproject-fe:第6步的版本号。查看/usr/share/nginx/html下formdesigner-web时间是不是最新的,是就更新成功。
8. 推送镜像docker push 19.1.2.2:11/100010023/mainproject-fe:第5步的版本号
后端实现方法
这里只提供编程语言为java,通过jar包更新的方法
1.拉取想要更新的镜像版本:docker pull 1.1.2.2:3110/100010023/mineral:版本号
2.启动容器,将容器外的/root/data2映射给容器内的/root:docker run -d -p 8002:8002 --net=host --name mineral -v /root/data2:/root 1.1.2.2:3110/100010023/mineral:第一步的版本号
3.假设jar包在镜像中的/目录下,且名字固定为app.jar。此时将已经上传到运维机器的jar包改名为app.jar,然后复制到/root/data2,命令:mv mineral.jar app.jar && cp app.jar /root/data2/
4.进入容器:docker exec -it mineral /bin/bash
5.删除最外层,也就是/目录下的app.jar,然后将/root中的app.jar移到最外层,也就是/下,最后修改文件权限为所有人都有权限即可,命令:rm app.jar && mv /root/app.jar / && chmod 777 -R /*
(注意,第5步删除旧包和移动新包的操作最好不要分开做,因为
删除老的app.jar的瞬间容器就会死掉,因为缺少app.jar,容器就再也起不来。)
6.exit 退出容器,然后打包替换jar以后的容器,命令:docker commit -p mineral 19.15.212.28:31104/tsf_100010023/mineral:新版本号
7.推送打包好的镜像:docker push 1.1.2.2:3110/100010023/mineral:新版本号
注意:3-7步过程中,后端容器可能会因为反复连接数据库失败等问题会自己死掉,所以如果发现进入不了容器或者进入后自己退出,请重新启动下容器:docker start mineral。
如果想检查是否更新打包成功,本地启动6步中形成的镜像,进入容器查看app.jar 的日期即可。
33

被折叠的 条评论
为什么被折叠?



