使用 repo2docker
构建 Docker 镜像#
注意
以这种方式使用的 Docker 镜像必须具有与 Helm 图表匹配版本的 jupyterhub
包。本文档适用于 Helm 图表 3.3.7-0.dev.git.71.h71ecf69,它使用 JupyterHub 版本 4.1.5。
如果您找不到满足您需求的预先存在的镜像,您可以创建自己的镜像。一种简单的方法是使用 repo2docker 包。
repo2docker 允许您快速将 Git 仓库转换为 Docker 镜像,该镜像可用作 JupyterHub 实例的基础。Git 仓库中的任何内容都将在用户访问您的 JupyterHub 时存在于用户的环境中。
repo2docker
将尝试找出应该预先安装的内容,您可以通过向仓库添加各种配置文件来帮助它。例如,如果您在仓库的根级别包含一个 requirements.txt
文件,repo2docker
将 pip install
指定的包到要构建的 Docker 镜像中。
有关更多详细信息,请参阅 repo2docker 的文档。
下面我们将介绍如何使用 repo2docker
生成 Docker 镜像以及如何配置 JupyterHub 以基于此镜像构建。
下载并启动 Docker。
您可以通过 下载和安装 Docker 来完成此操作。启动 Docker 后,它将显示为一个微小的后台应用程序。
使用
pip
**安装 repo2docker**pip install jupyter-repo2docker
如果该命令由于权限不足而失败,请尝试使用命令选项
user
pip install --user jupyter-repo2docker
创建(或找到)您要使用的 Git 仓库。
此仓库应包含您希望用户能够使用的所有材料。您可能希望包含一个 pip
requirements.txt
文件 来列出要安装的包(每个文件一行),例如使用pip install
时。明确指定版本,以便镜像完全可重现。以下是一个示例requirements.txt
jupyterhub==0.9.4 numpy==1.14.3 scipy==1.1.0 matplotlib==2.2.2
获取 Docker 仓库的凭据。
您为 JupyterHub 构建的镜像必须通过发布到某个容器注册表来使其可用。例如,您可以使用 quay.io 或 Docker Hub。
在下一步中,您需要一个镜像引用,以便您和其他人可以找到您的镜像。
Docker Hub 上的镜像引用
<dockerhub-username>/<image-name>:<image-tag>
quay.io 上的镜像引用
quay.io/<quay-username>/<image-name>:<image-tag>
您的镜像名称可以是任何您记得的名称。
我们建议使用 Git 提交中 SHA 的前 7 个字符,因为这可以提高可重现性。您可以通过多种方式获得这些字符,其中一种方法如下
git ls-remote <your-git-repository> | grep HEAD | awk '{ print $1 }' | cut -c -7
使用 repo2docker 构建 Docker 镜像。
jupyter-repo2docker \ --no-run \ --user-name=jovyan \ --image=<your-image-reference> \ <a-git-repository-url>
这告诉
repo2docker
获取 Git 仓库的默认分支,并使用启发式方法构建其 Docker 镜像。将新构建的 Docker 镜像推送到您的仓库。
docker push <your-image-reference>
**编辑 JupyterHub 配置以从此镜像构建。** 编辑
config.yaml
文件,在其中包含以下几行singleuser: image: name: <your-image-reference> tag: "<tag>"
如果标签是 SHA 的前几个字符,并且它们恰好都是数字,则您 *必须* 在标签周围使用引号,如上所示,以便 YAML 正确解析。
告诉 helm 更新 JupyterHub 以使用此配置。
使用标准方法 应用更改 到配置。
如果您已经登录,请重启您的服务器。
如果您已经有一个正在运行的 JupyterHub 服务器,您需要从 JupyterHub 控制面板重启它。在 JupyterLab 中,查看名为“Hub”的菜单。新用户无需执行此操作。
注意
如果您启用了 持久存储,您的 GitHub 仓库内容可能不会显示。如果您想显示 Git 仓库内容,请禁用持久存储。
享受您的新计算环境!
您现在应该拥有一个基于我们创建的 Docker 镜像构建的实时计算环境。