IPython、JupyterHub、JupyterLab是用于大数据分析和机器学习的流行的环境,JupyterHub能够运行于Kubernetes集群环境中,从而供多人同时使用,支持动态伸缩。node
虽然登陆后能够经过pip和conda安装软件包,可是服务重启或者pod漂移后将会被从新初始化,所安装的软件和配置参数、使用状态都会丢失。git
按照Kubernetes的原则,pod在运行过程当中应该是固定的,以便于复制、伸缩和迁移,全部的动态数据应该保留到网络中的共享存储之中。所以,咱们能够将全部的软件预先安装在容器中,而后部署镜像到集群中便可。github
下面介绍JupyterHub容器镜像的自定义方法与步骤。docker
建立一个目录(或首先建立一个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
建立一个shell脚本文件,能够快速重复执行容器镜像的构建操做。浏览器
docker build --build-arg "HTTP_PROXY=http://192.168.199.99:9999" -t openthings/databook .
将上述文件放到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服务容器,须要将镜像部署到全部的节点。有几种方法:
下一步,部署(或更新)Kubernetes集群中的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
更多参考:
到Kubernetes Dashboard,查看命名空间jupyter的service的IP地址,而后到浏览器输入。缺省页面为notebook,将地址后面改成lab,便可进入Jupyterlab的多窗口风格页面。