SuperMap iObjects Docker打包全攻略

SuperMap iObjects Docker打包全攻略

文章目录

    • SuperMap iObjects Docker打包全攻略
      • 说明
      • 开始打包iObjects容器
      • 启动容器
      • 参考

说明

  1. 此教程编写时使用的iObjects版本为 10.2.1 ,理论高版本同样支持,具体自测。
  2. 基础镜像为 Docker 官方 ubuntu:16.04完整版。(想换alpine自己折腾)
  3. 不同CPU架构都需要重新打包Dockerfile以安装相关LIB库(本教程以x64为例)
  4. 容器内部默认使用超图iObjects完整包内自带的JRE(10.2.1是1.8),因此如果由高版本JRE需求的请自己研究。
  5. 切记构建容器时,使用的是超图官方下载的iObjects完整包
  6. 构建后的容器默认以 Spring Boot 分离式打包启动,有需要的话参考这里。
  7. 容器构建中使用了多段构建模式,为了减少ADD层3个G的超图包大小,因此部分指令略显冗余。
  8. 在打包时排除$SUPERMAP/Bin,以减少镜像体积,后续通过目录映射提供。
  9. 此教程最终打包后的容器大小在 600M,算是可接受范围。

PS:超图的iObjects依赖坑挺多的!

开始打包iObjects容器

1)准备Docker环境,版本务必 > 17.05;超图 iObjects 版本 > 10.2.1。

Docker下载:https://www.docker.com/products/docker-desktop

iObjects下载:http://support.supermap.com.cn/DownloadCenter/ProductPlatform.aspx

切记不要只下载Bin包!要下的完整包也就是绿色版!根据实际的CPU架构下载!

image-20230424094846896

2)随便创个文件夹,在里面丢入:1、iObjects完整包 2、Dockerfile

目录内容如下:

image-20230424101245650

Dockerfile配置如下:

# 超图容器依赖打包 Dockerfile(支持x64、arm)
# 临时镜像,用于去掉ADD的大文件层(超图包3个G),最后只保留最终镜像
FROM ubuntu:16.04 AS TMP_IMAGE
MAINTAINER Yoko# 超图目录&JRE
ENV SUPERMAP /supermap
ENV SUPERMAP_TMP $SUPERMAP/tmp
ENV SUPERMAP_SUPPORT $SUPERMAP/Support
ENV SUPERMAP_BIN $SUPERMAP/Bin
ENV SUPERMAP_JRE $SUPERMAP/jre
# 超图依赖(完整包),需要不同架构的去下载不同的包即可:http://support.supermap.com.cn/DownloadCenter/ProductPlatform.aspx
ADD supermap-iobjectsjava-10.2.1-20428-92245-linux64-all.tar.gz $SUPERMAP_TMP
RUN mv $SUPERMAP_TMP/jre* $SUPERMAP_JRE && mv $SUPERMAP_TMP/Support $SUPERMAP_SUPPORT
# RUN mv $SUPERMAP_TMP/Bin $SUPERMAP_BIN # 是否需要Bin内嵌看自己
RUN tar -xvf $SUPERMAP_SUPPORT/aksusbd* -C $SUPERMAP_SUPPORT --strip-components=1
RUN rm -rf $SUPERMAP_TMP && rm -rf $SUPERMAP_SUPPORT/*.tar# 多端构建模式,去除大文件依赖,也可以使用 docker build -t municipal-app-supermap . --squash 但需要开启docker的experimental功能
FROM ubuntu:16.04
WORKDIR /
ENV SUPERMAP /supermap
ENV SUPERMAP_TMP $SUPERMAP/tmp
ENV SUPERMAP_SUPPORT $SUPERMAP/Support
ENV SUPERMAP_BIN $SUPERMAP/Bin
ENV SUPERMAP_JRE $SUPERMAP/jre
ENV JAVA_HOME $SUPERMAP_JRE# 直接复制临时镜像内部文件
COPY --from=TMP_IMAGE $SUPERMAP $SUPERMAP# 更换阿里源,依次安装相关依赖库(超图包缺失的)
RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list \&& sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list \&& apt-get clean && apt-get update \&& apt-get install -y libgomp1 \&& apt-get install -y libx11-dev \&& apt-get install -y libxext-dev \&& apt-get install -y libxrender-dev \&& apt-get install -y libxtst-dev \&& apt-get install -y libxinerama-dev \&& apt-get install -y libxrandr-dev \&& apt-get install -y tzdata \&& apt-get autoclean \&& apt-get autoremove -y \&& rm -rf /var/cache/apt/* \&& rm -rf /var/lib/apt/lists/*# 时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && dpkg-reconfigure -f noninteractive tzdata
# 文件目录
RUN mkdir -p /opt/upFiles && mkdir -p /opt/webapp# 设置字符集(防止应用日志乱码)
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
# 动态链接库
ENV LD_LIBRARY_PATH $SUPERMAP_BIN:$LD_LIBRARY_PATH
# 环境变量,超图的必须在最前面
ENV PATH $SUPERMAP_BIN:$JAVA_HOME/bin:$PATH
# 应用目录
ENV APP /app
# 应用入口
ENV APP_NAME=main.jar
# 依赖文件夹,设置为空时,不以配置分离式启动
ENV APP_LIB_PATH=lib APP_CONFIG_PATH=config
# 配置启用配置文件
ENV APP_PROFILE_ACTIVE=prod APP_PORT=8888
# 特殊JVM参数
ENV APP_JVM_OPTION="-Djava.security.egd=file:/dev/./urandom -Xms2048m -Xmx2048m"# 暴露端口
EXPOSE $APP_PORT/tcp
# 应用-入口文件夹(必须)
VOLUME $APP
# 超图-依赖目录(必须)
VOLUME $SUPERMAP_BIN
# 超图-证书目录(必须)
VOLUME /opt/SuperMap/License
# 应用-本地文件上传目录(建议)
VOLUME /opt/upFiles
# 应用-本地webapp目录(可选)
VOLUME /opt/webappCMD echo "环境变量: ${PATH}" \&& echo "加载驱动: $SUPERMAP_SUPPORT" && cd $SUPERMAP_SUPPORT && ./dinst \&& echo "启动app: $APP" && cd $APP && ls . -al \&& if [ -n "$APP_LIB_PATH" ] && [ -n "$APP_CONFIG_PATH" ]; then \java $APP_JVM_OPTION \-Dloader.path=$APP_LIB_PATH,$APP_CONFIG_PATH \-Dspring.profiles.active=$APP_PROFILE_ACTIVE \-Dserver.port=$APP_PORT \-jar $APP_NAME; \else \java $APP_JVM_OPTION \-Dspring.profiles.active=$APP_PROFILE_ACTIVE \-Dserver.port=$APP_PORT \-jar $APP_NAME; \fi

3)打开powershell/shell执行构建,不出意外的话应该不会出意外,等待结束就行了。

# 构建镜像
docker build -t app-supermap .
# 导出镜像
docker save -o ./app-supermap app-supermap
# 载入镜像
docker load -i app-supermap

启动容器

0)启动参数说明

Docker启动参数(必需)说明
-v APP应用目录:/app映射APP目录
-v 超图/Bin:/supermap/Bin超图iObjects的Bin依赖
-v 超图证书目录:/opt/SuperMap/License超图的证书
-p 8888:8888映射的端口
-v 文件上传目录:/opt/upFilesAPP本地文件的保存路径
Docker启动参数(可选)
-e APP_NAME=main.jarAPP的入口jar,默认为main.jar
-e APP_LIB_PATH=libAPP所需的依赖目录,默认为jar包同级目录下的 lib 目录,留空则以不分离模式启动
-e APP_CONFIG_PATH=configAPP所需的配置目录,默认为jar包同级目录下的 config 目录
-e APP_PROFILE_ACTIVE=prodAPP启动时加载的配置文件,默认prod
-e APP_PORT=8888APP启动端口,默认8888
-e APP_JVM_OPTION=“”APP启动时附带的额外JVM参数

1)必须要申请超图的证书:https://www.supermapol.com/web/pricing/triallicense

申请完如下:

image-20230424101446868

注:Windows系统上的许可证得放在这个目录下 C:\Program Files\Common Files\SuperMap\License ,可以参考超图博客

2)启动示例

APP目录结构长这样:

image-20230424102801128

对应的启动参数长这样:

docker run -di \-p 8888:8888 \-v /home/app:/app \-v /home/upFiles:/opt/upFiles \-v /home/supermap/Bin:/supermap/Bin \-v /opt/SuperMap/License:/opt/SuperMap/License --restart=unless-stopped \--name app app-supermap

如果是未分离打包的JAR,把APP_LIB_PATH或者APP_CONFIG_PATH置空:

docker run -di \-p 8888:8888 \-v /home/app:/app \-v /home/upFiles:/opt/upFiles \-v /home/supermap/Bin:/supermap/Bin \-v /opt/SuperMap/License:/opt/SuperMap/License \-e APP_LIB_PATH="" \--restart=unless-stopped \--name app app-supermap

参考

1)ChatGPT

2)https://www.zhihu.com/question/325416061

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/48100.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

裁判文书网2019年9月份最新爬虫

文书网在9月份终于更新了,上去看了一下,无比的流畅。秉持着一颗探索,天真的童心看看文书网这次更新有啥突破和进展,一言不合直接打开开发者工具,仔细寻找了一番,看到了一个可疑的连接,定睛一看&…

钉钉作弊软件开发者,被判 5 年半,为什么提供「虚拟定位」会被判这么久?...

上面这个公号「涩郎」,是我的一个备用号,为了防止万一哪天大号失联,平时一周我也会发三篇左右的我的思考,读书笔记,认知感悟等文章,带领大家一起探索精神与财务自由之路。 大家好,我是校长。 最…

文书档案整理过程图文讲解

什么是文书档案: 机关、团体、企业事业单位在党务和行政事务管理活动中直接形成的,由命令、指示、决定、通告、公告、请示、报告、批复、通知、函、会议记录、简报、计划和总结等通用文书转化而来的档案。 文书档案整理有两种方法: 以件为…

工程师和码农

其实这篇是我昨天写好的,和我昨天写的那篇《啥叫工程?啥叫工程师?》是一体的,但是内容又庞杂,所以就分成了两篇文章。 (1)前导故事1 我曾经开发过一个核心模块,受好多人关联依赖调用…

当我开始用ChatGPT帮我准备面试题…

转眼间,北美的“金三银四”已经快结束了,可是各大厂裁员的消息仍是此起彼伏。即使有HC,也不敢冒然申请,害怕还没准备好,面试搞砸了怎么办…… 那如果借助“外挂”来面试,会怎么样?没错&#xf…

阿里版GPT官宣“阿里全家桶”:所有产品都将接入

“阿里版GPT”——通义千问邀测才几天, 在本周的2023阿里云峰会现场,CEO张勇就宣布: 阿里巴巴所有产品未来都将接入“通义千问”大模型,进行全面改造。 与此同时,通义千问的能力也将通过API对外开放,帮助每家企业打…

从华为云计算岗跳槽到银行科技岗,好难!

点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~中文详细注释的开源…

AIGC人才趋势洞察: AIGC时代属于跨界复合型人才,⼈才和创新机制是成功的关键

目录 一、行业背景 (一)从Chat GPT到AIGC:ChatGPT现象级出圈,AIGC关注度爆发性增⻓ (二)AIGC定义:广义与狭义 (三)AIGC应用图谱 二、AIGC招聘需求 &am…

没背景、没学历?专科程序员进入互联网大厂是不是真的没希望?

最近知乎上的一个帖子引起了大众的热议。 疫情结束后,不少大厂又开始了新一轮的招人模式,虽然其中各个方面的要求有所不同,但其中一个招聘要求却出奇的一致——“本科及以上学历。” 互联网用七个字,筑起了一座座学历高墙。 对于…

从华为跳槽到银行科技岗,好难!

今年我们团队在西安的招聘名额比较多,我作为团队的招聘组长,筛选了一波又一波的候选人。 西安是一个有实力的城市,名校云集,985/211 院校很多,包括西安交大、长安大学、西北工业大学、西安电子科技大学、西北大学、西…

学术风波不断,英国24所大学为何改变态度?

近期,一项备受关注的议题引发了英国教育界的热议:是否允许学生在学业中使用生成式人工智能工具ChatGPT?经过一系列的争论和讨论,英国罗素集团的24所顶尖大学最终达成了共识,并发布了关于人工智能使用的原则&#xff0c…

《弥合鸿沟——2023校园招聘调研报告备战攻略》重磅发布!一文速览10大关键发现

校招是企业抢人的主擂台,也是学生上岸的摆渡船。从象牙塔到写字楼,学生们想通过校招完成身份的蜕变,而从写字楼到象牙塔,企业也希冀通过校招引入年轻人才,寻觅那些可助力组织持续发展的新动力。 但在企业和学生之间似乎…

深度学习应用于脑电信号处理

获取了数据还要读懂数据,周期,时间,采样频率,通道等等信息,可以通过说明文档,一般数据都会有。或者用matlab打开数据集来获取。 一、脑电信号数据 开源数据集,注意数据的格式,我用…

脉冲神经网络 神经元模型-HH模型(1)

脉冲神经网络 神经元模型-HH模型 Hodgkin Huxley 神经元模型及实现一 原理1. 电路图2. 常微分方程 二 代码实现-python版本1. 模拟离子通道2. 模拟膜电位 三 代码实现-matlab版本四 参考 Hodgkin Huxley 神经元模型及实现 最近在接触脉冲神经网络相关知识,如有错误…

(DEAP)基于图卷积神经网络的脑电情绪识别(附代码)

1. 数据集介绍以及特征部分见上篇文章: DEAP数据集介绍以及特征提取部分 深度学习基于DEAP的脑电情绪识别情感分类(附代码)_qq_3196288251的博客-CSDN博客 2. 图卷积神经网络哟结合LSTM 本文主要介绍利用图卷积神经网络结合LSTM进行脑电情绪识别。 由于脑电通道…

神经元是多输入单输出吗,单输入单输出神经网络

1、人工神经网络的知识表示形式 人工神经网络的知识表示形式: 1、每个神经元都是一个多输入单输出的信息处理单元 ; 2、神经元输入分兴奋性输入和抑制性输入两种类型 ; 3、神经元具有空间整合特性和阈值特性 ; 4、神经元输入与输…

神经元内信号传递的计算模型-HH模型

神经元内信号传递的计算模型-HH模型 神经元动力学可以被设想为一个总和过程(有时也称为“集成”过程),并结合一种触发动作电位高于临界电压的机制。 在这里主要介绍Hodgkin Huxley模型模拟离子通道,膜电势的改变。 原理 基础知识 细胞膜两侧离子浓度…

Pytorch+PyG实现GAT(图注意力网络)

文章目录 前言一、导入相关库二、加载Cora数据集三、定义GAT网络四、定义模型五、模型训练六、模型验证七、结果 前言 大家好,我是阿光。 本专栏整理了《图神经网络代码实战》,内包含了不同图神经网络的相关代码实现(PyG以及自实现&#xf…

脑电信号特征提取方法与应用

前言 脑电图(EEG)信号在理解与脑功能和脑相关疾病的电活动方面发挥着重要作用。典型的脑电信号分析流程如下:(1)数据采集;(2)数据预处理;(3)特征提取;(4)特征选择;(5)模型训练与分类;(6)性能评估。当信号分…

基础2-用卷积神经网络进行颅内和头皮脑电图数据分析的广义癫痫预测

A Generalised Seizure Prediction with Convolutional Neural Networks for Intracranial and Scalp Electroencephalogram Data Analysis 为了改善耐药癫痫和强直性癫痫患者的生活,癫痫预测作为最具挑战性的预测数据分析工作之一已引起越来越多的关注。许多杰出的…