docker远程更新小技巧

背景

现在许多信创项目有一套自己的容器和服务管理,实际上是变种docker,这是可以远程更新的基础。然而,由于各种原因,信创云平台不会给我们提供直接登录应用服务器的权限,也不会给完全管理容器和服务管理应用的所有权限,更新自己项目系统的时候一般只提供某个平台去上传和构建代码,最后推送到自己项目的容器下,并通过容器和服务管理页面去启动推送过来的镜像。
但是做过信创项目的都知道,云平台提供的代码上传和构建平台做得很菜,培训也约等于没有,加之还有可能在用两三年后又告诉你换了代码构建平台…总之用起来特别难受,费时费心。所以我们后续考虑通过运维机器直接推送这条路径。

准备

1.需要有一台运维机器且能双向通信应用容器:
因为我们需要把代码(一般是docker镜像的形式)拉下来,在运维机器替换更新后再重新打包上传回应用容器里。如果这点做不到,就不要看下去了。
2.运维机器上部署docker:
利用docker的远程拉取和推送功能将老代码下载并更新上传。

实现

前端更新方法

本更新方法针对静态页面形式部署的前端,在服务器中是一个个html+样式+相关js脚本等组成的文件。

1.拉取前端镜像到运维机器的docker,后续将在此基础上做更新:
docker pull 1.1.2.2:3110/100010023/mainproject:版本号
解析:1.1.2.2:3110/100010023/mainproject:版本号   是应用容器中前端镜像的仓库地址


2.启动镜像,将/root/data1/映射给容器内的/root:docker run -d -p 4001:80 --name mainproject  -v /root/data1:/root 1.1.2.2:3110/100010023/mainproject:第一步的版本号

3.假设前端文件在容器内/usr/share/nginx/html路径下。 
docker exec -it mainproject /bin/sh  进入容器,复制所有前端到/root/下:cp -r /usr/share/nginx/html/* /root/

4.exit命令退出容器,并从本地上传要更新的前端到运维机器,这里以formdesigner为例,先解压好。然后将解压后的整个文件夹复制到跳板机的/root/data1,以替换掉老的formdesigner。这里可同时在/root/data1下随手新建一个文件,用来验证打包更新是否成功。

5. docker exec -it mainproject /bin/sh  进入容器,将/root下更新过的前端整体复制回/usr/share/nginx/html路径下并修改权限为所有用户都可用:rm -rf /usr/share/nginx/html && cp -R /root/* /usr/share/nginx/html && chmod 777 -R /usr/share/nginx/html/* 

6. 保存镜像 docker commit mainproject 1.1.2.2:3110/100010023/mainproject:新的版本号

7.该步骤只是验证前面更新替换成功没有,实际可不做。启动一下上一步形成的镜像:docker run -d -p 4001:80 --name mainproject   1.1.2.2:3110/100010023/mainproject:第5步的版本号。查看/usr/share/nginx/html下是否存在第四步中新建的文件。如果存在则证明第5步打包成功。

8. 推送镜像docker push 1.1.2.2:3110/100010023/mainproject:第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 /*

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 的日期即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值