JupyterHub容器镜像自定义方法与步骤

IPython、JupyterHub、JupyterLab是用于大数据分析和机器学习的流行的环境,JupyterHub可以运行于Kubernetes集群环境中,从而供多人同时使用,支持动态伸缩。

虽然登录后可以通过pip和conda安装软件包,但是服务重启或者pod漂移后将会被重新初始化,所安装的软件和配置参数、使用状态都会丢失。

按照Kubernetes的原则,pod在运行过程中应该是固定的,以便于复制、伸缩和迁移,所有的动态数据应该保留到网络中的共享存储之中。因此,我们可以将所有的软件预先安装在容器中,然后部署镜像到集群中即可。

下面介绍JupyterHub容器镜像的自定义方法与步骤。

1、准备文件

创建Dockerfile

创建一个目录(或首先创建一个git项目)。然后编辑一个 Dockerfile 文件用于后续的Docker容器镜像构建。

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

注意事项:

  • 更新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等的镜像服务中,再拉取或者直接使用。

参考文件:

2、编译镜像

执行脚本,将得到所构建的镜像,名为openthings/databook:latest。

为了正常下载所需要的软件包,可以指定proxy参数,如下:

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

3、分发容器镜像到节点

为了在集群中所有节点都能够运行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服务。

4、部署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

更多参考:

5、启动JupyterHub应用

到Kubernetes Dashboard,查看命名空间jupyter的service的IP地址,然后到浏览器输入。缺省页面为notebook,将地址后面改为lab,即可进入Jupyterlab的多窗口风格页面。

d7d3488a3e9b946ab1608949eefba0df7ce.jpg

 

转载于:https://my.oschina.net/u/2306127/blog/3021460

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值