一个计算机技术爱好者与学习者

0%

好好学Docker:使用Docker安装配置Jupyter

1. 前言

《Jupyter notebook》一文中学习了jupyter的使用,本文学习一下怎样使用docker安装jupyter,并且配置访问密码。

前置条件是安装配置好了docker环境,安装方法参考《Docker入门》。已知docker宿主机IP为192.168.56.130。

参考文档:Jupyter Docker Stacks

2. 安装jupyter

1、登录dockerhub查看需要的Jupyter - Docker Official Images

2、下载jupyter镜像(以5.7.8为例)

1
docker pull jupyter/base-notebook:notebook-5.7.8

注意一:不要使用6.x.x,存在页面无法显示扩展插件的bug,详情参考Jupyter nbextensions_configurator not shown

注意二:本文使用的是老版本的 jupyter 镜像,最新版本的 jupyter 镜像,已经从 dockerhub 迁移到了 quoy.io

3、创建配置目录

1
2
3
mkdir -p /opt/jupyter/jovyan
mkdir -p /opt/jupyter/jovyan/.jupyter
chmod 777 -R /opt/jupyter/jovyan

4、启动jupyter服务

1
2
3
4
docker run --name vk-jupyter -d \
-p 8888:8888 \
-v /opt/jupyter/jovyan:/home/jovyan \
jupyter/base-notebook:notebook-5.7.8

以上命令:

  • 命名容器为vk-jupyter,后台运行
  • 映射宿主机8888端口到容器的8888端口
  • 挂载宿主机目录/opt/jupyter/jovyan到容器目录/home/jovyan

更多启动命令参数可以参考Jupyter Docker Stacks

5、验证安装

1
2
docker ps
docker logs vk-jupyter

jupyter启动正常的话就可以看到vk-jupyter容器。

6、查看token

1
docker exec -it vk-jupyter jupyter notebook list

可以查看到登录需要的token

7、登录jupyter
浏览器访问 http://192.168.56.130:8888 ,可以看到Jupyter登录页面,使用token登录进入jupyter操作页面。

3. 配置jupyter

1、设置密码

1
2
docker exec -it vk-jupyter jupyter notebook password
docker restart vk-jupyter

2、使用密码
浏览器访问 http://192.168.56.130:8888
此时使用自己设置的密码就可以访问jupyter了。

3、根目录
jupyter编辑器的默认根目录为 /home/jovyan ,对应宿主机目录 /opt/jupyter/jovyan ,创建的目录和文件都去这个路径下面去找。

4、安装ipywidgets 如果不安装ipywidgets,页面加载 /nbextensions/widgets/notebook/js/extension.js 文件时会报错404。

1
docker exec -it vk-jupyter pip install ipywidgets

4. 配置Nginx

jupyter 使用了 websocket 协议,所以需要配置支持 websocket。
如果不配置的话,通过域名访问时会报错无法连接内核,也就无法运行python脚本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
server {
listen 80;
server_name jupyter.voidking.com;
charset utf-8;
location /{
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_pass http://172.17.12.85:8888;

# WebSocket support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}

5. jupyter小技巧

5.1. 执行bash

在代码框里输入叹号+bash命令,即可执行bash,例如:

1
!ls -l

5.2. 登录进容器

1
2
docker exec -it vk-jupyter /bin/bash
docker exec --user root -it vk-jupyter /bin/bash

5.3. 安装常用命令

1
2
3
docker exec --user root -it vk-jupyter /bin/bash
apt update
apt install git curl unzip -y

5.4. 安装插件

Jupyter Notebook 扩展插件(nbextensions)是一些 JavaScript 模块,我们可以使用插件强化 Notebook 的功能。扩展插件本质上修改了 Jupyter UI,以实现更强大的功能。
1、界面添加 Nbextensions

1
2
3
4
5
docker exec -it vk-jupyter conda install -c conda-forge jupyter_nbextensions_configurator
#docker exec -it vk-jupyter pip install jupyter_nbextensions_configurator -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/
docker exec -it vk-jupyter jupyter nbextensions_configurator enable --user
docker exec -it vk-jupyter jupyter nbextension list
docker restart vk-jupyter

2、安装常用扩展集合

1
2
3
4
docker exec -it vk-jupyter pip install jupyter_contrib_nbextensions -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/
#docker exec -it vk-jupyter conda install -c conda-forge jupyter_contrib_nbextensions
docker exec -it vk-jupyter jupyter contrib nbextension install --user
docker exec -it vk-jupyter jupyter nbextension list

5.5. 启动jupyter时用户授权sudo

1
2
3
4
5
6
docker run --name vk-jupyter -d \
-u root \
-p 8888:8888 \
-v /opt/jupyter/jovyan:/home/jovyan \
-e GRANT_SUDO=yes \
jupyter/base-notebook:notebook-5.7.8

这个版本的jupyter镜像,不支持直接以root用户启动jupyter程序。因此退而求其次,给jovyan用户授权sudo。
如果非要以root用户启动jupyter程序,可以自行修改启动脚本 /usr/local/bin/start.sh ,然后重新打镜像。

参考文档:Running jupyterlab as root instead of jovyan when running in rootless docker mode

  • 本文作者: 好好学习的郝
  • 原文链接: https://www.voidking.com/dev-docker-jupyter/
  • 版权声明: 本文采用 BY-NC-SA 许可协议,转载请注明出处!源站会即时更新知识点并修正错误,欢迎访问~
  • 微信公众号同步更新,欢迎关注~