dockerspawner, 在 Docker 容器中,生成JupyterHub单用户服务器

分享于 

7分钟阅读

GitHub

  繁體
Spawns JupyterHub user servers in Docker containers
  • 源代码名称:dockerspawner
  • 源代码网址:http://www.github.com/jupyterhub/dockerspawner
  • dockerspawner源代码文档
  • dockerspawner源代码下载
  • Git URL:
    git://www.github.com/jupyterhub/dockerspawner.git
    Git Clone代码到本地:
    git clone http://www.github.com/jupyterhub/dockerspawner
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/jupyterhub/dockerspawner
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    DockerSpawner

    DockerSpawner使JupyterHub能够在Docker容器中构建单用户notebook服务器。

    先决条件

    JupyterHub 0.7或更高版本是必需的,这也意味着需要Python 3.3或更高版本。

    安装

    将dockerspawner安装到系统:

    pip install dockerspawner

    配置

    选择spawner

    spawners有两种基本类型可用:

    DockerSpawner:如果你想动态地生成单用户笔记本服务器,非常有用,它需要经过身份验证的用户,并在Docker容器中为用户生成一个notebook服务器。

    systemUserSpawner:如果你想要生成与系统用户相对应的单用户notebook服务器,那么它非常有用。

    在大多数情况下,我们建议使用DockerSpawner,你可能希望使用SystemUserSpawner的用例是:

    • 你正使用Docker进行环境管理,但是运行在用户已经有帐户和文件,他们应该可以在容器内访问的系统上,例如,你希望使用系统中已存在的系统用户和用户主目录
    • 你使用的外部服务(如nbgrader )依赖于不同的unix用户所有权和权限

    如果这两种情况都不适用,DockerSpawner可能是正确的选择。

    DockerSpawner

    告诉JupyterHub通过将以下行添加到jupyterhub_config.py

     c.JupyterHub.spawner_class ='dockerspawner.DockerSpawner'

    examples/oauth中有一个完整的示例,使用GitHub OAuth对用户进行身份验证,并使用Docker生成容器。

    SystemUserSpawner

    如果想为与系统用户相对应的用户生成笔记本服务器,你可以使用SystemUserSpawner,将以下内容添加到jupyterhub_config.py

     c.JupyterHub.spawner_class ='dockerspawner.SystemUserSpawner'

    SystemUserSpawner还需要知道用户主目录在主机上的位置,默认情况下,它期望它们在/home/<username>中,但如果想更改它,你需要进一步修改jupyterhub_config.py,例如,以下命令将在/volumes/user/<username>的主机系统上查找用户的主目录:

     c.SystemUserSpawner.host_homedir_format_string ='/volumes/user/{username}'

    有关如何使用SystemUserSpawner的完整示例,请参见compmodels jupyterhub存储库(此外,它还在一个Docker容器中运行JupyterHub服务器,并使用GitHub OAuth对用户进行身份验证)。

    使用Docker Swarm(不是swarm模式)!

    注意:这是旧的Docker Swarm,它使一个Swarm看起来像一个Docker实例,

    DockerSpawnerSystemUserSpawnerDocker Swarm的集群中使用多个系统节点时都与JupyterHub兼容,只需将0.0.0.0添加到jupyterhub_config.py文件中,作为host_ip

    c.DockerSpawner.host_ip ="0.0.0.0"

    这将配置DockerSpawner和SystemUserSpawner,使用docker port命令获取容器IP地址。

    数据持久性和DockerSpawner

    DockerSpawner中,用户的主目录在默认情况下不是持久的,所以某些配置需要这样做,除非目录将用于临时部署或演示。

    持久化到主机文件系统的最简单的版本是隔离文件系统中的用户,但将所有由"实际"用户拥有的东西留给DockerSpawner。也就是说,使用Docker挂载来隔离用户文件,而不是主机上的所有权或权限。

    DockerSpawner在jupyterhub_config.py中的卷映射是持久性的必需配置,要将卷从主机文件(称为客人)%目录映射到容器文件客户端目录挂载点,请将c.DockerSpawner.volumes挂载点设置为。

    如果在主机或来宾文件{username}目录路径中使用,则需要进行用户名替换,{username}将替换为当前名称。

    注意:jupyter docker-stacks Notebook images将Notebook服务器作为用户jovyan

    # Explicitly set notebook directory because we'll be mounting a host volume to# it. Most jupyter/docker-stacks *-notebook images run the Notebook server as# user `jovyan`, and set the notebook directory to `/home/jovyan/work`.# We follow the same convention.notebook_dir = os.environ.get('DOCKER_NOTEBOOK_DIR') or'/home/jovyan/work'c.DockerSpawner.notebook_dir = notebook_dir# Mount the real user's Docker volume on the host to the notebook user's# notebook directory in the containerc.DockerSpawner.volumes = { 'jupyterhub-user-{username}': notebook_dir }

    repo包含保持notebook目录的部署;有关示例配置,请参见它。

    有关数据持久性的更多信息,请参见Docker有关数据卷的文档。

    内存限制

    如果有jupyterhub >= 0.7,可以轻松地为每个用户的容器设置内存限制。

    
    c.Spawner.mem_limit = '2G'
    
    
    
    

    值可以是整数(字节),也可以是前缀为"K"、"M"、"G"或"T"的字符串。

    构建Docker镜像

    只要镜像中JupyterHub的版本匹配,并且鼓励使用任何现有的JupyterHub堆栈,JupyterHub都可以与JupyterHub一起使用,并且可以将其作为首选镜像。只要镜像中JupyterHub的版本匹配,并且鼓励使用任何现有的JupyterHub堆栈,JupyterHub都可以与JupyterHub一起使用,并且可以将其作为首选镜像。

    c.DockerSpawner.image ='jupyter/scipy-notebook:8f56e3c47fec'

    Server  DOC  USE  用户  Docker  spa  
    相关文章