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實例。

 

更多參考:

相關文章
相關標籤/搜索