JupyterHub容器鏡像自定義方法與步驟

IPython、JupyterHub、JupyterLab是用於大數據分析和機器學習的流行的環境,JupyterHub能夠運行於Kubernetes集羣環境中,從而供多人同時使用,支持動態伸縮。node

雖然登陸後能夠經過pip和conda安裝軟件包,可是服務重啓或者pod漂移後將會被從新初始化,所安裝的軟件和配置參數、使用狀態都會丟失。git

按照Kubernetes的原則,pod在運行過程當中應該是固定的,以便於複製、伸縮和遷移,全部的動態數據應該保留到網絡中的共享存儲之中。所以,咱們能夠將全部的軟件預先安裝在容器中,而後部署鏡像到集羣中便可。github

下面介紹JupyterHub容器鏡像的自定義方法與步驟。docker

一、準備文件

建立Dockerfile

建立一個目錄(或首先建立一個git項目)。而後編輯一個 Dockerfile 文件用於後續的Docker容器鏡像構建。shell

# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.
FROM jupyter/all-spark-notebook:5811dcb711ba

LABEL maintainer="Databook Project,https://github.com/databooks<openthings@163.com>"

USER root

# ====================================================================
# Add proxy, using --build-arg "HTTP_PROXY=http://192.168.199.99:9999"

ENV HTTP_PROXY ${HTTP_PROXY}
ENV HTTPS_PROXY ${HTTP_PROXY}
ENV http_proxy ${HTTP_PROXY}
ENV https_proxy ${HTTP_PROXY}

ENV SLUGIFY_USES_TEXT_UNIDECODE=yes

#Add conda install mirror:

RUN echo $http_proxy && \
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ && \
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ && \
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ && \
    conda config --set show_channel_urls yes

#Add pip install mirror:

RUN echo "[global] \
index-url = http://pypi.tuna.tsinghua/simple \
trusted-host = \
    pypi.tuna.tsinghua \
timeout = 120 \
" > /etc/pip.conf
# ====================================================================

# ====================================================================
USER $NB_UID

RUN pip install --upgrade pip 
RUN pip install bs4 && \
    pip install lxml && \
    pip install py4j && \
    pip install pyspark && \
    pip install tushare

RUN conda install -y nodejs scikit-image matplotlab ipyleaflet
RUN conda install -y tensorflow apache-airflow mlflow
RUN conda install -y pytorch torchvision cudatoolkit=10.0 -c pytorch

RUN conda update --all
RUN conda install jupyterlab=0.34.12

RUN jupyter labextension install @jupyter-widgets/jupyterlab-manager
RUN jupyter labextension install jupyter-leaflet
RUN jupyter labextension upgrade --all
RUN jupyter lab build

# ====================================================================
ENV HTTP_PROXY ""
ENV HTTPS_PROXY ""
ENV http_proxy ""
ENV https_proxy ""
# ====================================================================

注意事項:apache

  • 更新jupyterhub的版本。
  • 重構jupyter的版本。
  • 安裝指定的jupyterlab版本。

建立編譯腳本文件

建立一個shell腳本文件,能夠快速重複執行容器鏡像的構建操做。瀏覽器

docker build --build-arg "HTTP_PROXY=http://192.168.199.99:9999" -t openthings/databook .

使用DockerHub構建

將上述文件放到github.com的項目中,就能夠在hub.docker.com啓動自動構建工做(比本地構建更快)。而後將鏡像拉取到本地便可,也能夠推送到阿里雲/AWS等的鏡像服務中,再拉取或者直接使用。網絡

參考文件:

二、編譯鏡像

執行腳本,將獲得所構建的鏡像,名爲openthings/databook:latest。機器學習

爲了正常下載所須要的軟件包,能夠指定proxy參數,以下:學習

docker build --build-arg "HTTP_PROXY=http://192.168.199.99:9999" -t openthings/databook .

三、分發容器鏡像到節點

爲了在集羣中全部節點都可以運行JupyterHub服務容器,須要將鏡像部署到全部的節點。有幾種方法:

  • 各節點從dockerhub或aliyun/aws的鏡像服務直接拉取。若是是在局域網環境,將會帶來較大的網絡流量,速度較慢。
  • 上傳到本地的Registry服務(如Harbor/Nexus)拉取,而後各節點從其上拉取容器鏡像。
  • 若是沒有本地鏡像服務,也能夠直接上傳到各個節點。
    • 導出鏡像:docker save  openthings/databook -o databook.tar
    • 複製鏡像:scp databook.tar user@node0:~/databook.tar
    • 導入鏡像:到目標節點,執行 docker load  -i databook.tar

下一步,部署(或更新)Kubernetes集羣中的JupyterHub服務。

四、部署JupyterHub服務

首先修改helm chart目錄 deploy-k8s 的values.yaml文件,將鏡像地址改成openthings/databook:lates,而後使用helm來部署JupyterHub的chart。

安裝:

helm install ./deploy-k8s --version=v0.6 --name=databook --namespace=databook

刪除:

helm del --purge databook

更新:

helm upgrade databook ./deploy-k8s

更多參考:

五、啓動JupyterHub應用

到Kubernetes Dashboard,查看命名空間jupyter的service的IP地址,而後到瀏覽器輸入。缺省頁面爲notebook,將地址後面改成lab,便可進入Jupyterlab的多窗口風格頁面。

相關文章
相關標籤/搜索