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

原创
2019/07/09 10:37
阅读数 499

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

需要步骤:

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

具体操作如下。

1、下载组件

下载iObjects Java组件,iObjects Python需要该组件来执行空间计算操作。

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过程中安装进去。

准备构建脚本

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

#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 ""

2、编辑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不能ADD/COPY非Dockerfile当前目录下的文件。

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

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

3、build Docker images

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

修改Tag(因为每次build会覆盖),使用:

Docker tag openthings/databook openthings/databook:20190708

如果需要在多个节点上使用,可以使用Harbor来存储和推送。

节点少的话,在所有的节点上手工Docker save保存、然后传送过去、再Docker Load即可。

4、修改hub-config

因为JupyterHub的运行Notebook Server实例镜像Tag改变,需要进去配置。

可以通过Kubectl工具直接修改配置参数,不需要重新安装JupyterHub服务。

运行:

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

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

5、使用Notebook Server

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

同时删除jupyterhub和supermap-jupyter(之前的实例),等待系统重新创建实例。

重新登录进JupyterHub的页面,每一个用户名会创建相应的Notebook Server实例。

 

更多参考:

展开阅读全文
打赏
0
0 收藏
分享
加载中
openthings博主
如果需要使用机器学习功能,还需要安装imageio、opencv-python、crfpy、Tensorflow1.8,以及训练好的模型文件。
2019/08/12 09:57
回复
举报
更多评论
打赏
1 评论
0 收藏
0
分享
返回顶部
顶部