00_镜像构建-iObjects Python with JupyterHub for K8s

JupyterHub是一个普遍使用的大数据分析的WebUI界面,在JupyterHub for K8s中集成SuperMap iObjects Python,便可在JupyterLab的Notebook环境下中使用各类地理空间数据的处理功能,实现一体化的空间数据分析,若是整合SuperMap iClient Python,还能够进一步实现GIS服务的在线访问和Web浏览器上的可视化。html

须要步骤:java

  • 建立一个JupyterHub可用的Docker Image;
  • 将SuperMap iObjects Python安装到该镜像中;
  • 设置JupyterHub for K8s的配置参数;
  • 从新启动JupyterHub for K8s的服务镜像
  • 登陆到Notebook Server,便可访问相应的组件库了。

具体操做以下。python

一、下载组件

下载iObjects Java组件,iObjects Python须要该组件来执行空间计算操做。linux

wget -c http://download.supermap.com.cn/2019/SuperMap9D/9.1.1/iObjects_911_release_20190129/supermap-iobjectsjava-9.1.1-16827-70590-linux64-all-Bin.tar.gz
  • 解压后复制全部文件到JupyterHub安装的根目录下的目录resources/Bin,这是我这里的默认目录。若是想要放到其它目录,须要同时修改下面的脚本文件。
  • 同时须要相应的license文件(能够在线申请得到),如resources/supermap_any_2019.lic9d,并在Build过程放入 ./SuperMap/supermap_any_2019.lic9d,而后再复制到Docker image的/opt/SuperMap目录下。

下载libpng支持库,用于Ubuntu 18.04

iObjects Java须要用到libpng12-0_1.2.54-1ubuntu1.1_amd64.deb,可是我这个Docker镜像用的Ubuntu 18.04里没有默认安装,须要先下载下来,在Docker Build过程当中安装进去。git

准备构建脚本

完成iObjects Java组件的复制到./SuperMap、安装,调用Docker Build,完成后清除目录中的内容。参考内容以下:github

#docker build --build-arg "HTTP_PROXY=10.1.1.174:9999" --build-arg "HTTPS_PROXY=10.1.1.174:9999" -t openthings/databook .

echo ""
echo "========================================================"
echo "Prepare SuperMap iObjects Java packages ..."

mkdir -p ./SuperMap/iobjectsjava911/Bin
cp -r ../../../resources/Bin ./SuperMap/iobjectsjava911/
cp -r ../../../resources/supermap_any_2019.lic9d ./SuperMap/supermap_any_2019.lic9d

echo ""
echo "========================================================"
echo "Build docker openthings/databook ..."
docker build --build-arg "HTTP_PROXY=10.1.1.174:9999" -f Dockerfilez -t openthings/databook .

echo ""
echo "========================================================"
echo "Remove SuperMap iObjects Java packages ..."
rm -r ./SuperMap

echo ""
echo "Build openthings/databook Finished, view: docker images."
echo "========================================================"
echo ""

二、编辑Dockerfile

  • 建立一个Dockerfile,构建自定义的Notebook Server实例镜像。
    • 从JupyterHub的官方镜像衍生而来,已经内置Spark/R语言等支持能力。
  • 参考下面的内容(https://github.com/databooks/databook/)
# --------------------------------------------------------------------
# 添加 iObjects-python 软件包。
RUN pip install iobjectspy==9.1.1

# --------------------------------------------------------------------
# 获取 iObjects Java组件软件。
# wget: http://download.supermap.com.cn/2019/SuperMap9D/9.1.1/iObjects_911_release_20190129/supermap-iobjectsjava-9.1.1-16827-70590-linux64-all-Bin.tar.gz
# into SuperMap/iobjectsjava911/Bin

# 安装iObjects Java 的License文件,能够网络在线申请。
RUN mkdir -p /opt/SuperMap/License/
COPY ./SuperMap/supermap_any_2019.lic9d  /opt/SuperMap/License/

# 复制iObjects Java到Docker中。
RUN mkdir -p /opt/SuperMap/iobjects/911/Bin
COPY ./SuperMap/iobjectsjava911/Bin /opt/SuperMap/iobjects/911/Bin 

# 安装libpng支持库。
RUN chmod +x /opt/SuperMap/iobjects/911/Bin/libpng12-0_1.2.54-1ubuntu1.1_amd64.deb && \
    dpkg -i /opt/SuperMap/iobjects/911/Bin/libpng12-0_1.2.54-1ubuntu1.1_amd64.deb
  • 为何要先复制到./SuperMap目录下?docker

    • 由于Docker不能ADD/COPY非Dockerfile当前目录下的文件。ubuntu

    • 我也不想将iObjects Java存放在Dockerfile目录下。vim

    • 先复制到./SuperMap目录下,再ADD到Docker内部,而后构建完予以删除。浏览器

三、build Docker images

将上面的脚本保存为buildz.sh,改变属性为可执行 sudo chmod +x buildz.sh,而后运行之。

修改Tag(由于每次build会覆盖),使用:

Docker tag openthings/databook openthings/databook:20190708

若是须要在多个节点上使用,可使用Harbor来存储和推送。

节点少的话,在全部的节点上手工Docker save保存、而后传送过去、再Docker Load便可。

四、修改hub-config

由于JupyterHub的运行Notebook Server实例镜像Tag改变,须要进去配置。

能够经过Kubectl工具直接修改配置参数,不须要从新安装JupyterHub服务。

运行:

kubectl edit configmap/hub-config -n jupyter
  • 有时候出现乱码,安装vim便可。

  • 按i进入编辑状态,按esc+wq即保存退出。

五、使用Notebook Server

  • 必须删除jupyterHub的docker实例,才会从新启用上面的新参数。

同时删除jupyterhub和supermap-jupyter(以前的实例),等待系统从新建立实例。

从新登陆进JupyterHub的页面,每个用户名会建立相应的Notebook Server实例。

 

更多参考:

相关文章
相关标签/搜索