使用SuperMap iServer 11i官方镜像生成自己的iObjectsJava微服务容器

由于iServer和iObjectsJava需要依赖许多第三方软件才能在linux环境下运行。官方给出过如何在Linux环境下安装iServer11i的教程。在正常的Linux版本下安装一般是没有问题的。但如果想在Docker的容器中安装iServer11i,很多时候都无法成功。原因是使用的容器是精简版的,缺少很多必要的依赖软件。

本文将给大家介绍如何使用SuperMap官方提供的iServer11的镜像来制作自己的GIS微服务容器。

一、 下载官方iServer11镜像

docker pull supermap/iserver:latest

二、 拷贝所需版本的iObjectsJava到容器中

可以通过在启动容器的命令中增加-v参数来将特定版本的iObjectsJava映射到容器中:

docker run -itd -p 8090:8090 -p 9601:9601 -v D:\supermap:/supermap-v D:\licenses:/opt/supermap/license/ -v D:\Datas:/datas --hostname giserver11--name gisserver11 44f596fa97db

说明:

上述命令中,将本机的D:\supermap目录映射到了容器内的/supermap目录。为了方便单独采用绿色版的方式启动,最好把jre也映射到容器的/supermap/support目录下。

本文使用的是Windows10下安装的DockerDesktop软件启动的容器,所以原始文件夹为windows的路径。如果在Linux下安装的Docker,请更改为Linux宿主机的路径。

也可以通过拷贝的方式将特定版本的iObjectsJava拷贝到容器中:

docker cp D:\supermap <容器ID>:/supermap/support

注意:

上述操作执行完毕之后还需要手动将objectsjava/systemlibs下的所有文件拷贝到objectsjava/bin下,否则后续在启动微服务后访问服务时会提示找不到依赖的库文件:

使用SuperMap iServer 11i官方镜像生成自己的iObjectsJava微服务容器_第1张图片

如果自备的iObjectsJava是精简版,没有systemlibs这个文件夹,就从容器里自带的iServer/support/objectsjava下去找:

并将systemlibs文件夹拷贝到自备的iObjectsJava目录下(与bin目录同级):

使用SuperMap iServer 11i官方镜像生成自己的iObjectsJava微服务容器_第2张图片

三、 映射或拷贝微服务程序

上述操作执行完毕后,需要将微服务jar包和相关文件拷贝或映射到容器里。拷贝后的文件夹结构如下:

说明:

上述图片中每个子文件夹为一个GIS微服务。

四、 创建support软连接

如果需要在容器中同时部署和运行多个微服务,就需要在每个微服务文件夹中分别部署一个support文件夹(主要是iObjectsJava),这样不仅操作不方便,还会导致容器尺寸暴增。所以可以通过如下命令在每个微服务文件夹中生成一个support的软连接:

执行完上述命令后,每个微服务文件夹将会出现support软连接:

五、 编写微服务启动脚本

#!/bin/sh
this_dir=`pwd`
dirname$0|grep "^/" >/dev/null
if [ $?-eq 0 ];then
this_dir=`dirname$0`
else
dirname$0|grep "^\." >/dev/null
retval=$?
if [$retval -eq 0 ];then
this_dir=`dirname$0|sed "s#^.#$this_dir#"`
else
this_dir=`dirname$0|sed "s#^#$this_dir/#"`
fi
fi
echo$this_dir
export JRE_HOME=$this_dir/support/jre
exportLD_LIBRARY_PATH=$this_dir/support/objectsjava/bin:$LD_LIBRARY_PATH
exportPATH=$this_dir/support/objectsjava/bin:$this_dir/support/objectsjava/systemlibs:$JRE_HOME/bin:$PATH
exportCLASSPATH=.:$this_dir/support/objectsjava/bin:$this_dir/support/objectsjava/systemlibs:$JRE_HOME/lib:$JRE_HOME/lib/tools.jar
java -jar-Djava.ext.dirs=$this_dir/support/objectsjava/bin:$this_dir/support/objectsjava/systemlibs  ./api.jar &

说明:

上述sh脚本中,需要根据自己准备的objectsjava的文件夹名称替换一下17~20行中对应位置的路径名,再替换一下第20行启动的jar包文件名即可。并将脚本保存为*.sh文件(如“startapi.sh”)。

六、 启动微服务

上述操作全部执行完毕之后,就可以通过运行*.sh文件启动微服务了:

使用SuperMap iServer 11i官方镜像生成自己的iObjectsJava微服务容器_第3张图片

此时在浏览器中请求微服务,即可正常返回结果:

使用SuperMap iServer 11i官方镜像生成自己的iObjectsJava微服务容器_第4张图片

你可能感兴趣的:(微服务,容器)