问题描述
我想在不同的内核之间轻松切换笔记本。一个用例是在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”选项。
无需大量额外的实现/工具就可以执行这种操作,它只需要一点点手工工作:
- 使用以下
Dockerfile
:
FROM python:3.7-slim-buster
RUN pip install --upgrade pip ipython ipykernel
-
使用
构建图像docker build --tag my-docker-image .
-
为您的kernelspec创建目录,例如
~/.local/share/jupyter/kernels/docker_test
(在Windows上为%APPDATA%\jupyter\kernels\docker_test
) -
将以下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镜像启动一个容器。