掌桥专利:专业的专利平台
掌桥专利
首页

应用程序部署方法及装置

文献发布时间:2023-06-19 19:28:50


应用程序部署方法及装置

技术领域

本申请涉及互联网技术领域,更具体地说,涉及一种应用程序部署方法及装置。

背景技术

随着网络技术和应用的不断发展,以Docker为代表的容器技术借助物理服务器上操作系统内核提供的隔离功能实现了进程间的轻量级隔离,从而给运行于容器内的应用程序提供独立文件系统、CPU、内存、进程空间等资源,并已在应用程序部署中得到了广泛应用。

然而,现实中有大量的应用程序因为其对计算、存储或网络等资源有特殊的需求,在生产场景下不适合使用容器化技术进行部署,只能部署在一台物理服务器或虚拟机上,例如,应用程序本身需要超大资源(CPU或者内存接近宿主机本身资源大小),而现有的容器技术会对资源精细化管理,对容器内的应用程序分配一定的CPU及内存,由于生产场景下应用程序需要处理真实的业务数据,对性能要求较高,所以这类应用程序只能部署在一台物理服务器或虚拟机上。但是,在开发测试场景下,更多的关注应用程序本身的功能逻辑是否正确,不关注应用程序的性能,所以可以使用容器化技术部署。

现有的容器化技术会将应用程序所需的依赖项进行精减之后与应用程序本身一起打包生成镜像,基于此镜像创建并启动容器,若在开发测试场景下使用这种纯容器化部署的方式对应用程序部署,在生产场景下直接将应用程序部署在一台物理服务器或虚拟机上,会使得开发测试场景下应用程序运行时的环境与实际的生产场景下运行的环境不一致,从而导致工作人员在开发或测试应用程序时的效果与实际应用时有所偏差。

发明内容

有鉴于此,本申请提供了一种应用程序部署方法及装置,用于解决现有应用部署方式,使得开发测试场景下应用程序运行时的环境与实际的生产场景下运行的环境不一致,从而导致工作人员在开发或测试应用程序时的效果与实际应用时有所偏差的问题。

为了实现上述目的,现提出的方案如下:

一种应用程序部署方法,包括:

建立与需要部署目标应用程序的目标宿主机之间的连接;

拉取基础镜像至所述目标宿主机,所述基础镜像为预先根据所述目标应用程序所需的所有外部依赖项生成的镜像;

在所述目标宿主机上基于拉取的所述基础镜像创建并启动应用程序容器;

下载并解压目标应用程序包至所述应用程序容器中;

控制执行所述应用程序容器中的所述目标应用程序。

一种应用程序部署装置,包括:

建立连接单元,用于建立与需要部署目标应用程序的目标宿主机之间的连接;

基础镜像拉取单元,用于拉取基础镜像至所述目标宿主机,所述基础镜像为预先根据所述目标应用程序所需的所有外部依赖项生成的镜像;

容器创建启动单元,用于在所述目标宿主机上基于拉取的所述基础镜像创建并启动应用程序容器;

应用程序安装单元,用于下载并解压目标应用程序包至所述应用程序容器中;

应用程序执行单元,用于控制执行所述应用程序容器中的所述目标应用程序。

从上述的技术方案可以看出,本申请实施例提供的应用程序部署方法,会预先根据目标应用程序所需的所有依赖项生成基础镜像,基于基础镜像创建并启动应用程序容器,相当于预先构建了与生产场景中一致的运行环境,再使目标应用程序在应用程序容器中运行,使得目标应用程序在应用程序容器中运行的环境和目标应用程序在实际生产场景下的运行的环境一致,从而使工作人员开发或测试目标应用程序时的效果与实际应用时的效果一致。

进一步的,本申请实施例提供的应用程序部署方法同样适用于对计算、存储或网络等资源无特殊的需求的各类应用程序在任何场景下的部署,并且整个部署过程中的操作均由机器完成,所以工作人员无需学习大量的容器相关命令,节约了时间成本,减少了部署应用程序的整体耗时,提高了部署效率。

附图说明

结合附图并参考以下具体实施方式,本公开各实施例的上述和其他特征、优点及方面将变得更加明显。贯穿附图中,相同或相似的附图标记表示相同或相似的元素。应当理解附图是示意性的,原件和元素不一定按照比例绘制。

图1为本申请实施例公开的一种应用程序部署方法流程图;

图2为本申请实施例公开的一种应用程序部署装置结构示意图;

图3为本申请实施例公开的一种应用程序部署设备的硬件结构框图。

具体实施方式

下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。

本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。

需要注意,本公开中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。

需要注意,本公开中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。

本申请提供了对应用程序进行部署的方法,可以适用于对计算、存储或网络等资源有特殊的需求的应用程序在开发测试场景下的部署,同时适用于对计算、存储或网络等资源无特殊的需求的各类应用程序在任何场景下的部署。

本申请方案可以基于具备数据处理能力的终端实现,该终端可以是电脑、服务器、云端等。

本申请实施例提供了一种应用程序部署方案,接下来通过附图1对本申请的应用程序部署方法进行说明,如图1所示,该方法可以包括:

步骤S100、建立与需要部署目标应用程序的目标宿主机之间的连接。

具体的,目标应用程序即为待部署的应用程序,目标宿主机即为需要部署该目标应用程序的宿主机,若要实现将目标应用程序部署到目标宿主机上,首先需要建立与目标宿主机之间的连接。

其中,目标宿主机可以为手机、电脑、服务器等物理终端设备,还可以为虚拟机,不同的应用程序在相互间无资源需求冲突的前提下可以部署在相同的宿主机上,若存在资源需求冲突,则不可以部署在相同的宿主机上,示例如若两个应用程序必须占用相同的宿主机端口,那么这两个应用程序属于存在资源需求冲突,目标应用程序的类型可以有多种,例如后台类应用程序、网站类应用程序等。

步骤S110、拉取基础镜像至所述目标宿主机。

其中,所述基础镜像为预先根据所述目标应用程序所需的所有外部依赖项生成的镜像,对于应用程序而言,其需要的所有外部依赖项包括但不限于:由操作系统提供的通用命令程序、基础动态链接库、配置文件,由应用程序启动或运行时需要加载的其他程序、动态链接库、这些程序和库依赖的配置文件等。

具体的,由于基础镜像是生成应用程序容器的基础,所以需要将目标应用程序对应的基础镜像拉取至目标宿主机,以便在目标宿主机上基于此基础镜像创建并启动应用程序容器。

步骤S120、在所述目标宿主机上基于拉取的所述基础镜像创建并启动应用程序容器。

具体的,将目标应用程序对应的基础镜像拉取至目标宿主机之后,即可基于此基础镜像创建并启动一个应用程序容器,该应用程序容器相当于预先构建的运行目标应用程序所需的环境,能够保证目标应用程序在应用程序容器中运行的环境和目标应用程序在实际生产场景下运行的环境一致,并且由于应用程序容器会给运行于容器内的目标应用程序提供独立的资源,所以多个目标应用程序可以互相隔离无感知的前提下共享同一台目标宿主机的资源,可以大大提高目标宿主机的资源利用率。

步骤S130、下载并解压目标应用程序包至所述应用程序容器中。

具体的,将目标应用程序包下载并解压至应用程序容器中是为了实现目标应用程序在应用程序容器内的安装。

其中,目标应用程序包为打包好的目标应用程序文件,包括由目标应用程序源代码生成的二进制文件及内容固定的配置文件。

步骤S140、控制执行所述应用程序容器中的所述目标应用程序。

具体的,控制目标宿主机执行应用程序容器中的目标应用程序,使得目标应用程序运行于应用程序容器中,一般来说,若目标应用程序执行时不退出,则视为部署成功。

本申请实施例提供的应用程序部署方法,会预先根据目标应用程序所需的所有依赖项生成基础镜像,基于基础镜像创建并启动应用程序容器,相当于预先构建了与生产场景中一致的运行环境,再使目标应用程序在应用程序容器中运行,使得目标应用程序在应用程序容器中运行的环境和目标应用程序在实际生产场景下的运行的环境一致,从而使工作人员开发或测试目标应用程序时的效果与实际应用时的效果一致。

进一步的,本申请实施例提供的应用程序部署方法同样适用于对计算、存储或网络等资源无特殊的需求的各类应用程序在任何场景下的部署,并且整个部署过程中的操作均由机器完成,所以工作人员无需学习大量的容器相关命令,节约了时间成本,减少了部署应用程序的整体耗时,提高了部署效率。

上述图1中的流程图,图示了按照本公开实施例的方法可能实现的功能和操作。在这点上,流程图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于图1中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,流程图中的每个方框、以及流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

本申请的一些实施例中,可以通过诸如SSH协议(Secure Shell,安全外壳协议)之类的任何当前或未来研发的网络协议建立与需要部署目标应用程序的目标宿主机之间的连接,并且可以与任意形式或介质的数字数据通信(例如,通信网络)互连。通信网络的示例包括局域网(“LAN”),广域网(“WAN”),网际网(例如,互联网)以及端对端网络(例如,ad hoc端对端网络),以及任何当前已知或未来研发的网络。

具体的,若通过SSH协议建立与需要部署目标应用程序的目标宿主机之间的连接,需要预先配置好连接目标宿主机时需要使用的用户名、密码信息,或者预先在目标宿主机上配置好访问该目标宿主机的SSH免密登录认证。

本申请实施例由于会通过诸如SSH协议之类的网络协议建立与需要部署目标应用程序的目标宿主机之间的连接,可以有效地避免与目标宿主机进行数据交互时受到网络攻击,示例如中间人攻击,并且可以加快数据传输速度。

本申请实施例发现由于在目标宿主机上部署目标应用程序需要用到目标应用程序对应的基础镜像,所以在上述步骤S100建立与需要部署目标应用程序的目标宿主机之间的连接之前,可以首先获取目标应用程序所需的所有外部依赖项,根据所述外部依赖项生成所述基础镜像。

其中,获取的目标应用程序所需的所有外部依赖项可以由工作人员在本申请实施例提供的界面上手动输入,也可以通过扫描目标应用程序获取其所需的依赖项,还可以将目标应用程序需要的依赖项制作成配置文件,直接获取配置文件。

本申请实施例发现由于在部署目标应用程序之前会首先根据该目标应用程序所需的所有外部依赖项生成基础镜像,那么再次部署目标应用程序时,由于当前时刻之前已经生成过其对应的基础镜像,若该目标应用程序所需的外部依赖项未发生变化,那么可以直接使用当前时刻之前最近一次制作的基础镜像,基于此,在上述步骤S100建立与需要部署目标应用程序的目标宿主机之间的连接之前,还可以包括:

当确定所述目标应用程序为首次部署时或确定所述目标应用程序并非首次部署但所述目标应用程序所需的外部依赖项发生变化时,获取所述目标应用程序所需的所有外部依赖项,根据所述外部依赖项生成基础镜像。

具体的,当确定目标应用程序为首次部署时,由于当前时刻之前未生成过其对应的基础镜像,所以需要获取目标应用程序所需的所有外部依赖项,并根据这些外部依赖项生成目标应用程序对应的基础镜像,当确定所述目标应用程序并非首次部署但所述目标应用程序所需的外部依赖项发生变化时,说明当前时刻之前最近一次根据目标应用程序所需的外部依赖项生成的基础镜像并不可用,所以在这种情况下,同样需要获取目标应用程序所需的所有外部依赖项,并根据该外部依赖项生成目标应用程序对应的基础镜像。

将所述基础镜像存储至预设的镜像仓库或将所述镜像仓库中所述目标应用程序对应的已存储基础镜像替换为所述基础镜像。

具体的,在确定目标应用程序为首次部署的情况下生成基础镜像之后,可以将该基础镜像直接存放至预设的镜像仓库,以便再次部署该目标应用程序并且该目标应用程序所需的外部依赖项未发生变化时,无需重新生成,只需从该镜像仓库种获取即可,而在确定目标应用程序并非首次部署且目标应用程序所需的外部依赖项发生变化的情况下,会重新生成基础镜像,所以此时可以将镜像仓库中目标应用程序对应的已存储基础镜像替换为重新生成的基础镜像,以便次部署该目标应用程序并且该目标应用程序所需的外部依赖项未发生变化时,无需重新生成,只需从该镜像仓库中获取即可。

基于此,上述步骤S110所述拉取基础镜像至所述目标宿主机的过程,可以包括:

从所述镜像仓库中拉取所述基础镜像至所述目标宿主机。

具体的,如前述可知,此时镜像仓库中存储着目标应用程序对应的唯一可用的基础镜像,所以可以从镜像仓库中拉取该基础镜像至目标宿主机。

当确定所述目标应用程序并非首次部署且所述目标应用程序所需的外部依赖项未发生变化时,由于已经生成过目标应用程序对应的基础镜像,并且目标应用程序所需的外部依赖项并未发生变化,所以无需再次生成基础镜像,可以直接执行上述步骤S100建立与需要部署目标应用程序的目标宿主机之间的连接。

基于此,上述步骤S110所述拉取基础镜像至所述目标宿主机的过程,可以包括:

从所述镜像仓库中拉取所述目标应用程序对应的所述已存储基础镜像至所述目标宿主机。

具体的,如前述可知,此时镜像仓库中存储的已存储基础镜像就是当前时刻之前最近一次根据目标应用程序所需的所有外部依赖项生成的基础镜像,并且由于目标应用程序所需的外部依赖项未发生变化,所以该已存储基础镜像可用,可以直接从镜像仓库拉取目标应用程序对应的已存储基础镜像至目标宿主机。

本申请实施例只需要在首次部署目标应用程序时或者目标应用程序并非首次部署但所需的外部依赖项发生变化时需要生成基础镜像,并且会将生成的基础镜像存储至预设的镜像仓库,当再次部署目标应用程序时,若其所需的外部依赖项未发生变化,那么可直接从镜像仓库中获取其对应的基础镜像,节省了部署目标应用程序的时间,提高了部署效率。

本申请实施例提供了两种可选的实现上述获取所述目标应用程序所需的所有外部依赖项,根据所述外部依赖项生成基础镜像的方式,分别为:

第一种:

预先设置若干基本操作系统镜像作为制作基础镜像的底盘,只需要获取各个外部依赖项tar格式程序包的存储位置和该程序包在镜像当中的放置路径,获取要在基础镜像当中预置的环境变量信息(包括TZ、PATH、LANG等基础的操作系统级环境变量,也可以包括根据相应的需求添加的其他环境变量),获取基础镜像的名称,即可驱动预设的基础镜像生成模块生成相应的镜像制作配置文件,然后基础镜像生成模块再调用预设的镜像构建工具根据生成的镜像制作配置文件构建出相应的基础镜像。

第二种:

可以由工作人员在本申请实施例提供的操作界面上自行编辑镜像制作配置文件,工作人员可以自由地决定要使用的基本操作系统镜像(该镜像可以在由预设的基础镜像生成模块预置的基本操作系统镜像列表当中,也可以是基础镜像生成模块所在网络中可以访问到的镜像仓库当中的任意一个镜像)、要添加的外部依赖项和放置路径(此时不再限制外部依赖项程序包的格式)、环境变量信息等,此外工作人员还可以使用镜像制作配置文件支持的其他各类指令来进一步地自定义基础镜像。工作人员完成镜像制作配置文件的编辑后,给出基础镜像的名称,就可以驱动基础镜像生成模块调用预设的镜像构建工具根据工作人员编辑好的镜像制作配置文件构建出相应的基础镜像,并自动上传至镜像存储仓库当中。

其中,无论使用上述哪种方式制作的基础镜像,只要对应的目标应用程序对外部依赖项的需求不发生变化,则一次制作完成的基础镜像可以在后续部署步骤中被反复使用,不需要每次部署前都重新生成一次。这里所说的“对外部依赖项的需求不发生变化”可以包括下面所有内容:

目标应用程序所需要的操作系统版本未发生变化。

目标应用程序所需要的由操作系统提供的通用命令程序、基础动态链接库、基础配置文件内容均未发生变化。

目标应用程序所依赖的其他程序、动态链接库及相应的配置文件均未发生变化。

本申请实施例发现为了实现上述步骤S100建立与需要部署目标应用程序的目标宿主机之间的连接、步骤S110拉取基础镜像至所述目标宿主机以及步骤S130下载并解压目标应用程序包至所述应用程序容器中,在上述步骤S100建立与需要部署目标应用程序的目标宿主机之间的连接之前,还可以包括:

获取目标应用程序对应的配置信息,所述配置信息包括:所述目标应用程序对应的基础镜像的存储位置、目标宿主机信息及目标应用程序包的存储位置。

其中,获取的目标应用程序对应的配置信息可以由工作人员在本申请实施例提供的界面上手动输入,目标应用程序包的存储位置可以为一个完整的URL,也可以为HTTP协议的URL,还可以为FTP协议的URL,该URL应当指向一个tar格式文件,文件内容为打包好的目标应用程序文件,基础镜像的存储位置可以为其所在的镜像仓库的域名或IP地址、在镜像仓库内部的存储路径,目标宿主机信息可以为目标宿主机的IP地址。

可选的,每当获取到一个目标应用程序对应的配置信息之后,可以将其配置信息存储至数据库中,这样再次部署该目标应用程序时,若确定其对应的配置信息未发生变化,则可以直接从数据库中获取其配置信息,若确定其对应的配置信息发生变化,那么需要重新获取。

根据所述目标宿主机信息确定需要部署所述目标应用程序的目标宿主机。

具体的,在获取得到目标宿主机信息之后,可以根据目标宿主机信息来确定需要部署目标应用程序的目标宿主机。

基于此,上述步骤S110拉取基础镜像至所述目标宿主机的过程,可以包括:

从所述基础镜像的存储位置中拉取所述基础镜像至所述目标宿主机。

具体的,获取到基础镜像的存储位置之后,即可从该基础镜像的存储位置中拉取基础镜像至目标宿主机。

上述步骤S130下载并解压目标应用程序包至所述应用程序容器中的过程,可以包括:

从所述目标应用程序包的存储位置中下载并解压所述目标应用程序包至所述应用程序容器中。

具体的,获取到目标应用程序包的存储位置后,即可从该目标应用程序包的存储位置中下载并解压目标应用程序包至应用程序容器中,完成目标应用程序在应用程序容器内的安装。

本申请实施例发现当目标应用程序运行于应用程序容器时,如果不设置目标应用程序对应的端口映射,在应用程序容器外部无法通过网络来访问应用程序容器内的目标应用程序的服务,可能导致目标应用程序无法正常运行,基于此,本申请实施例提供了两种设置端口映射的方式,分别为:

第一种:

上述配置信息还可以包括:所述目标应用程序在应用程序容器内运行时侦听的内部端口与所述目标应用程序通过所述目标宿主机对外暴露的外部端口之间的映射关系。

其中,映射关系可以为“<容器内端口号(1~65535)>-<宿主机端口号(1~65535)>”的形式。

可选的,本申请实施例可以提供输入目标应用程序在应用程序容器内运行时侦听的内部端口与目标应用程序通过目标宿主机对外暴露的外部端口的界面,由工作人员输入内部端口与外部端口之间的映射关系。

基于此,上述根据所述目标宿主机信息确定需要部署所述目标应用程序的目标宿主机之后,还可以包括:

按照预设的规则对所述映射关系进行校验。

其中,所述规则为同一台宿主机上的任意两个不同的应用程序不能使用相同的外部端口及同一应用程序使用的不同内部端口不能对应相同的外部端口。

具体的,若同一台宿主机上任意两个不同的应用程序使用相同的外部端口,那么会导致这些应用程序运行异常,并且若同一应用程序使用的不同内部端口对应相同的外部端口,也会导致该应用程序运行异常,所以为了保证目标应用程序的正常运行,需要在确定部署该目标应用程序的目标宿主机之后按照上述规则对获取的映射关系进行校验。

若校验未通过,迭代执行重新获取所述映射关系的步骤,直至校验通过,得到最终的映射关系。

具体的,若校验未通过,那么需要反复重新获取映射关系并校验,直至校验通过,其中,若该映射关系由工作人员输入,那么需要不断提示工作人员重新输入映射关系,直至工作人员重新输入的映射关系校验通过。

若校验通过,上述在所述目标宿主机上基于拉取的所述基础镜像创建并启动应用程序容器之后,还可以包括:

根据所述映射关系建立所述目标应用程序对应的端口映射。

具体的,根据校验通过的映射关系设置目标应用程序对应的端口映射,设置好端口映射之后,所有发往该目标宿主机上“外部端口”的网络请求都会被转发到相应应用容器的“内部端口”上,从而保证目标应用程序的正常运行。

第二种:

根据所述目标宿主机信息确定需要部署所述目标应用程序的目标宿主机之后,还可以包括:

按照上述规则为所述目标应用程序分配其在应用程序容器内运行时侦听的内部端口与其通过所述目标宿主机对外暴露的外部端口之间的映射关系。

可选的,可以为目标应用程序分配其对应的内部端口与外部端口来为目标应用程序分配其对应的端口映射关系,还可以可以由工作人员指定目标应用程序对应的内部端口,然后为每个内部端口分配一个对应的外部端口来为目标应用程序分配其对应的端口映射关系。

可选的,若目标应用程序有多个内部端口需要映射,则可以在资源允许的前提下尽可能为其分配连续的外部端口。

基于此,在所述目标宿主机上基于拉取的所述基础镜像创建并启动应用程序容器之后,还可以包括:

根据所述映射关系建立所述目标应用程序对应端口映射。

具体的,如上述可知,设置好端口映射之后,所有发往该目标宿主机上“外部端口”的网络请求都会被转发到相应应用程序容器的“内部端口”上,从而保证目标应用程序的正常运行。

本申请实施例发现会为运行于应用程序容器的目标应用程序设置相应的端口映射,并且设置的端口映射满足“同一台宿主机上的任意两个不同的应用程序不能使用相同的外部端口及同一应用程序使用的不同内部端口不能对应相同的外部端口”的规则,保证了目标应用程序的正常运行。

本申请实施例发现应用程序运行时产生的数据会存储在应用程序容器中,而在应用程序容器中存储的数据是临时性的数据,若应用程序容器删除,那么存储的数据也会丢失,无法做到数据的持久化存储,并且同一台目标宿主机上可能会部署多个目标应用程序,每个目标应用程序运行在对应的应用程序容器中,由于每个应用程序容器都是独立的,所以运行在不同应用程序容器中的两个不同的目标应用程序无法进行数据交互,基于此,本申请实施例发现可以将目标宿主机的目录映射到容器内的目录,即设置目标应用程序对应的卷映射,来满足数据的持久化存储以及不同目标应用程序之间的数据共享,基于此,本申请实施例提供了两种可选的设置卷映射的方式,分别如下:

第一种:

上述配置信息还可以包括:所述目标应用程序在应用程序容器内存储数据的目录与在所述目标宿主机上存储数据的目录之间的映射关系。

其中,映射关系可以为<应用程序容器内目录>-<目标宿主机目录>的形式。

可选的,本申请实施例可以提供输入目标应用程序在应用程序容器内存储数据的目录与在所述目标宿主机上存储数据的目录的界面,由工作人员输入容器内目录与宿主机目录之间的映射关系。

基于此,上述在所述目标宿主机上基于拉取的所述基础镜像创建并启动应用程序容器之后,还可以包括:

根据所述映射关系建立所述目标应用程序对应的卷映射。

可选的,若同一台目标宿主机上需要部署多个目标应用程序,那么每个目标应用程序在目标宿主机上存储数据的目录可以相同也可以不相同,当为某个目标应用程序设置卷映射的目的是为了持久化存储其产生的数据时,则可以为其分配单独的目标宿主机目录,若为这些目标应用程序设置卷映射的目的是为了使它们能够进行数据共享,那么这些目标应用程序对应的目标宿主机目录则可以相同。

第二种:

上述根据所述目标宿主机信息确定需要部署所述目标应用程序的目标宿主机之后,还可以包括:

为所述目标应用程序分配其在应用程序容器内存储数据的目录与在所述目标宿主机上存储数据的目录之间的映射关系。

可选的,可以为目标应用程序分配其对应的应用容器内的目录与目标宿主机上的目录来为目标应用程序分配其对应的映射关系,还可以由工作人员在本申请实施例提供的界面上填写目标应用程序对应的应用容器内的目录,然后再为每个应用容器内的目录分配一个对应的目标宿主机上的目录来为目标应用程序分配其对应的映射关系。

基于此,上述在所述目标宿主机上基于拉取的所述基础镜像创建并启动应用程序容器之后,还可以包括:

根据所述映射关系建立所述目标应用程序对应的卷映射。

具体的,根据映射关系建立目标应用程序对应的卷映射之后,目标应用程序在应用程序容器内运行时产生的数据即可以存储至相应的目标宿主机目录下。

本申请实施例会为运行于应用程序容器内的目标应用程序建立对应的卷映射,实现了将目标应用程序运行时产生的数据进行数据的持久化存储以及不同同一目标宿主机上不同目标应用程序之间的数据共享。

本申请实施例发现为了提高目标应用程序的移植性与通用性,可以不在目标应用程序中指定固定的参数,可以在目标应用程序执行前获取,基于此,在上述步骤S100建立与需要部署目标应用程序的目标宿主机之间的连接之前,还可以包括:

获取启动参数。

具体的,启动参数为目标应用程序执行时所需的技术或业务参数,可以为一个或多个,每个参数可以以“键-值”对的形式存储。

基于此,上述步骤S140控制执行所述应用程序容器中的所述目标应用程序之前,还可以包括:

将所述启动参数以环境变量的形式注入至所述应用程序容器中。

具体的,将启动参数以环境变量的形式注入至应用程序容器中时,每个启动参数的“键”会生成一个同名的环境变量,该环境变量的取值即启动参数中的“值”。

将所述环境变量中的实际值代替所述目标应用程序中对应的占位符或默认值,得到替换后目标应用程序。

具体的,启动参数对应的环境变量的取值即为目标应用程序执行时所需的技术或业务参数,所以需要将环境变量中的实际值代替目标应用程序中对应的占位符或默认值,得到替换后目标应用程序。

基于此,上述S140控制执行所述应用程序容器中的所述目标应用程序的过程,可以包括:

控制执行所述应用程序容器中的所述替换后目标应用程序。

本申请实施例中,可以不在目标应用程序中指定固定的所需的技术或业务参数,而是在目标应用程序执行前再获取启动参数,启动参数中的值即为目标应用程序所需的技术或业务参数,并将启动参数以环境变量的形式注入应用程序容器中,将环境变量的值代替目标应用程序中对应的占位符或默认值,再执行目标应用程序,提高了目标应用程序的可移植性及通用性。

可选的,为了实现前述实施例,可以在上述在所述目标宿主机上基于拉取的所述基础镜像创建并启动应用程序容器之后,生成一个初始脚本,以及,将获取的所有启动参数转换为定义环境变量的Shell指令保存在初始脚本中,以及,将目标应用程序包的存储位置填入初始脚本中,以及,将预设的启动脚本的内容注入该初始脚本中,然后执行该初始脚本,初始脚本在执行时首先会将启动参数保存为应用程序容器中的环境变量,然后访问目标应用程序包的存储位置将目标应用程序包下载到应用程序容器内的预设目录下,再通过tar命令解压,完成目标应用程序在应用程序容器内的安装,然后将启动脚本的内容转换为应用程序容器中预设的目录下的脚本文件,随后初始脚本执行该脚本文件,该脚本文件在执行时会将应用程序容器内环境变量的实际值代替目标应用程序中对应的占位符或默认值,得到替换后的目标应用程序,然后执行该替换后目标应用程序,一般来说,启动脚本执行时不退出,可以视为部署成功。

本公开的方法实施例中的相关信息的名称仅用于说明性的目的,而并不是用于对这些信息的范围进行限制。

本公开的方法实施例中虽然采用特定次序描绘了各操作,但是这不应当理解为要求这些操作以所示出的特定次序或以顺序次序执行来执行。在一定环境下,多任务和并行处理可能是有利的。

应当理解,本公开的方法实施例中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本公开的范围在此方面不受限制。

可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括但不限于面向对象的程序设计语言诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络包括局域网(LAN)或广域网(WAN)连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。

下面对本申请实施例提供的应用程序部署装置进行描述,下文描述的应用程序部署装置与上文描述的应用程序部署方法可相互对应参照。

首先,结合图2,对应用程序部署装置进行介绍,如图2所示,该应用程序部署装置可以包括:

建立连接单元10,用于建立与需要部署目标应用程序的目标宿主机之间的连接;

基础镜像拉取单元20,用于拉取基础镜像至所述目标宿主机,所述基础镜像为预先根据所述目标应用程序所需的所有外部依赖项生成的镜像;

容器创建启动单元30,用于在所述目标宿主机上基于拉取的所述基础镜像创建并启动应用程序容器;

应用程序安装单元40,用于下载并解压目标应用程序包至所述应用程序容器中;

应用程序执行单元50,用于控制执行所述应用程序容器中的所述目标应用程序。

可选的,所述应用程序部署装置还可以包括:

第一基础镜像生成单元,用于获取目标应用程序所需的所有外部依赖项,根据所述外部依赖项生成所述基础镜像。

可选的,当确定所述目标应用程序为首次部署时或确定所述目标应用程序并非首次部署但所述目标应用程序所需的外部依赖项发生变化时,所述应用程序部署装置,还可以包括:

第二基础镜像生成单元,用于获取所述目标应用程序所需的所有外部依赖项,根据所述外部依赖项生成基础镜像;

基础镜像存储单元,用于将所述基础镜像存储至预设的镜像仓库或将所述镜像仓库中所述目标应用程序对应的已存储基础镜像替换为所述基础镜像;

基于此,所述基础镜像拉取单元拉取基础镜像至所述目标宿主机的过程,可以包括:

从所述镜像仓库中拉取所述基础镜像至所述目标宿主机;

当确定所述目标应用程序并非首次部署且所述目标应用程序所需的外部依赖项未发生变化时,直接执行所述建立连接单元建立与需要部署目标应用程序的目标宿主机之间的连接的步骤;

基于此,所述基础镜像拉取单元拉取基础镜像至所述目标宿主机的过程,可以包括,包括:

从所述镜像仓库中拉取所述目标应用程序对应的所述已存储基础镜像至所述目标宿主机。

可选的,所述应用程序部署装置,还可以包括:

配置信息获取单元,用于获取目标应用程序对应的配置信息,所述配置信息包括:所述目标应用程序对应的基础镜像的存储位置、目标宿主机信息及目标应用程序包的存储位置;

目标宿主机确定单元,用于根据所述目标宿主机信息确定需要部署所述目标应用程序的目标宿主机;

基于此,所述基础镜像拉取单元拉取基础镜像至所述目标宿主机的过程,可以包括:

从所述基础镜像的存储位置中拉取所述基础镜像至所述目标宿主机;

所述应用程序安装单元下载并解压目标应用程序包至所述应用程序容器中的过程,可以包括:

从所述目标应用程序包的存储位置中下载并解压所述目标应用程序包至所述应用程序容器中。

可选的,所述配置信息获取单元获取的配置信息还可以包括:所述目标应用程序在应用程序容器内运行时侦听的内部端口与所述目标应用程序通过所述目标宿主机对外暴露的外部端口之间的映射关系;

基于此,所述应用程序部署装置,还可以包括:

校验单元,用于按照预设的规则对所述映射关系进行校验,所述规则为同一台宿主机上的任意两个不同的应用程序不能使用相同的外部端口及同一应用程序使用的不同内部端口不能对应相同的外部端口;

若校验未通过,则执行下述最终映射关系获取单元的步骤,若校验通过,则执行下述端口映射建立单元的步骤;

最终映射关系获取单元,用于迭代执行重新获取所述映射关系的步骤,直至校验通过,得到最终的映射关系;

第一端口映射建立单元,用于根据所述映射关系建立所述目标应用程序对应的端口映射。

可选的,所述应用程序部署装置,还可以包括:

第一映射关系分配单元,用于按照预设的规则为所述目标应用程序分配其在应用程序容器内运行时侦听的内部端口与其通过所述目标宿主机对外暴露的外部端口之间的映射关系,所述规则为同一台宿主机上的任意两个不同的应用程序不能使用相同的外部端口及同一应用程序使用的不同内部端口不能对应相同的所述外部端口;

第二端口映射建立单元,用于根据所述映射关系建立所述目标应用程序对应的端口映射。

可选的,所述配置信息获取单元获取的配置信息还可以包括:所述目标应用程序在应用程序容器内存储数据的目录与在所述目标宿主机上存储数据的目录之间的映射关系;

基于此,所述应用程序部署装置,还可以包括:

第一卷映射建立单元,用于根据所述映射关系建立所述目标应用程序对应的卷映射。

可选的,所述应用程序部署装置,还可以包括:

第二映射关系分配单元,用于为所述目标应用程序分配其在应用程序容器内存储数据的目录与在所述目标宿主机上存储数据的目录之间的映射关系;

第二卷映射建立单元,用于根据所述映射关系建立所述目标应用程序对应的卷映射。

可选的,所述应用程序部署装置,还可以包括:

启动参数获取单元,用于获取启动参数;

启动参数注入单元,用于将所述启动参数以环境变量的形式注入至所述应用程序容器中;

替换后目标应用程序获取单元,用于将所述环境变量中的实际值代替所述目标应用程序中对应的占位符或默认值,得到替换后目标应用程序;

基于此,所述应用程序执行单元控制执行所述应用程序容器中的所述目标应用程序的过程,可以包括:

控制执行所述应用程序容器中的所述替换后目标应用程序。

可选的,所述建立连接单元建立与需要部署目标应用程序的目标宿主机之间的连接的过程,可以包括:

通过SSH协议建立与需要部署目标应用程序的目标宿主机之间的连接,所述SSH协议为安全外壳协议。

描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元的名称在某种情况下并不构成对该单元本身的限定,例如,第一映射关系分配单元还可以被描述为“内部端口与外部端口之间的映射关系分配单元”。

本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统(SOC)、复杂可编程逻辑设备(CPLD)等等。

本申请实施例提供的应用程序部署装置可应用于应用程序部署设备。图3示出了应用程序部署设备600的硬件结构框图,本公开实施例中的应用程序部署设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图3示出的应用程序部署设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。

如图3所示,应用程序部署设备600可以包括处理装置(例如中央处理器、图形处理器等)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储装置606加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有应用程序部署设备600操作所需的各种程序和数据。处理装置601、ROM 602以及RAM603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。

通常,以下装置可以连接至I/O接口605:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置606;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置607;包括例如磁带、硬盘等的存储装置608;以及通信装置609。通信装置609可以允许应用程序部署设备600与其他设备进行无线或有线通信以交换数据。虽然图3示出了具有各种装置的应用程序部署设备600,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。

本申请实施例还提供一种计算机可读介质,该计算机可读介质承载有一个或者多个程序,当该一个或者多个程序被上述应用程序部署设备执行时,使得该应用程序部署设备:建立与需要部署目标应用程序的目标宿主机之间的连接;拉取基础镜像至所述目标宿主机,所述基础镜像为预先根据所述目标应用程序所需的所有外部依赖项生成的镜像;在所述目标宿主机上基于拉取的所述基础镜像创建并启动应用程序容器;下载并解压目标应用程序包至所述应用程序容器中;控制执行所述应用程序容器中的所述目标应用程序。

需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。

上述计算机可读介质可以是上述应用程序部署设备中所包含的;也可以是单独存在,而未装配入该应用程序部署设备中。

特别地,根据本公开的实施例,上文应用程序部署方法实施例中描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包含用于执行上文应用程序部署方法的程序代码。在这样的实施例中,该计算机程序可以通过图3中的通信装置609从网络上被下载和安装,或者从存储装置608被安装,或者从ROM602被安装。在该计算机程序被处理装置601执行时,执行本公开实施例的方法中限定的上述功能。

根据本公开的一个或多个实施例,示例1提供了一种应用程序部署方法,包括:

建立与需要部署目标应用程序的目标宿主机之间的连接;

拉取基础镜像至所述目标宿主机,所述基础镜像为预先根据所述目标应用程序所需的所有外部依赖项生成的镜像;

在所述目标宿主机上基于拉取的所述基础镜像创建并启动应用程序容器;

下载并解压目标应用程序包至所述应用程序容器中;

控制执行所述应用程序容器中的所述目标应用程序。

根据本公开的一个或多个实施例,示例2提供了示例1的方法,所述建立与需要部署目标应用程序的目标宿主机之间的连接之前,还包括:

获取目标应用程序所需的所有外部依赖项,根据所述外部依赖项生成所述基础镜像。

根据本公开的一个或多个实施例,示例3提供了示例1的方法,所述建立与需要部署目标应用程序的目标宿主机之间的连接之前,还包括:

当确定所述目标应用程序为首次部署时或确定所述目标应用程序并非首次部署但所述目标应用程序所需的外部依赖项发生变化时,获取所述目标应用程序所需的所有外部依赖项,根据所述外部依赖项生成基础镜像;

将所述基础镜像存储至预设的镜像仓库或将所述镜像仓库中所述目标应用程序对应的已存储基础镜像替换为所述基础镜像;

所述拉取基础镜像至所述目标宿主机,包括:

从所述镜像仓库中拉取所述基础镜像至所述目标宿主机;

当确定所述目标应用程序并非首次部署且所述目标应用程序所需的外部依赖项未发生变化时,直接执行所述建立与需要部署目标应用程序的目标宿主机之间的连接的步骤;

所述拉取基础镜像至所述目标宿主机,包括:

从所述镜像仓库中拉取所述目标应用程序对应的所述已存储基础镜像至所述目标宿主机。

根据本公开的一个或多个实施例,示例4提供了示例1的方法,所述建立与需要部署目标应用程序的目标宿主机之间的连接之前,还包括:

获取目标应用程序对应的配置信息,所述配置信息包括:所述目标应用程序对应的基础镜像的存储位置、目标宿主机信息及目标应用程序包的存储位置;

根据所述目标宿主机信息确定需要部署所述目标应用程序的目标宿主机;

所述拉取基础镜像至所述目标宿主机,包括:

从所述基础镜像的存储位置中拉取所述基础镜像至所述目标宿主机;

所述下载并解压目标应用程序包至所述应用程序容器中,包括:

从所述目标应用程序包的存储位置中下载并解压所述目标应用程序包至所述应用程序容器中。

根据本公开的一个或多个实施例,示例5提供了示例4的方法,所述配置信息还包括:所述目标应用程序在应用程序容器内运行时侦听的内部端口与所述目标应用程序通过所述目标宿主机对外暴露的外部端口之间的映射关系;

根据所述目标宿主机信息确定需要部署所述目标应用程序的目标宿主机之后,还包括:

按照预设的规则对所述映射关系进行校验,所述规则为同一台宿主机上的任意两个不同的应用程序不能使用相同的外部端口及同一应用程序使用的不同内部端口不能对应相同的外部端口;

若校验未通过,迭代执行重新获取所述映射关系的步骤,直至校验通过,得到最终的映射关系;

若校验通过,在所述目标宿主机上基于拉取的所述基础镜像创建并启动应用程序容器之后,还包括:

根据所述映射关系建立所述目标应用程序对应的端口映射。

根据本公开的一个或多个实施例,示例6提供了示例4的方法,根据所述目标宿主机信息确定需要部署所述目标应用程序的目标宿主机之后,还包括:

按照预设的规则为所述目标应用程序分配其在应用程序容器内运行时侦听的内部端口与其通过所述目标宿主机对外暴露的外部端口之间的映射关系,所述规则为同一台宿主机上的任意两个不同的应用程序不能使用相同的外部端口及同一应用程序使用的不同内部端口不能对应相同的所述外部端口;

在所述目标宿主机上基于拉取的所述基础镜像创建并启动应用程序容器之后,还包括:

根据所述映射关系建立所述目标应用程序对应端口映射。

根据本公开的一个或多个实施例,示例7提供了示例4的方法,所述配置信息还包括:所述目标应用程序在应用程序容器内存储数据的目录与在所述目标宿主机上存储数据的目录之间的映射关系;

在所述目标宿主机上基于拉取的所述基础镜像创建并启动应用程序容器之后,还包括:

根据所述映射关系建立所述目标应用程序对应的卷映射。

根据本公开的一个或多个实施例,示例8提供了示例4的方法,根据所述目标宿主机信息确定需要部署所述目标应用程序的目标宿主机之后,还包括:

为所述目标应用程序分配其在应用程序容器内存储数据的目录与在所述目标宿主机上存储数据的目录之间的映射关系;

在所述目标宿主机上基于拉取的所述基础镜像创建并启动应用程序容器之后,还包括:

根据所述映射关系建立所述目标应用程序对应的卷映射。

根据本公开的一个或多个实施例,示例9提供了示例1的方法,所述建立与需要部署目标应用程序的目标宿主机之间的连接之前,还包括:

获取启动参数;

所述控制执行所述应用程序容器中的所述目标应用程序之前,还包括:

将所述启动参数以环境变量的形式注入至所述应用程序容器中;

将所述环境变量中的实际值代替所述目标应用程序中对应的占位符或默认值,得到替换后目标应用程序;

所述控制执行所述应用程序容器中的所述目标应用程序,包括:

控制执行所述应用程序容器中的所述替换后目标应用程序。

根据本公开的一个或多个实施例,示例10提供了示例1-9任一示例的方法,所述建立与需要部署目标应用程序的目标宿主机之间的连接,包括:

通过SSH协议建立与需要部署目标应用程序的目标宿主机之间的连接,所述SSH协议为安全外壳协议。

根据本公开的一个或多个实施例,示例11提供了一种应用程序部署装置,包括:

建立连接单元,用于建立与需要部署目标应用程序的目标宿主机之间的连接;

基础镜像拉取单元,用于拉取基础镜像至所述目标宿主机,所述基础镜像为预先根据所述目标应用程序所需的所有外部依赖项生成的镜像;

容器创建启动单元,用于在所述目标宿主机上基于拉取的所述基础镜像创建并启动应用程序容器;

应用程序安装单元,用于下载并解压目标应用程序包至所述应用程序容器中;

应用程序执行单元,用于控制执行所述应用程序容器中的所述目标应用程序。

尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。

虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实施例中。相反地,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实施例中。

以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。

相关技术
  • 应用程序显示方法、应用程序显示装置及终端
  • 应用程序图标显示方法及装置、应用程序、终端
  • 一种应用程序的热修复方法、装置、存储介质及终端
  • 虚拟机应用程序管理方法、装置、设备及可读存储介质
  • 应用程序部署方法、部署主控机、部署客户端和集群
  • 应用程序部署方法、部署主控机、部署客户端和集群
技术分类

06120115920472