docker部署nginx+jupyter

docker部署nginx+jupyter

Jupyter 是一个开源的交互式计算环境,它可以让用户创建和共享包含代码、可视化和说明文本的文档,通常被称为笔记本。Jupyter 的名称来源于三种核心编程语言:Julia、Python 和 R,这三种语言是 Jupyter 最初支持的。现在,Jupyter 也支持其他编程语言和工具。

Jupyter 的核心组件包括:

  • Jupyter Notebook: 这是 Jupyter 最为人熟知的部分,它是一个基于 Web 的应用程序,允许用户创建和共享包含实时代码、可视化和文本说明的笔记本文档。用户可以在笔记本中运行代码块,并查看代码执行结果、图表、文本输出等。

  • Jupyter Kernel: 内核是 Jupyter 与不同编程语言进行交互的后端程序。Jupyter 支持多种编程语言的内核,包括 Python、R、Julia、Java 等,这使得用户可以在同一个 Jupyter 环境中使用不同的编程语言进行交互式计算。

  • JupyterLab: JupyterLab 是一个扩展了 Jupyter Notebook 的下一代 Web 用户界面,提供了更强大的交互式开发环境,支持文件浏览、交互式窗口、文本编辑器、终端等功能。

Jupyter 被广泛应用于数据分析、机器学习、科学计算、教育等领域,它的交互式特性使得用户可以方便地探索数据、编写实验性代码、展示研究成果等。通过 Jupyter Notebook 的分享功能,用户可以将自己的工作以交互式的方式分享给他人,这对于教学和合作研究非常有用。

1.安装docker

1
2
3
4
5
6
7
8
9
10
11
12
13
14
yum -y install yum-utils device-mapper-persistent-data lvm2 gcc
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum -y install docker-ce
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://hxqazmaw.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl start docker
systemctl enable docker
systemctl status docker

2.拉取nginx、jupyter镜像

1
2
docker pull nginx:latest
docker pull jupyter/scipy-notebook:latest

3.创建相关目录

1
2
3
4
5
mkdir -p /opt/nginx/www
mkdir -p /opt/nginx/conf/conf.d
mkdir -p /opt/nginx/ssl
mkdir -p /opt/notebook
chmod 777 /opt/notebook

4.创建nginx反向代理配置

!!!需配置websocket,否则内核无法连接!!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
cat > /opt/nginx/conf/conf.d/default.conf <<EOF
server {
listen 443 ssl;
server_name zzz.curtain-z.cn;
ssl_certificate /etc/nginx/ssl/zzz.curtain-z.cn_bundle.crt;
ssl_certificate_key /etc/nginx/ssl/zzz.curtain-z.cn.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
location ^~ / {
#jupyter镜像默认端口为8888
proxy_pass http://notebook:8888;
#websocket额外配置开始
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 连接超时时间,不能设置太长会浪费连接资源
proxy_connect_timeout 60s;
# 读超时时间
proxy_read_timeout 500s;
# 写超时时间
proxy_send_timeout 500s;
#websocket额外配置结束
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
listen 80;
server_name zzz.curtain-z.cn;
return 301 https://$host$request_uri;
}
EOF

5.启动nginx、jupyter容器

1
2
docker run -itd --name notebook --restart=always -v /opt/notebook:/home/jovyan jupyter/scipy-notebook:latest
docker run --name nginx -p 80:80 -p443:443 -d -v /opt/nginx/www:/usr/share/nginx/html -v /opt/nginx/conf/conf.d:/etc/nginx/conf.d -v /opt/nginx/ssl:/etc/nginx/ssl --restart always --link notebook:notebook nginx

6.通过域名访问jupyter

7.查看Token

1
docker exec -it notebook jupyter notebook list

8.添加中文选项

  • Jupyter Notebook默认是英文的

  • 下载中文包
1
docker exec -it notebook pip install jupyterlab-language-pack-zh-CN
  • 下载完成后刷新网页后选择中文

9.设置文件自动保存间隔时间

  • 默认为120秒