使用 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 文件,repo2dockerpip install 指定的包到要构建的 Docker 镜像中。

有关更多详细信息,请参阅 repo2docker 的文档

下面我们将介绍如何使用 repo2docker 生成 Docker 镜像以及如何配置 JupyterHub 以基于此镜像构建。

  1. 下载并启动 Docker。

    您可以通过 下载和安装 Docker 来完成此操作。启动 Docker 后,它将显示为一个微小的后台应用程序。

  2. 使用 pip **安装 repo2docker**

    pip install jupyter-repo2docker
    

    如果该命令由于权限不足而失败,请尝试使用命令选项 user

    pip install --user jupyter-repo2docker
    
  3. 创建(或找到)您要使用的 Git 仓库。

    此仓库应包含您希望用户能够使用的所有材料。您可能希望包含一个 pip requirements.txt 文件 来列出要安装的包(每个文件一行),例如使用 pip install 时。明确指定版本,以便镜像完全可重现。以下是一个示例 requirements.txt

    jupyterhub==0.9.4
    numpy==1.14.3
    scipy==1.1.0
    matplotlib==2.2.2
    
  4. 获取 Docker 仓库的凭据。

    您为 JupyterHub 构建的镜像必须通过发布到某个容器注册表来使其可用。例如,您可以使用 quay.ioDocker 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
      
  5. 使用 repo2docker 构建 Docker 镜像。

    jupyter-repo2docker \
        --no-run \
        --user-name=jovyan \
        --image=<your-image-reference> \
        <a-git-repository-url>
    

    这告诉 repo2docker 获取 Git 仓库的默认分支,并使用启发式方法构建其 Docker 镜像。

  6. 将新构建的 Docker 镜像推送到您的仓库。

    docker push <your-image-reference>
    
  7. **编辑 JupyterHub 配置以从此镜像构建。** 编辑 config.yaml 文件,在其中包含以下几行

    singleuser:
      image:
        name: <your-image-reference>
        tag: "<tag>"
    

    如果标签是 SHA 的前几个字符,并且它们恰好都是数字,则您 *必须* 在标签周围使用引号,如上所示,以便 YAML 正确解析。

  8. 告诉 helm 更新 JupyterHub 以使用此配置。

    使用标准方法 应用更改 到配置。

  9. 如果您已经登录,请重启您的服务器。

    如果您已经有一个正在运行的 JupyterHub 服务器,您需要从 JupyterHub 控制面板重启它。在 JupyterLab 中,查看名为“Hub”的菜单。新用户无需执行此操作。

    注意

    如果您启用了 持久存储,您的 GitHub 仓库内容可能不会显示。如果您想显示 Git 仓库内容,请禁用持久存储。

  10. 享受您的新计算环境!

    您现在应该拥有一个基于我们创建的 Docker 镜像构建的实时计算环境。