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的多窗口风格页面。

相关文章
相关标签/搜索