您可以让jupyter在Docker容器中启动内核吗?

问题描述

我想在不同的内核之间轻松切换笔记本。一个用例是在tensorflow 2、2.2、2.3中快速测试一段代码,并且有许多类似的用例。但是,如今我更倾向于将环境定义为docker,而不是定义为不同的(conda)环境。

现在,我知道您可以在容器中启动jupyter,但这不是我想要的。我只想单击Kernel > use kernel > TF 2.2 (docker),然后让jupyter连接到在此容器中运行的内核。

周围有类似的东西吗?我曾经使用livy通过ssh连接到远程Spark内核,因此感觉应该可行。

解决方法

免责声明:我是下面使用的项目的作者。

使用dockernel可以轻松完成。

将以下内容放在单独的目录中的Dockerfile文件中。

FROM python:3.7-slim-buster

RUN pip install --upgrade pip ipython ipykernel
CMD python -m ipykernel_launcher -f $DOCKERNEL_CONNECTION_FILE

然后发出以下命令:

docker build --tag my-docker-image /path/to/the/dockerfile/dir
pip install dockernel
dockernel install my-docker-image

在Jupyter中创建新笔记本时,您现在应该看到“ my-docker-image”选项。


无需大量额外的实现/工具就可以执行这种操作,它只需要一点点手工工作:

  1. 使用以下Dockerfile
FROM python:3.7-slim-buster

RUN pip install --upgrade pip ipython ipykernel
  1. 使用docker build --tag my-docker-image .

    构建图像
  2. 为您的kernelspec创建目录,例如~/.local/share/jupyter/kernels/docker_test(在Windows上为%APPDATA%\jupyter\kernels\docker_test

  3. 将以下kernelspec放入您创建的目录的kernel.json文件中(Windows用户可能需要稍微更改argv

{
 "argv": [
  "/usr/bin/docker","run","--network=host","-v","{connection_file}:/connection-spec","my-docker-image","python","-m","ipykernel_launcher","-f","/connection-spec"
 ],"display_name": "docker-test","language": "python"
}

Jupyter现在应该能够使用上面指定的docker镜像启动一个容器。