JupyterHub In Docker:简单示例
本文介绍如何使用 Docker 搭建最简单的 JupyterHub 服务。
示例来自 jupyter/dockerspawner 的源码。
概述
本文依照官方示例,在单个主机上搭建最简单的 JupyterHub 服务。
JupyterHub 服务运行在名为 Hub 的容器中,并为每个用户创建自己的 docker 容器。
准备
下载 jupyterhub 镜像,该镜像包含 jupyerhub 的基本组件,但不包含 notebook
docker pull jupyter/jupyterhub
下载为用户实际运行的 jupyter 镜像
docker pull jupyter/base-notebook
创建网络
为 jupyterhub 创建一个单独的 Docker 网络 jupyterhub
:
docker network create jupyterhub
构建镜像
jupyterhub 镜像使用默认的配置,想要使用 Docker 运行 jupyterhub,并且想为每个用户运行单独的 Docker 容器,需要构建自己的镜像。
镜像需要安装额外的 python 包:
- dockerspawner:使用 Docker 为用户创建 notebook
- jupyterhub-dummyauthenticator:模拟验证过程,可以输入任意用户,仅用于测试
将上述包放到 requirements.txt
文件中。
dockerspawner
jupyterhub-dummyauthenticator
另外,需要为 jupyterhub 定义配置文件 jupyter_config.py
。
# 仅用于测试,不能用于生产环境
c.JupyterHub.authenticator_class = 'dummyauthenticator.DummyAuthenticator'
# 使用 docker 加载环境
c.JupyterHub.spawner_class = 'dockerspawner.DockerSpawner'
# 监听所有的 IP 地址
c.JupyterHub.hub_ip = '0.0.0.0'
# 用于连接 hub 的主机名或IP地址,这里通常是 hub 的容器名称
c.JupyterHub.hub_connect_ip = 'jupyterhub'
# 选择一个 docker 镜像,应该与 Hub 中的 jupyterhub 版本保持一致
c.DockerSpawner.image = 'jupyter/base-notebook'
# 告诉用户容器连接 docker 网络
c.DockerSpawner.network_name = 'jupyterhub'
# 服务停止时会删除容器
c.DockerSpawner.remove = True
Dockerfile 文件如下:
FROM jupyterhub/jupyterhub:latest
COPY requirements.txt /tmp/requirements.txt
RUN python3 -m pip install --no-cache -r /tmp/requirements.txt
COPY jupyterhub_config.py /srv/jupyterhub/jupyterhub_config.py
使用如下的命令构建镜像
docker build -t hub .
启动 Hub
启动 Hub 时,我们需要:
- 在 docker 网络中运行
- 暴露 8000 端口
- 挂载主机的 docker 套接字
下面的命令在 9500 端口启动 jupyterhub
docker run --rm -it \
-v /var/run/docker.sock:/var/run/docker.sock \
--net jupyterhub \
--name jupyterhub \
-p 9500:8000 \
hub
运行
访问 http://some-ip:9500,可以看到下面这样的登录界面。
因为我们使用 DummyAuthenticator
,所以输入任意用户名和密码,都可以直接登录。
使用 windorc
用户登录后,可以进入 jupyter notebook 界面
执行 docker ps -a
命令可以看到创建了一个 jupyter-windroc
的容器。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bea93673fc33 jupyter/base-notebook "tini -g -- start-no…" About a minute ago Up 57 seconds 8888/tcp jupyter-windroc
64615720f22f hub "jupyterhub" About an hour ago Up About an hour 0.0.0.0:9500->8000/tcp jupyterhub
参考
https://github.com/jupyterhub/dockerspawner/tree/master/examples/simple