栏目头部广告

Jupyter Notebook工具介绍

一、Jupyter Notebook介绍

Jupyter Notebook是一个开源的Web应用程序,允许用户创建和共享包含代码、方程式、可视化和文本的文档。它的用途包括:数据清理和转换、数值模拟、统计建模、数据可视化、机器学习等等。它具有以下优势:

(1)可选择语言:支持超过40种编程语言,包括Python、R、Julia、Scala等。
(2)分享笔记本:可以使用电子邮件、Dropbox、GitHub和Jupyter Notebook Viewer与他人共享。
(3)交互式输出:代码可以生成丰富的交互式输出,包括HTML、图像、视频、LaTeX等等。
(4)大数据整合:通过Python、R、Scala编程语言使用Apache Spark等大数据框架工具。支持使用pandas、scikit-learn、ggplot2、TensorFlow来探索同一份数据。

JupyterNotebook容器镜像地址:https://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html

# 针对不同需求与场景,官方提供了多种镜像版本
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

下图描述了核心镜像的构建依赖树。(即,FROM他们的 Dockerfiles 中的语句)。任何给定的图像都会继承指向它的所有祖先图像的完整内容。

Jupyter Notebook工具介绍(图1)

Jupyter Notebook docs:https://jupyter-notebook.readthedocs.io/en/stable/public_server.html

二、Jupyter Notebook容器化部署

2.1 Pull镜像

[root@blogs-v2 ~]# docker pull jupyter/all-spark-notebook

2.2 运行容器

[root@blogs-v2 ~]# mkdir -p /data/Jupyter/UStarGao/
[root@blogs-v2 ~]# chmod 777 /data/Jupyter/UStarGao/
[root@blogs-v2 ~]# docker run -d -p 8888:8888 -v /data/Jupyter/UStarGao/:/home/jovyan/ --restart=always --name=UStarGao  jupyter/all-spark-notebook

[root@blogs-v2 ~]# docker ps
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                    NAMES
7862100e11f7        jupyter/all-spark-notebook   "tini -g -- start-..."   3 seconds ago       Up 2 seconds        0.0.0.0:8888->8888/tcp   UStarGao

2.3 密码配置

[root@blogs-v2 ~]# docker exec -it UStarGao bash
jovyan@7862100e11f7:~$ jupyter notebook password
Enter password: 
Verify password: 
[NotebookPasswordApp] Wrote hashed password to /home/jovyan/.jupyter/jupyter_notebook_config.json

# 获取token重置密码
jovyan@7862100e11f7:~$ jupyter notebook list
Currently running servers:
http://0.0.0.0:8888/?token=47a91a9bccfbb7cc428a67258c1a7e4704b5e675de2c963f :: /home/jovyan

2.4 Nginx HTTPS解决方案

(1)配置SSL证书

[root@ansible ~]# vim /etc/nginx/conf.d/jupyter.starcto.com.conf 
server {
    listen 80;
    listen [::]:80;
    server_name jupyter.starcto.com;
    rewrite ^ https://$http_host$request_uri? permanent;
}

server {
    listen       443 ssl http2 default_server;
    listen       [::]:443 ssl http2 default_server;
    server_name  jupyter.starcto.com;

    ssl_certificate "/data/ssl/jupyter.starcto.com/public.pem";
    ssl_certificate_key "/data/ssl/jupyter.starcto.com/private.key";
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    location / {
    proxy_pass        http://10.25.203.134:8888;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
}

(2)多SSL证书配置要求

Nginx支持TLS协议的SNI扩展(Server Name Indication,简单地说这个扩展使得在同一个IP上可以以不同的证书serv不同的域名)。不过,SNI扩展还必须有客户端的支持,另外本地的OpenSSL必须支持它。 如果启用了SSL支持,nginx便会自动识别OpenSSL并启用SNI。是否启用SNI支持,是在编译时由当时的 ssl.h 决定的(SSL_CTRL_SET_TLSEXT_HOSTNAME),如果编译时使用的OpenSSL库支持SNI,则目标系统的OpenSSL库只要支持它就可以正常使用SNI了。 nginx在默认情况下是TLS SNI support disabled。 

[root@ansible ~]# nginx -V
nginx version: nginx/1.20.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
built with OpenSSL 1.1.1g FIPS  21 Apr 2020
TLS SNI support enabled

(3)修改主配置文件

[root@ansible ~]# vim /etc/nginx/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    include /etc/nginx/conf.d/*.conf;
    
    # 80跳转443
    server {
        listen 80;
        listen [::]:80;
        server_name img.starcto.com;
        rewrite ^ https://$http_host$request_uri? permanent;
    }
    
    # https证书配置
    server {
        listen       443 ssl http2 ;
        listen       [::]:443 ssl http2;
        server_name  img.starcto.com;

        ssl_certificate "/data/ssl/img.starcto.com/public.pem";
        ssl_certificate_key "/data/ssl/img.starcto.com/private.key";
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;

        location / {
        proxy_pass        http://10.25.203.134:9001;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }   
     }
}

2.5 WEB 访问测试

https://jupyter.starcto.com/

Jupyter Notebook工具介绍(图2)

【注】输入秘钥即可登录到Jupyter主页面。

Jupyter Notebook工具介绍(图3)

三、JupyterHub解决方案

3.1 JupyterHub介绍

JupyerHub是一个多用户的JupyerNotebook管理器。默认情况下,JupyerNotebook是不支持多用户使用的。而JupyterHub刚好弥补了这一缺点。在Docker中,JupyterHub更像一个守卫,首先,你要通过身份验证,然后,通过一个叫Spawn的机制为每一个通过验证的用户生成一个新的Docker容器,这样就可以多用户使用JupyterNotebook了。同时,JupyerHub还支持文件夹共享,这个对于多用户协作来说是刚需,而这是普通JupyerNotebook做不到的。

JupyterHub官网地址:https://jupyterhub.readthedocs.io/en/stable/index.html

3.2 JupyterHub容器化部署

推荐参考教程:https://www.biaodianfu.com/docker-jupyterhub.html

作者:UStarGao
链接:https://www.starcto.com/open-sourcing/213.html
来源:STARCTO
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处

UCloud云平台推荐


UCloud新用户专属注册连接

UCloud CDN超值特惠专场

UCloud全球云主机(UHost/VPS)大促页面

UCloud快杰云主机大促页面

文章页广告

随便看看

栏目底部广告
`