首页 > 解决方案 > Jupyter 在 docker 容器中启动内核?

问题描述

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

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

周围有这样的吗?我曾经livy通过 ssh 连接到远程 spark 内核,所以感觉这应该是可能的。

标签: pythondockerjupyter-notebooklivy

解决方案


完全披露:我是 Dockernel 的作者。

通过使用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. 为您的内核规范创建一个目录,例如~/.local/share/jupyter/kernels/docker_test%APPDATA%\jupyter\kernels\docker_test在 Windows 上)

  3. 将以下内核规范放入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 映像启动容器。


推荐阅读