CN116501363A - 软件离线快速升级方法、装置、计算机设备及存储介质 - Google Patents

软件离线快速升级方法、装置、计算机设备及存储介质 Download PDF

Info

Publication number
CN116501363A
CN116501363A CN202310781445.7A CN202310781445A CN116501363A CN 116501363 A CN116501363 A CN 116501363A CN 202310781445 A CN202310781445 A CN 202310781445A CN 116501363 A CN116501363 A CN 116501363A
Authority
CN
China
Prior art keywords
package
upgrade
container
directory
script
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202310781445.7A
Other languages
English (en)
Other versions
CN116501363B (zh
Inventor
柳遵梁
邓凌飞
顾寅红
闻建霞
邱涛
高晓东
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hangzhou Meichuang Technology Co ltd
Original Assignee
Hangzhou Meichuang Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hangzhou Meichuang Technology Co ltd filed Critical Hangzhou Meichuang Technology Co ltd
Priority to CN202310781445.7A priority Critical patent/CN116501363B/zh
Priority claimed from CN202310781445.7A external-priority patent/CN116501363B/zh
Publication of CN116501363A publication Critical patent/CN116501363A/zh
Application granted granted Critical
Publication of CN116501363B publication Critical patent/CN116501363B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/658Incremental updates; Differential updates
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明实施例公开了软件离线快速升级方法、装置、计算机设备及存储介质。所述方法包括:构建支持离线增量升级的基础镜像包;基于所述基础镜像包制作增量升级包;基于所述基础镜像包应用所述增量升级包,以对软件进行离线升级。通过实施本发明实施例的方法可实现通过Docker部署发布的软件在离线环境能够轻量、快速完成升级。

Description

软件离线快速升级方法、装置、计算机设备及存储介质
技术领域
本发明涉及计算机,更具体地说是指软件离线快速升级方法、装置、计算机设备及存储介质。
背景技术
越来越多的软件通过Docker部署发布,因为Docker可以将应用程序及其所有依赖项打包在一个容器中,可以在不同的平台上运行而无需担心环境配置和依赖问题,极大地简化了软件的部署和管理,但同时也带来了一些新的挑战,其中包括离线运行情况下软件的升级问题。在离线环境中,传统的升级方式就是软件发布者重新构建新的镜像包,再将镜像文件通过物理介质或局域网网络上传到安装的服务器上,最后再实施升级,通常镜像包大小可达数GB甚至10GB以上,一方面会额外占用服务器的存储空间;另一方面上传和下载镜像包会花费大量时间,增加实施的成本。
因此,有必要设计一种新的方法,实现通过Docker部署发布的软件在离线环境能够轻量、快速完成升级。
发明内容
本发明的目的在于克服现有技术的缺陷,提供软件离线快速升级方法、装置、计算机设备及存储介质。
为实现上述目的,本发明采用以下技术方案:软件离线快速升级方法,包括:
构建支持离线增量升级的基础镜像包;
基于所述基础镜像包制作增量升级包;
基于所述基础镜像包应用所述增量升级包,以对软件进行离线升级;
所述基于所述基础镜像包制作增量升级包,包括:
加载所述基础镜像包,并启动所述基础镜像包的容器;
进入所述基础镜像包的容器内,将应用程序和依赖升级到目标版本后,退出容器;
指定所述基础镜像包的容器的repo和tag,得到目标容器镜像;
通过docker images命令查看所述基础镜像包以及目标容器镜像的信息,
下载安装container-diff工具;
执行 container-diff命令得到基础镜像和目标镜像的差异文件列表,并重定向到一个文件中;
编写制作增量升级包的脚本,脚本入参为所述文件路径;
运行所述脚本,并传入所述文件的路径作为参数,脚本运行结束后,在当前目录会生成zip文件,以得到增量升级包。
其进一步技术方案为:所述构建支持离线增量升级的基础镜像包,包括:
编写升级脚本;
编写Dockerfile;
在Dockerfile目录下,创建镜像包;
从所述Dockerfile内导出镜像包,以得到基础镜像包。
其进一步技术方案为:所述编写升级脚本,包括:
检查升级包存放目录是否存在增量升级包;
当升级包存放目录存在增量升级包,则解压增量升级包到临时目录;
将所述临时目录下除diff.json外所有目录和文件拷贝到根目录;
读取diff.json找到Dels项的目录和文件,并删除Dels项的目录和文件;
删除临时目录,以得到升级脚本。
其进一步技术方案为:所述编写Dockerfile,包括:
增加挂载存储卷;
拷贝所述升级脚本到指定目录;
安装应用程序和依赖;
修改CMD命令在运行应用程序前先运行升级脚本。
其进一步技术方案为:所述基于所述基础镜像包应用所述增量升级包,以对软件进行离线升级,包括:
部署所述基础镜像包;
将所述增量升级包通过存储介质或局域网网络上传到设定目录中;
判断在设定目录下是否存在增量升级包;
若在设定目录下不存在增量升级包,则创建软连接;
查找基础镜像包正在运行的容器,得到容器ID;
根据所述容器ID重启容器,容器启动过程中会先运行升级脚本再运行应用程序;
若在设定目录下存在增量升级包,则删除所述设定目录下的增量升级包,并执行所述创建软连接。
其进一步技术方案为:所述部署所述基础镜像包,包括:
将所述基础镜像包上传到安装服务器;
加载所述基础镜像包;
创建作为镜像存储卷的挂载路径的目录,以得到镜像挂载目录;
运行所述镜像挂载目录下的命令,以部署所述基础镜像包。
本发明还提供了软件离线快速升级装置,包括:
基础镜像包构建单元,用于构建支持离线增量升级的基础镜像包;
升级包制作单元,用于基于所述基础镜像包制作增量升级包;
应用单元,用于基于所述基础镜像包应用所述增量升级包,以对软件进行离线升级;
所述升级包制作单元包括加载子单元、升级子单元、指定子单元、查看子单元、下载子单元、定向子单元、脚本子单元以及文件生成子单元;
加载子单元,用于加载所述基础镜像包,并启动所述基础镜像包的容器;升级子单元,用于进入所述基础镜像包的容器内,将应用程序和依赖升级到目标版本后,退出容器;指定子单元,用于指定所述基础镜像包的容器的repo和tag,得到目标容器镜像;查看子单元,用于通过docker images命令查看所述基础镜像包以及目标容器镜像的信息,下载子单元,用于下载安装container-diff工具;定向子单元,用于执行 container-diff命令得到基础镜像和目标镜像的差异文件列表,并重定向到一个文件中;脚本子单元,用于编写制作增量升级包的脚本,脚本入参为所述文件路径;文件生成子单元,用于运行所述脚本,并传入所述文件的路径作为参数,脚本运行结束后,在当前目录会生成zip文件,以得到增量升级包。本发明还提供了一种计算机设备,所述计算机设备包括存储器及处理器,所述存储器上存储有计算机程序,所述处理器执行所述计算机程序时实现上述的方法。
本发明还提供了一种存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述的方法。
本发明与现有技术相比的有益效果是:本发明通过先构建支持离线增量升级的基础镜像包,并基于基础镜像包制作增量升级包,且应用该增量升级包,以对软件进行离线升级,实现通过Docker部署发布的软件在离线环境能够轻量、快速完成升级。
下面结合附图和具体实施例对本发明作进一步描述。
附图说明
为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的软件离线快速升级方法的应用场景示意图;
图2为本发明实施例提供的软件离线快速升级方法的流程示意图;
图3为本发明实施例提供的软件离线快速升级方法的子流程示意图;
图4为本发明实施例提供的软件离线快速升级方法的子流程示意图;
图5为本发明实施例提供的软件离线快速升级方法的子流程示意图;
图6为本发明实施例提供的软件离线快速升级方法的子流程示意图;
图7为本发明实施例提供的软件离线快速升级方法的子流程示意图;
图8为本发明实施例提供的软件离线快速升级方法的子流程示意图;
图9为本发明实施例提供的软件离线快速升级装置的示意性框图;
图10为本发明实施例提供的软件离线快速升级装置的基础镜像包构建单元的示意性框图;
图11为本发明实施例提供的软件离线快速升级装置的第一编写子单元的示意性框图;
图12为本发明实施例提供的软件离线快速升级装置的第二编写子单元的示意性框图;
图13为本发明实施例提供的软件离线快速升级装置的升级包制作单元的示意性框图;
图14为本发明实施例提供的软件离线快速升级装置的应用单元的示意性框图;
图15为本发明实施例提供的软件离线快速升级装置的部署子单元的示意性框图;
图16为本发明实施例提供的计算机设备的示意性框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
还应当进一步理解,在本发明说明书和所附权利要求书中使用的术语“和/ 或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
请参阅图1和图2,图1为本发明实施例提供的软件离线快速升级方法的应用场景示意图。图2为本发明实施例提供的软件离线快速升级方法的示意性流程图。该软件离线快速升级方法应用于服务器中。该服务器与终端进行数据交互,该服务器可以包括构建服务器、安装服务器以及升级服务器,也就是说服务器囊括有构建、安装和升级的功能,实现了软件在离线环境下能够轻量、快速完成升级的方法。
图2是本发明实施例提供的软件离线快速升级方法的流程示意图。如图2所示,该方法包括以下步骤S110至S130。
S110、构建支持离线增量升级的基础镜像包。
在本实施例中,基础镜像包是指支持离线增量升级的镜像包。
在一实施例中,请参阅图3,上述的步骤S110可包括步骤S111~S114。
S111、编写升级脚本。
在本实施例中,升级脚本是指运行时是对软件进行升级的指令。
在一实施例中,请参阅图4,上述的步骤S111可包括步骤S1111~S1115。
S1111、检查升级包存放目录是否存在增量升级包;
当升级包存放目录不存在增量升级包,则退出,不做升级动作;
S1112、当升级包存放目录存在增量升级包,则解压增量升级包到临时目录;
S1113、将所述临时目录下除diff.json外所有目录和文件拷贝到根目录。
S1114、读取diff.json找到Dels项的目录和文件,并删除Dels项的目录和文件。
S1115、删除临时目录,以得到升级脚本。
具体地,检查升级包存放目录是否存在增量升级包,升级包名称为docker-diff.zip,如果不存在则退出,不做升级动作。解压增量升级包到临时目录/tmp/diff_upgrade_tmp/。将/tmp/diff_upgrade_tmp/下除diff.json外所有目录和文件拷贝到根目录/。读取diff.json找到Dels项的目录和文件,并将它们删除。删除临时目录/tmp/diff_upgrade_tmp/ 并退出。
S112、编写Dockerfile。
在一实施例中,请参阅图5,上述的步骤S112可包括步骤S1121~S1124。
S1121、增加挂载存储卷;
S1122、拷贝所述升级脚本到指定目录;
S1123、安装应用程序和依赖;
S1124、修改CMD命令在运行应用程序前先运行升级脚本。
具体地,增加挂载存储卷/docker-diff-upgrade-packages/,用于存放增量升级包;拷贝所述升级脚本到/目录;安装应用程序和依赖;修改CMD命令在运行应用程序前先运行升级脚本。
以下是个简单示例:FROMdocker.io/python:app01_1.0.0;
#挂载存储卷;
VOLUME /docker-diff-upgrde-packages;
#拷贝升级脚本文件;
COPYdocker-diff-upgrde.py/;
RUNchmod+x/docker-diff-upgrde.py;
#运行程序之前先运行升级脚本;
CMD/docker-diff-upgrde.py;python/opt/app01/main.py。
S113、在Dockerfile目录下,创建镜像包;
S114、从所述Dockerfile内导出镜像包,以得到基础镜像包。
具体地,编写Dockerfile,声明一个挂载卷(VOLUME),用于存放增量升级包。编写Dockerfile, 通过COPY命令将上述升级脚本放置到镜像根目录下。编写Dockerfile的CMD指令:在运行应用程序之前,先运行上述升级脚本。运行docker build命令构建上述Dockerfile的镜像。运行 docker save命令将镜像导出tar包,此tar包为发布的基础镜像。
S120、基于所述基础镜像包制作增量升级包。
在一实施例中,请参阅图6,上述的步骤S120可包括步骤S121~S128。
S121、加载所述基础镜像包,并启动所述基础镜像包的容器;
S122、进入所述基础镜像包的容器内,将应用程序和依赖升级到目标版本后,退出容器;
S123、指定所述基础镜像包的容器的repo和tag,得到目标容器镜像。
S124、通过docker images命令查看所述基础镜像包以及目标容器镜像的信息;
S125、下载安装container-diff工具;
S126、执行 container-diff命令得到基础镜像和目标镜像的差异文件列表,并重定向到一个文件中;
S127、编写制作增量升级包的脚本,脚本入参为所述文件路径;
S128、运行所述脚本,并传入所述文件的路径作为参数,脚本运行结束后,在当前目录会生成zip文件,以得到增量升级包。
在本实施例中,在构建服务器上加载基础镜像,并启动该镜像的容器。进入容器将应用程序和依赖升级到目标版本后退出容器。通过docker commit容器生成目标镜像。安装container-diff工具。运行container-diff工具比较基础镜像和目标镜像,可以得到变更文件和目录的列表,列表包含新增,删除和修改项,将此列表保存为文件。编写脚本将上述变更列表文件、变更目录和变更文件拷贝到一个临时目录,并将目录内的文件压缩为zip包,该zip包即为增量升级包。
具体地,在构建服务器通过docker load -i命令加载所述基础镜像包,并启动该基础镜像包的容器;进入上述容器内,将应用程序和依赖升级到目标版本后,退出容器;执行docker commit 命令指定容器的repo和tag,得到目标容器镜像;通过docker images命令查看两个镜像的信息,示例如下:
[root@localhost~]#docker images;
REPOSITORY TAG IMAGE ID CREATED SIZE;
Docker .io/python app01_1.0.1 93cdbffa484d 3 hours ago 51.8MB;
Docker .io/python app01_1.0.0 4ee4b049eab1 3 hours ago 51.8MB。
其中,app01_1.0.0tag为基础镜像,app01_1.0.1为目标镜像。
通过命令:curl -LO https://storage.googleapis.com/container-diff/latest/container-diff-linux-amd64 &&sudo install container-diff-linux-amd64 /usr/local/bin/container-diff下载安装container-diff工具。
执行 container-diff命令得到基础镜像和目标镜像的差异文件列表,命令示例如下:
Container-diff diff daemon://docker.io/python:app01_1.0.0 daemon://docker.io/python:app01_1.0.1 --type=file --json。
将上述命令的输出结果重定向到一个文件中,文件内容示例如下:
[
{
"Image1":"docker.io/python:app01_1.0.0",
"Image2":"docker.io/python:app01_1.0.1",
"DiffType":"File",
"Diff":{
"Adds":[
{
"Name":"/opt/app01/new.py",
"Size":41
}
],
"Dels":[
{
"Name":"/opt/app01/tmp.txt",
"Size":19
}
],
"Mods":[
{
"Name":"/opt/app01/helper.py",
"Size1":72,
"Size2":116
}
]
}
}
]。
对于编写制作增量升级包的脚本,脚本入参为上述步骤的输出文件路径,步骤如下:
加载参数对应的json文件,得到Image1,Image2、Adds和Mods的值;
根据Image1、Imager2值得到镜像名称image_name和tag1、tag2,创建临时目录/tmp/docker_diff_$image_name_$tag1_$tag2,将脚本入参的json文件拷贝到临时目录里,并重命名为diff.json;
启动目标镜像(Image2)的容器,遍历Adds和Mods的值,使用dockercp命令将这些变更项以绝对路径的方式(含目录)拷贝到/tmp/docker_diff_$image_name_$tag1_$tag2目录里;
将/tmp/docker_diff_$image_name_$tag1_$tag2目录下的所有文件压缩到./docker-diff_$image_name_$tag1_$tag2.zip;
运行上述脚本,并传入所输出的文件路径作为参数,脚本运行结束后在当前目录会生成zip文件,至此增量升级包制作完成。该zip文件解压后文件目录结构为diff.json-pot-app01-helper.py-new.py。其中diff.json为变更文件列表;helper.py,new.py为变更和新增文件。
S130、基于所述基础镜像包应用所述增量升级包,以对软件进行离线升级。
在一实施例中,请参阅图7,上述的步骤S130可包括步骤S131~S137。
S131、部署所述基础镜像包。
在一实施例中,请参阅图8,上述的步骤S131可包括步骤S1311~S1314。
S1311、将所述基础镜像包上传到安装服务器。
S1312、加载所述基础镜像包;
S1313、创建作为镜像存储卷的挂载路径的目录,以得到镜像挂载目录;
S1314、运行所述镜像挂载目录下的命令,以部署所述基础镜像包。
在本实施例中,将基础镜像包上传到安装服务器;运行docker load -i $repo_$tag.tar命令加载基础镜像,成功后docker images可以看到该镜像;创建目录/app/docker-diff-upgrade-packages/,作为镜像存储卷的挂载路径;运行命令: docker run -v /app/docker-diff-upgrade-packages:/docker-diff-upgrade-packages -itd $repo:$tag,至此部署完成。
S132、将所述增量升级包通过存储介质或局域网网络上传到设定目录中;
S133、判断在设定目录下是否存在增量升级包;
S134、若在设定目录下不存在增量升级包,则创建软连接;
S135、查找基础镜像包正在运行的容器,得到容器ID;
S136、根据所述容器ID重启容器,容器启动过程中会先运行升级脚本再运行应用程序;
S137、若在设定目录下存在增量升级包,则删除所述设定目录下的增量升级包,并执行所述创建软连接。
在本实施例中,将增量升级包通过存储介质或局域网网络上传到升级服务器的/app/docker-diff-upgrade-packages/目录中。/app/docker-diff-upgrade-packages/目录下,先查看是否存在docker-diff.zip, 如不存在则执行”ln -s $增量包文件 docker-diff.zip”创建软连接;存在则先删除再创建(有历史升级包)。运行docker ps命令查找需要基础镜像正在运行的容器,得到container_id。运行docker restart $container_id重启容器,容器启动过程中会先运行升级脚本再运行应用程序,从而实现程序的轻量快速升级。如需要回退,删除/app/docker-diff-upgrade-packages/docker-diff.zip软连接或重新指向升级前的文件(有历史升级包),最后重启容器完成回退。
上述的软件离线快速升级方法,通过先构建支持离线增量升级的基础镜像包,并基于基础镜像包制作增量升级包,且应用该增量升级包,以对软件进行离线升级,实现通过Docker部署发布的软件在离线环境能够轻量、快速完成升级。
图9是本发明实施例提供的一种软件离线快速升级装置300的示意性框图。如图9所示,对应于以上软件离线快速升级方法,本发明还提供一种软件离线快速升级装置300。该软件离线快速升级装置300包括用于执行上述软件离线快速升级方法的单元,该装置可以被配置于服务器中。具体地,请参阅图9,该软件离线快速升级装置300包括基础镜像包构建单元301、升级包制作单元302以及应用单元303。
基础镜像包构建单元301,用于构建支持离线增量升级的基础镜像包;升级包制作单元302,用于基于所述基础镜像包制作增量升级包;应用单元303,用于基于所述基础镜像包应用所述增量升级包,以对软件进行离线升级。
在一实施例中,如图10所示,所述基础镜像包构建单元301包括第一编写子单元3011、第二编写子单元3012、第一创建子单元3013以及导出子单元3014。
第一编写子单元3011,用于编写升级脚本;第二编写子单元3012,用于编写Dockerfile;第一创建子单元3013,用于在Dockerfile目录下,创建镜像包;导出子单元3014,用于从所述Dockerfile内导出镜像包,以得到基础镜像包。
在一实施例中,如图11所示,所述第一编写子单元3011包括检查模块30111、解压模块30112、第一拷贝模块30113、读取模块30114以及删除模块30115。
检查模块30111,用于检查升级包存放目录是否存在增量升级包;解压模块30112,用于当升级包存放目录存在增量升级包,则解压增量升级包到临时目录;第一拷贝模块30113,用于将所述临时目录下除diff.json外所有目录和文件拷贝到根目录。读取模块30114,用于读取diff.json找到Dels项的目录和文件,并删除Dels项的目录和文件。删除模块30115,用于删除临时目录,以得到升级脚本。
在一实施例中,如图12所示,所述第二编写子单元3012包括增加模块30121、第二拷贝模块30122、安装模块30123以及修改模块30124。
增加模块30121,用于增加挂载存储卷;第二拷贝模块30122,用于拷贝所述升级脚本到指定目录;安装模块30123,用于安装应用程序和依赖;修改模块30124,用于修改CMD命令在运行应用程序前先运行升级脚本。
在一实施例中,如图13所示,所述升级包制作单元302包括加载子单元3021、升级子单元3022、指定子单元3023、查看子单元3024、下载子单元3025、定向子单元3026、脚本子单元3027以及文件生成子单元3028。
加载子单元3021,用于加载所述基础镜像包,并启动所述基础镜像包的容器;升级子单元3022,用于进入所述基础镜像包的容器内,将应用程序和依赖升级到目标版本后,退出容器;指定子单元3023,用于指定所述基础镜像包的容器的repo和tag,得到目标容器镜像;查看子单元3024,用于通过docker images命令查看所述基础镜像包以及目标容器镜像的信息,下载子单元3025,用于下载安装container-diff工具;定向子单元3026,用于执行container-diff命令得到基础镜像和目标镜像的差异文件列表,并重定向到一个文件中;脚本子单元3027,用于编写制作增量升级包的脚本,脚本入参为所述文件路径;文件生成子单元3028,用于运行所述脚本,并传入所述文件的路径作为参数,脚本运行结束后,在当前目录会生成zip文件,以得到增量升级包。
在一实施例中,如图14所示,所述应用单元303包括部署子单元3031、上传子单元3032、判断子单元3033、软连接创建子单元3034、查找子单元3035、重启子单元3036以及删除子单元3037。
部署子单元3031,用于部署所述基础镜像包;上传子单元3032,用于将所述增量升级包通过存储介质或局域网网络上传到设定目录中;判断子单元3033,用于判断在设定目录下是否存在增量升级包;软连接创建子单元3034,用于若在设定目录下不存在增量升级包,则创建软连接;查找子单元3035,用于查找基础镜像包正在运行的容器,得到容器ID;重启子单元3036,用于根据所述容器ID重启容器,容器启动过程中会先运行升级脚本再运行应用程序;删除子单元3037,用于若在设定目录下存在增量升级包,则删除所述设定目录下的增量升级包,并执行所述创建软连接。
在一实施例中,如图15所示,所述部署子单元3031包括镜像包上传模块30311、加载模块30312、挂载目录模块30313以及命令运行模块30314。
镜像包上传模块30311,用于将所述基础镜像包上传到安装服务器。加载模块30312,用于加载所述基础镜像包;挂载目录模块30313,用于创建作为镜像存储卷的挂载路径的目录,以得到镜像挂载目录;命令运行模块30314,用于运行所述镜像挂载目录下的命令,以部署所述基础镜像包。
需要说明的是,所属领域的技术人员可以清楚地了解到,上述软件离线快速升级装置300和各单元的具体实现过程,可以参考前述方法实施例中的相应描述,为了描述的方便和简洁,在此不再赘述。
上述软件离线快速升级装置300可以实现为一种计算机程序的形式,该计算机程序可以在如图16所示的计算机设备上运行。
请参阅图16,图16是本申请实施例提供的一种计算机设备的示意性框图。该计算机设备500可以是服务器,其中,服务器可以是独立的服务器,也可以是多个服务器组成的服务器集群。
参阅图16,该计算机设备500包括通过系统总线501连接的处理器502、存储器和网络接口505,其中,存储器可以包括非易失性存储介质503和内存储器504。
该非易失性存储介质503可存储操作系统5031和计算机程序5032。该计算机程序5032包括程序指令,该程序指令被执行时,可使得处理器502执行一种软件离线快速升级方法。
该处理器502用于提供计算和控制能力,以支撑整个计算机设备500的运行。
该内存储器504为非易失性存储介质503中的计算机程序5032的运行提供环境,该计算机程序5032被处理器502执行时,可使得处理器502执行一种软件离线快速升级方法。
该网络接口505用于与其它设备进行网络通信。本领域技术人员可以理解,图16中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备500的限定,具体的计算机设备500可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
其中,所述处理器502用于运行存储在存储器中的计算机程序5032,以实现如下步骤:
构建支持离线增量升级的基础镜像包;基于所述基础镜像包制作增量升级包;基于所述基础镜像包应用所述增量升级包,以对软件进行离线升级。
在一实施例中,处理器502在实现所述构建支持离线增量升级的基础镜像包步骤时,具体实现如下步骤:
编写升级脚本;编写Dockerfile;在Dockerfile目录下,创建镜像包;从所述Dockerfile内导出镜像包,以得到基础镜像包。
在一实施例中,处理器502在实现所述编写升级脚本步骤时,具体实现如下步骤:
检查升级包存放目录是否存在增量升级包;当升级包存放目录存在增量升级包,则解压增量升级包到临时目录;将所述临时目录下除diff.json外所有目录和文件拷贝到根目录;读取diff.json找到Dels项的目录和文件,并删除Dels项的目录和文件;删除临时目录,以得到升级脚本。
在一实施例中,处理器502在实现所述编写Dockerfile步骤时,具体实现如下步骤:
增加挂载存储卷;拷贝所述升级脚本到指定目录;安装应用程序和依赖;修改CMD命令在运行应用程序前先运行升级脚本。
在一实施例中,处理器502在实现所述基于所述基础镜像包制作增量升级包步骤时,具体实现如下步骤:
加载所述基础镜像包,并启动所述基础镜像包的容器;进入所述基础镜像包的容器内,将应用程序和依赖升级到目标版本后,退出容器;指定所述基础镜像包的容器的repo和tag,得到目标容器镜像;通过docker images命令查看所述基础镜像包以及目标容器镜像的信息,下载安装container-diff工具;执行 container-diff命令得到基础镜像和目标镜像的差异文件列表,并重定向到一个文件中;编写制作增量升级包的脚本,脚本入参为所述文件路径;运行所述脚本,并传入所述文件的路径作为参数,脚本运行结束后,在当前目录会生成zip文件,以得到增量升级包。
在一实施例中,处理器502在实现所述基于所述基础镜像包应用所述增量升级包,以对软件进行离线升级步骤时,具体实现如下步骤:
部署所述基础镜像包;将所述增量升级包通过存储介质或局域网网络上传到设定目录中;判断在设定目录下是否存在增量升级包;若在设定目录下不存在增量升级包,则创建软连接;查找基础镜像包正在运行的容器,得到容器ID;根据所述容器ID重启容器,容器启动过程中会先运行升级脚本再运行应用程序;若在设定目录下存在增量升级包,则删除所述设定目录下的增量升级包,并执行所述创建软连接。
在一实施例中,处理器502在实现所述部署所述基础镜像包步骤时,具体实现如下步骤:
将所述基础镜像包上传到安装服务器;加载所述基础镜像包;创建作为镜像存储卷的挂载路径的目录,以得到镜像挂载目录;运行所述镜像挂载目录下的命令,以部署所述基础镜像包。
应当理解,在本申请实施例中,处理器502可以是中央处理单元 (CentralProcessing Unit,CPU),该处理器502还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路 (Application Specific IntegratedCircuit,ASIC)、现成可编程门阵列 (Field-Programmable Gate Array,FPGA) 或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。其中,通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
本领域普通技术人员可以理解的是实现上述实施例的方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成。该计算机程序包括程序指令,计算机程序可存储于一存储介质中,该存储介质为计算机可读存储介质。该程序指令被该计算机系统中的至少一个处理器执行,以实现上述方法的实施例的流程步骤。
因此,本发明还提供一种存储介质。该存储介质可以为计算机可读存储介质。该存储介质存储有计算机程序,其中该计算机程序被处理器执行时使处理器执行如下步骤:
构建支持离线增量升级的基础镜像包;基于所述基础镜像包制作增量升级包;基于所述基础镜像包应用所述增量升级包,以对软件进行离线升级。
在一实施例中,所述处理器在执行所述计算机程序而实现所述构建支持离线增量升级的基础镜像包步骤时,具体实现如下步骤:
编写升级脚本;编写Dockerfile;在Dockerfile目录下,创建镜像包;从所述Dockerfile内导出镜像包,以得到基础镜像包。
在一实施例中,所述处理器在执行所述计算机程序而实现所述编写升级脚本步骤时,具体实现如下步骤:
检查升级包存放目录是否存在增量升级包;当升级包存放目录存在增量升级包,则解压增量升级包到临时目录;将所述临时目录下除diff.json外所有目录和文件拷贝到根目录;读取diff.json找到Dels项的目录和文件,并删除Dels项的目录和文件;删除临时目录,以得到升级脚本。
在一实施例中,所述处理器在执行所述计算机程序而实现所述编写Dockerfile步骤时,具体实现如下步骤:
增加挂载存储卷;拷贝所述升级脚本到指定目录;安装应用程序和依赖;修改CMD命令在运行应用程序前先运行升级脚本。
在一实施例中,所述处理器在执行所述计算机程序而实现所述基于所述基础镜像包制作增量升级包步骤时,具体实现如下步骤:
加载所述基础镜像包,并启动所述基础镜像包的容器;进入所述基础镜像包的容器内,将应用程序和依赖升级到目标版本后,退出容器;指定所述基础镜像包的容器的repo和tag,得到目标容器镜像;通过docker images命令查看所述基础镜像包以及目标容器镜像的信息,下载安装container-diff工具;执行 container-diff命令得到基础镜像和目标镜像的差异文件列表,并重定向到一个文件中;编写制作增量升级包的脚本,脚本入参为所述文件路径;运行所述脚本,并传入所述文件的路径作为参数,脚本运行结束后,在当前目录会生成zip文件,以得到增量升级包。
在一实施例中,所述处理器在执行所述计算机程序而实现所述基于所述基础镜像包应用所述增量升级包,以对软件进行离线升级步骤时,具体实现如下步骤:
部署所述基础镜像包;将所述增量升级包通过存储介质或局域网网络上传到设定目录中;判断在设定目录下是否存在增量升级包;若在设定目录下不存在增量升级包,则创建软连接;查找基础镜像包正在运行的容器,得到容器ID;根据所述容器ID重启容器,容器启动过程中会先运行升级脚本再运行应用程序;若在设定目录下存在增量升级包,则删除所述设定目录下的增量升级包,并执行所述创建软连接。
在一实施例中,所述处理器在执行所述计算机程序而实现所述部署所述基础镜像包步骤时,具体实现如下步骤:
将所述基础镜像包上传到安装服务器;加载所述基础镜像包;创建作为镜像存储卷的挂载路径的目录,以得到镜像挂载目录;运行所述镜像挂载目录下的命令,以部署所述基础镜像包。
所述存储介质可以是U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、磁碟或者光盘等各种可以存储程序代码的计算机可读存储介质。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的。例如,各个单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。
本发明实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。本发明实施例装置中的单元可以根据实际需要进行合并、划分和删减。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。
该集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,终端,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

Claims (9)

1.软件离线快速升级方法,其特征在于,包括:
构建支持离线增量升级的基础镜像包;
基于所述基础镜像包制作增量升级包;
基于所述基础镜像包应用所述增量升级包,以对软件进行离线升级;
所述基于所述基础镜像包制作增量升级包,包括:
加载所述基础镜像包,并启动所述基础镜像包的容器;
进入所述基础镜像包的容器内,将应用程序和依赖升级到目标版本后,退出容器;
指定所述基础镜像包的容器的repo和tag,得到目标容器镜像;
通过docker images命令查看所述基础镜像包以及目标容器镜像的信息,
下载安装container-diff工具;
执行 container-diff命令得到基础镜像和目标镜像的差异文件列表,并重定向到一个文件中;
编写制作增量升级包的脚本,脚本入参为所述文件路径;
运行所述脚本,并传入所述文件的路径作为参数,脚本运行结束后,在当前目录会生成zip文件,以得到增量升级包。
2.根据权利要求1所述的软件离线快速升级方法,其特征在于,所述构建支持离线增量升级的基础镜像包,包括:
编写升级脚本;
编写Dockerfile;
在Dockerfile目录下,创建镜像包;
从所述Dockerfile内导出镜像包,以得到基础镜像包。
3.根据权利要求2所述的软件离线快速升级方法,其特征在于,所述编写升级脚本,包括:
检查升级包存放目录是否存在增量升级包;
当升级包存放目录存在增量升级包,则解压增量升级包到临时目录;
将所述临时目录下除diff.json外所有目录和文件拷贝到根目录;
读取diff.json找到Dels项的目录和文件,并删除Dels项的目录和文件;
删除临时目录,以得到升级脚本。
4.根据权利要求2所述的软件离线快速升级方法,其特征在于,所述编写Dockerfile,包括:
增加挂载存储卷;
拷贝所述升级脚本到指定目录;
安装应用程序和依赖;
修改CMD命令在运行应用程序前先运行升级脚本。
5.根据权利要求1所述的软件离线快速升级方法,其特征在于,所述基于所述基础镜像包应用所述增量升级包,以对软件进行离线升级,包括:
部署所述基础镜像包;
将所述增量升级包通过存储介质或局域网网络上传到设定目录中;
判断在设定目录下是否存在增量升级包;
若在设定目录下不存在增量升级包,则创建软连接;
查找基础镜像包正在运行的容器,得到容器ID;
根据所述容器ID重启容器,容器启动过程中会先运行升级脚本再运行应用程序;
若在设定目录下存在增量升级包,则删除所述设定目录下的增量升级包,并执行所述创建软连接。
6.根据权利要求5所述的软件离线快速升级方法,其特征在于,所述部署所述基础镜像包,包括:
将所述基础镜像包上传到安装服务器;
加载所述基础镜像包;
创建作为镜像存储卷的挂载路径的目录,以得到镜像挂载目录;
运行所述镜像挂载目录下的命令,以部署所述基础镜像包。
7.软件离线快速升级装置,其特征在于,包括:
基础镜像包构建单元,用于构建支持离线增量升级的基础镜像包;
升级包制作单元,用于基于所述基础镜像包制作增量升级包;
应用单元,用于基于所述基础镜像包应用所述增量升级包,以对软件进行离线升级;
所述升级包制作单元包括加载子单元、升级子单元、指定子单元、查看子单元、下载子单元、定向子单元、脚本子单元以及文件生成子单元;
加载子单元,用于加载所述基础镜像包,并启动所述基础镜像包的容器;升级子单元,用于进入所述基础镜像包的容器内,将应用程序和依赖升级到目标版本后,退出容器;指定子单元,用于指定所述基础镜像包的容器的repo和tag,得到目标容器镜像;查看子单元,用于通过docker images命令查看所述基础镜像包以及目标容器镜像的信息,下载子单元,用于下载安装container-diff工具;定向子单元,用于执行 container-diff命令得到基础镜像和目标镜像的差异文件列表,并重定向到一个文件中;脚本子单元,用于编写制作增量升级包的脚本,脚本入参为所述文件路径;文件生成子单元,用于运行所述脚本,并传入所述文件的路径作为参数,脚本运行结束后,在当前目录会生成zip文件,以得到增量升级包。
8.一种计算机设备,其特征在于,所述计算机设备包括存储器及处理器,所述存储器上存储有计算机程序,所述处理器执行所述计算机程序时实现如权利要求1至6中任一项所述的方法。
9.一种存储介质,其特征在于,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至6中任一项所述的方法。
CN202310781445.7A 2023-06-29 软件离线快速升级方法、装置、计算机设备及存储介质 Active CN116501363B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310781445.7A CN116501363B (zh) 2023-06-29 软件离线快速升级方法、装置、计算机设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310781445.7A CN116501363B (zh) 2023-06-29 软件离线快速升级方法、装置、计算机设备及存储介质

Publications (2)

Publication Number Publication Date
CN116501363A true CN116501363A (zh) 2023-07-28
CN116501363B CN116501363B (zh) 2024-09-27

Family

ID=

Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015074467A1 (zh) * 2013-11-25 2015-05-28 腾讯科技(深圳)有限公司 一种数据更新方法、装置、系统及存储介质
CN105468396A (zh) * 2014-09-11 2016-04-06 深圳Tcl数字技术有限公司 差分包生成方法、升级方法、生成装置及Linux终端
CN106250148A (zh) * 2016-08-01 2016-12-21 浪潮软件集团有限公司 一种基于ant的项目差量升级方法
WO2018039875A1 (zh) * 2016-08-29 2018-03-08 北京小米移动软件有限公司 应用升级包获取方法及装置
CN110704156A (zh) * 2019-08-16 2020-01-17 北京奇艺世纪科技有限公司 一种Docker镜像构建方法及装置
CN111158737A (zh) * 2019-12-30 2020-05-15 深圳云天励飞技术有限公司 一种增量升级方法和相关设备
CN111552495A (zh) * 2020-04-24 2020-08-18 格尔软件股份有限公司 一种对Docker容器镜像实现离线增量更新的方法
CN112882729A (zh) * 2019-11-29 2021-06-01 顺丰科技有限公司 应用镜像升级方法、装置、计算机设备和存储介质
CN114625473A (zh) * 2020-12-08 2022-06-14 深信服科技股份有限公司 一种升级方法、装置和电子设备及介质
CN114879984A (zh) * 2022-07-07 2022-08-09 杭州阿启视科技有限公司 动态构建docker镜像减少离线文件体积的方法
US20230169172A1 (en) * 2021-11-29 2023-06-01 Infinera Corp. Resilient software update architecture for embedded systems

Patent Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015074467A1 (zh) * 2013-11-25 2015-05-28 腾讯科技(深圳)有限公司 一种数据更新方法、装置、系统及存储介质
CN105468396A (zh) * 2014-09-11 2016-04-06 深圳Tcl数字技术有限公司 差分包生成方法、升级方法、生成装置及Linux终端
CN106250148A (zh) * 2016-08-01 2016-12-21 浪潮软件集团有限公司 一种基于ant的项目差量升级方法
WO2018039875A1 (zh) * 2016-08-29 2018-03-08 北京小米移动软件有限公司 应用升级包获取方法及装置
CN110704156A (zh) * 2019-08-16 2020-01-17 北京奇艺世纪科技有限公司 一种Docker镜像构建方法及装置
CN112882729A (zh) * 2019-11-29 2021-06-01 顺丰科技有限公司 应用镜像升级方法、装置、计算机设备和存储介质
CN111158737A (zh) * 2019-12-30 2020-05-15 深圳云天励飞技术有限公司 一种增量升级方法和相关设备
CN111552495A (zh) * 2020-04-24 2020-08-18 格尔软件股份有限公司 一种对Docker容器镜像实现离线增量更新的方法
CN114625473A (zh) * 2020-12-08 2022-06-14 深信服科技股份有限公司 一种升级方法、装置和电子设备及介质
US20230169172A1 (en) * 2021-11-29 2023-06-01 Infinera Corp. Resilient software update architecture for embedded systems
CN114879984A (zh) * 2022-07-07 2022-08-09 杭州阿启视科技有限公司 动态构建docker镜像减少离线文件体积的方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
YUJING WANG ETAL.: "Developing a Process in Architecting Microservice Infrastructure with Docker, Kubernetes, and Istio", ARXIV, 6 November 2019 (2019-11-06), pages 1 - 12 *
佚名: "Container-Diff:容器的变更管理", Retrieved from the Internet <URL:https://devpress.csdn.net/cloudnative/62f45bb67e668234661884b8.html> *

Similar Documents

Publication Publication Date Title
CN101719073B (zh) 一种基于智能客户端的按需下载实现方法
US10592229B1 (en) Method and system for restoring software
US10114630B2 (en) Management of software and operating system updates required for the process of creating a virtual machine facsimile of an existing physical or virtual machine
US9823915B1 (en) Software container format
CN110221860B (zh) 一种配置文件处理方法、装置、终端及介质
EP3488337B1 (en) Shared software libraries for computing devices
US8863114B2 (en) Managing software packages using a version control system
WO2017071494A1 (zh) 一种应用部署方法和装置
US7313792B2 (en) Method and system for servicing software
JP5535484B2 (ja) 自動ソフトウェアテストフレームワーク
JP5705869B2 (ja) クラスタベースのjavaアプリケーションシステムのコードをロードおよび更新する装置および方法
US7840961B1 (en) Method and system for installing software on multiple computing systems
US20140173578A1 (en) Method and apparatus for installing and updating software
US20120131566A1 (en) Efficient virtual application update
US7320087B2 (en) Information processing apparatus and method, program, and recording medium
US9542173B2 (en) Dependency handling for software extensions
CN112882746B (zh) 应用程序的更新方法、装置、存储介质及计算机设备
US20140101425A1 (en) Managing operating system components
US11132259B2 (en) Patch reconciliation of storage nodes within a storage cluster
CN115543429A (zh) 项目环境的搭建方法、电子设备及计算机可读存储介质
CN102541593A (zh) 一种远程文件的版本快速比对方法
CN116954673B (zh) 一种Linux操作系统的升级及还原方法
US10558450B2 (en) Mechanism for customizing multiple computing devices
CN116501363A (zh) 软件离线快速升级方法、装置、计算机设备及存储介质
US8190587B1 (en) In-place image promotion

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination