Jupyter 在 docker 容器中启动内核?

Jupyter starting a kernel in a docker container?

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

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

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

完全披露:我是 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”选项。

手动

不需要太多额外的东西就可以完成这种事情implementation/tooling,只需要一些手工工作:

  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 图像启动容器。