在Docker中部署JupyterNotebook/JupyterHub

2023-11-11 10:59

本文主要是介绍在Docker中部署JupyterNotebook/JupyterHub,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

发现自己已经大半年没有更新博客了,主要还是忙,我觉得还是要把博客捡起来,不论是做环境搭建的整理还是技术点的记录都是好的,这个时间还是得花。不然时间一场就都忘了。

目录

  • 写在前面
  • JupyterNotebook的搭建
    • 镜像的选择
    • 启动容器
      • 容器参数配置——密码登录
      • 容器参数配置——文件夹映射
      • 容器参数配置——Jupyer后台运行
      • 容器参数配置——SSL证书配置与反向代理
  • JupyterHub的搭建
    • 什么是JupyerHub
    • 搭建JupyerHub

写在前面

从题目中可以猜到,本篇博文会分成两个部分:

  • JupyterNotebook的搭建
  • JupyterHub的搭建

当然本次的搭建都是在Docker中完成的,在Docker中搭建环境个人认为与本地搭建有以下优势:

  • DockerHub上有全球开发者提供的现成镜像,包括一些软件开发商提供的官方镜像,可以节省我们搭建环境的时间,因为有一些莫名其妙的BUG会困扰我们数小时甚至数天。
  • 已经搭建好的镜像可以很方便地进行迁移,也就是说,如果我们到了一个新环境,不需要再重复造轮子搭建环境了。
  • 最重要的:正因为Docker搭建环境的便携性,我们可以把更多的精力花在技术本身,而不是各种个样的环境构建上。

这里简单介绍以下JupyterNotebook,我习惯性的叫它为朱比特,对应的就是爱情之神丘比特,主要还是谐音的关系。以Python为例,Jupyter是一个可交互式的编程平台,它基于iPython ,类似IDLE,但是有比原生IDLE更强大的功能,例如可以支持MarkdownLatex等语法,同时,Matplotlib等绘图库也可以inline展示,这对数据分析、机器学习、人工神经网络的调参,编程语言教学等具有重大意义。可以发现,国内外的一些Python库的教学视频,很多都是基于Jupyter的。由于我本人是从事大数据的,因此也打算在进行数据分析时,从原来的PyCharm切换到Jupyter。

JupyterNotebook的搭建

在Docker中搭建JupyterNotebook的过程很简单,一共分为两步

  • 选取并拉取镜像
  • 容器参数设置与启动容器

镜像的选择

在官方的Docker镜像选择文档中,提供了一系列镜像,它们分别对应于不同的需求。

  • jupyter/base-notebook
  • jupyter/minimal-notebook
  • jupyter/r-notebook
  • jupyter/scipy-notebook
  • jupyter/tensorflow-notebook
  • jupyter/datascience-notebook
  • jupyter/pyspark-notebook
  • jupyter/all-spark-notebook

其中jupyter/base-notebook是所有镜像的基础。
根据需求选择好镜像后,就可以pull镜像了,例如选择了jupyter/datascience-notebook,则在终端中执行以下命令:

$ docker pull jupyter/datascience-notebook

启动容器

你可以直接使用docker run来启动容器,即按照官方文档中最简单的启动方法

docker run -p 8888:8888 jupyter/scipy-notebook:latest

利用这种方式启动容器时,Jupyter会运行在8888端口上,同时,所有的操作都是一次性的,也就是说,不会持久化到磁盘,在容器被关闭后,都会被删除。

这里介绍一些常用的参数配置

  • 密码登录
  • 文件夹映射
  • Jupyer后台运行
  • SSL证书配置与反向代理

容器参数配置——密码登录

默认情况下,Jupyter是不需要密码的,自己用还行,要是想在云服务器上搭建,就会产生安全问题。

Juyter使用的是sha1加密算法,虽然都是sha1,但是我们不能将明文用python自带的hashlib库进行加密后直接使用,要使用Jupyer自带的命令进行生成。

具体可以参考如下做法:

1、 使用最朴素的方式启动一个临时Jupyer容器
2、从网页打开Jupyer,并新建一个笔记本。或者以交互模式进入容器,打开Python的原生交互界面。这里以后者为例。
3、依次运行以下代码:

from notebook.auth import passwd
passwd()

输入密码和确认密码后,你会得到一个以sha1开头的字符串,类似

sha1:67c9e60bb8bxxxxxxaed

将整个字符串复制,包括``sha1`这个前缀。

然后,运行容器时,加上--NotebookApp.password参数即可。

$ docker run -d -p 8888:8888 jupyter/base-notebook start-notebook.sh --NotebookApp.password='sha1:74ba40f8xxxxxe'

启动服务后,在浏览器端会显示这样的效果:
在这里插入图片描述

容器参数配置——文件夹映射

前面我们所有的操作都是临时的,在容器被关闭后,所有的数据都会丢失,因此,在一般情况下,有必要将数据持久化。Docker自带这样的功能,也就是才启动容器时,增加参数-v。在Jupyer中,我们要将外部文件夹映射到/home/jovyan/work

以下是命令示例:

$ docker run -p 10000:8888 -v /your/local/folder:/home/jovyan/work jupyter/r-notebook

容器参数配置——Jupyer后台运行

直接在容器启动时加参数`-d``即可。
以下是命令时例:

docker run -d -p 8888:8888 jupyter/scipy-notebook:latest

容器参数配置——SSL证书配置与反向代理

默认情况下,Jupyer使用http,但是现在主流是https,Jupyer官方也建议使用https。这对本地来说无关紧要,对于部署在外网环境的,还是建议使用https。
JupyerNotebook Docker官方镜像也提供了设置https的方法。
我们从运营商申请到SSL证书时候,会有多种格式,这里我们选择Apache的就可以了。
在部署时,我们值需要.key.crt文件,并且将原文件重命名为notebook.keynotebook.crt。首先要先将证书所在的文件夹映射至容器中,这里是/etc/ssl/notebook

⚠️:Docker可以支持多个文件夹的映射,即多个-v参数,所以这里的映射与之前持久化的映射并不冲突。

然后运行以下命令:

docker run -d -p 8888:8888 \-v /some/host/folder:/etc/ssl/notebook \jupyter/base-notebook start-notebook.sh \--NotebookApp.keyfile=/etc/ssl/notebook/notebook.key--NotebookApp.certfile=/etc/ssl/notebook/notebook.crt

容器成功运行后,8888端口就不再提供http服务,而是https服务。

最后,简单说一下反向代理问题,现在主流的服务器,例如Apache、Nginx都有反向代理功能,Apache的可以参考我的博客:

  • Apache设置https反向代理
  • 使用Apache的虚拟主机以及代理搞定多个网站的子域名(包括跨域情况)解析问题->其实这就是http反向代理

如果不是Apache,Jupyer官方也提供了相关指南
设置好网站的反向代理后,需要注意的是Jupyter是用Socket来与Kernel进行通信的,所以还要开启服务器软件的Socket反向代理功能。 在这里,http情况下对应的是ws,https对应的是wss。这些在上面提及的官方指南中也有说明。

JupyterHub的搭建

本节,首先介绍一下什么是JupyterHub,以及它与JupyterNotebook的关系,然后简单介绍一下搭建过程。

什么是JupyerHub

JupyerHub是一个多用户的JupyerNotebook管理器。默认情况下,JupyerNotebook是不支持多用户使用的。而JupyterHub刚好弥补了这一缺点。在Docker中,JupyterHub更像一个守卫,首先,你要通过身份验证,然后,通过一个叫Spawn的机制为每一个通过验证的用户生成一个新的Docker容器,这样就可以多用户使用JupyterNotebook了。

同时,JupyerHub还支持文件夹共享,这个对于多用户协作来说是刚需,而这是普通JupyerNotebook做不到的。

搭建JupyerHub

这里推荐一篇文章,讲得很仔细,我参照他说的做,一次成功,也推荐给大家。我就不赘述了,避免重复造轮子。
使用Docker安装多用户版的JupyterHub

这篇关于在Docker中部署JupyterNotebook/JupyterHub的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/389573

相关文章

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

k8s部署MongDB全过程

《k8s部署MongDB全过程》文章介绍了如何在Kubernetes集群中部署MongoDB,包括环境准备、创建Secret、创建服务和Deployment,并通过Robo3T工具测试连接... 目录一、环境准备1.1 环境说明1.2 创建 namespace1.3 创建mongdb账号/密码二、创建Sec

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

Python项目打包部署到服务器的实现

《Python项目打包部署到服务器的实现》本文主要介绍了PyCharm和Ubuntu服务器部署Python项目,包括打包、上传、安装和设置自启动服务的步骤,具有一定的参考价值,感兴趣的可以了解一下... 目录一、准备工作二、项目打包三、部署到服务器四、设置服务自启动一、准备工作开发环境:本文以PyChar

centos7基于keepalived+nginx部署k8s1.26.0高可用集群

《centos7基于keepalived+nginx部署k8s1.26.0高可用集群》Kubernetes是一个开源的容器编排平台,用于自动化地部署、扩展和管理容器化应用程序,在生产环境中,为了确保集... 目录一、初始化(所有节点都执行)二、安装containerd(所有节点都执行)三、安装docker-

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

更改docker默认数据目录的方法步骤

《更改docker默认数据目录的方法步骤》本文主要介绍了更改docker默认数据目录的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1.查看docker是否存在并停止该服务2.挂载镜像并安装rsync便于备份3.取消挂载备份和迁

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke

如何在一台服务器上使用docker运行kafka集群

《如何在一台服务器上使用docker运行kafka集群》文章详细介绍了如何在一台服务器上使用Docker运行Kafka集群,包括拉取镜像、创建网络、启动Kafka容器、检查运行状态、编写启动和关闭脚本... 目录1.拉取镜像2.创建集群之间通信的网络3.将zookeeper加入到网络中4.启动kafka集群