在 Docker Swarm 部署 Jupyter Enterprise Gateway:容器化远程内核实战指南
2026/8/18 13:42:36 网站建设 项目流程

在 Docker Swarm 部署 Jupyter Enterprise Gateway:容器化远程内核实战指南

【免费下载链接】enterprise_gatewayA lightweight, multi-tenant, scalable and secure gateway that enables Jupyter Notebooks to share resources across distributed clusters such as Apache Spark, Kubernetes and others.项目地址: https://gitcode.com/gh_mirrors/en/enterprise_gateway

本文是一份面向初学者的Jupyter Enterprise Gateway(JEG)Docker Swarm 部署实战指南。Jupyter Enterprise Gateway 是一个轻量级、多租户、可扩展且安全的网关,它让 Jupyter Notebook 能够把内核进程"远程化",动态调度到 Apache Spark、Kubernetes、Docker Swarm 等分布式集群上运行。本文将以 Docker Swarm 为例,带你一步步完成容器化远程内核的部署与配置,并解释内核如何以 Swarm Service 的形式在集群中弹性运行。

上图展示了 Jupyter Enterprise Gateway 的核心架构:客户端通过 HTTPS/WSS 连接网关,网关通过 ZMQ 将内核调度到分布式集群的各个节点上。

为什么选择 Docker Swarm 部署远程内核?🚀

在传统 Jupyter Notebook 架构中,内核是本地进程,资源被单台机器锁死;而通过Jupyter Enterprise Gateway 容器化部署,内核变成了可调度的分布式单元,天然获得三大优势:

  • 弹性伸缩:内核作为 Swarm Service 可"落"在集群任意节点,横向扩展无压力;
  • 资源隔离:每个内核独立容器,互不干扰,多租户场景更安全;
  • 统一运维:复用 Docker Swarm 的监控、重启与调度能力。

对比上面两张动图可以发现:同样的集群规模下,使用 Jupyter Enterprise Gateway 后,可同时运行的远程内核数量大幅提升。

部署前需要准备什么?✅

在动手Docker Swarm 部署 Jupyter Enterprise Gateway之前,请确认环境满足以下条件:

  1. 一个已初始化的 Docker Swarm 集群(在管理节点执行docker swarm init);
  2. 集群中可拉取以下镜像(来自 Docker Hub 的 elyra 组织):
    • elyra/enterprise-gateway:网关主镜像,含服务器软件与默认内核规格;
    • elyra/kernel-py:Python 远程内核镜像;
    • elyra/kernel-relyra/kernel-scalaelyra/kernel-tf-py等按需使用;
  3. 管理节点拥有/var/run/docker.sock的访问权限(网关需要用它来创建内核服务)。

本地构建镜像可运行make docker-images,相关 Dockerfile 位于 etc/docker/,例如 enterprise-gateway/Dockerfile。

一键部署步骤:docker stack 快速上手指南 🛠️

项目仓库中已经为你准备好了 compose 栈定义文件 docker-compose.yml。它创建了一个专供 Enterprise Gateway 与内核服务通信的overlay 网络,并附带一个 HAProxy 代理服务用于入口负载均衡。

部署命令(在 Swarm 管理节点执行):

docker stack deploy -c docker-compose.yml enterprise-gateway

执行后,enterprise-gateway会以 Swarm Service 的形式出现在集群中,所有相关对象(包括内核实例)都会被自动打上app=enterprise-gateway标签。

compose 文件关键配置解读

让我们看看 docker-compose.yml 中几个值得关注的配置点:

  • 挂载 Docker Socket/var/run/docker.sock必须挂载进容器,否则网关无法动态创建内核 Service;
  • 网络环境变量EG_DOCKER_NETWORK指定内核加入的 overlay 网络;
  • 内核白名单EG_ALLOWED_KERNELS默认允许r_dockerpython_dockerpython_tf_dockerpython_tf_gpu_dockerscala_docker五种容器化内核;
  • 副本数:目前由于 Swarm 的会话亲和性(session affinity)尚未完全支持,服务默认配置为单副本(replicas: 1)。

配置容器化远程内核:理解 DockerSwarmProcessProxy 🧩

当用户请求启动内核时,Jupyter Enterprise Gateway 会根据内核规格文件(kernel.json)中的process_proxy配置来决定创建哪种实体。在Docker Swarm 部署场景下,关键类就是DockerSwarmProcessProxy,其实现位于 docker_swarm.py:

  • 它通过kernel_id标签查找对应的 Swarm Service;
  • 跟踪 Task 的preparing → starting → running状态,等待内核就绪;
  • 内核退出后自动调用terminate_container_resources清理 Service。

内核如何被"远程化"启动?

以 Python 远程内核为例,其内核规格文件位于 python_docker/kernel.json。关键配置如下:

{ "metadata": { "process_proxy": { "class_name": "enterprise_gateway.services.processproxies.docker_swarm.DockerSwarmProcessProxy", "config": { "image_name": "elyra/kernel-py:VERSION" } } }, "argv": [ "python", "/usr/local/share/jupyter/kernels/python_docker/scripts/launch_docker.py", "--RemoteProcessProxy.kernel-id", "{kernel_id}", "--RemoteProcessProxy.response-address", "{response_address}", "--RemoteProcessProxy.public-key", "{public_key}" ] }

实际启动时,真正被调用的并非内核进程本身,而是启动脚本 launch_docker.py。它会通过 Docker Python API 完成以下动作:

  1. 读取KERNEL_IMAGE环境变量校验镜像名合法性;
  2. KERNEL_USERNAME-kernel_id生成 Service 名称;
  3. 打上kernel_idcomponent=kernelapp=enterprise-gateway三个标签;
  4. dnsrr端点模式、none重启策略创建 Swarm Service;
  5. 将内核加入与网关相同的 overlay 网络。

💡 若改用DockerProcessProxy,内核则会以传统 Docker 容器形式运行在网关所在宿主机上。两种模式可混用:即使网关以 Swarm Service 部署,也可以让某个内核以普通容器方式运行。

验证与连接:从 Notebook 使用远程内核 🌐

部署完成后,打开 Jupyter Notebook 并配置连接到网关(默认端口 8888,由 HAProxy 转发到网关服务)。在 Notebook 中你会看到新增的Python on DockerR on Docker等内核选项,选择后内核便会在 Swarm 集群中动态创建并回连。

排错时可关注以下要点:

  • 日志:查看网关日志确认内核启动状态与 Task 状态流转;
  • 网络:确认内核与网关处于同一 overlay 网络(环境变量EG_DOCKER_NETWORK);
  • 超时:如内核长时间处于 starting,可调大EG_KERNEL_LAUNCH_TIMEOUT环境变量。

官方文档与源码指引 📚

如果你想深入了解,推荐阅读以下项目内资料:

  • 官方部署文档:deploy-docker.md(Docker 与 Swarm 部署详解);
  • Docker 镜像说明:docker.md(各内核镜像的构建与使用);
  • 网关启动脚本:start-enterprise-gateway.sh(默认内核名、超时、日志级别等参数入口);
  • 容器化内核生命周期管理源码:docker_swarm.py;
  • 更多内核规格示例:etc/kernelspecs/。

结语

通过本文的Docker Swarm 部署 Jupyter Enterprise Gateway实战,你已经掌握了从 compose 栈部署、内核规格配置到远程内核启动验证的完整链路。Jupyter Enterprise Gateway 让 Notebook 摆脱单机束缚,把"容器化远程内核"的能力真正落地——无论是小团队开发环境,还是多租户生产集群,这套方案都能帮助你更高效地共享集群资源。现在就动手试试吧!🎉

【免费下载链接】enterprise_gatewayA lightweight, multi-tenant, scalable and secure gateway that enables Jupyter Notebooks to share resources across distributed clusters such as Apache Spark, Kubernetes and others.项目地址: https://gitcode.com/gh_mirrors/en/enterprise_gateway

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询