Docker Model Runner 与 Ollama:该如何选择?

对比 Docker Model Runner 和 Ollama 本地大语言模型

在本地运行大型语言模型 (LLMs) 已成为隐私保护、成本控制和离线功能的重要趋势。 2025 年 4 月,Docker 推出了 Docker Model Runner (DMR),这是其用于 AI 模型部署的官方解决方案,标志着该领域的重大转变。

现在,有三种方法在争夺开发者的关注:Docker 本机 Model Runner、第三方容器化解决方案(vLLM、TGI)以及独立的 Ollama 平台。

docker model runner windows

了解 Docker Model Runner

基于 Docker 的模型运行器使用容器化技术来打包 LLM 推理引擎及其依赖项。该领域包括 Docker 的官方解决方案和第三方框架。

Docker Model Runner (DMR) - 官方解决方案

2025 年 4 月,Docker 推出了 Docker Model Runner (DMR),这是一个旨在通过 Docker 基础设施简化本地运行 AI 模型的官方产品。这体现了 Docker 在使 AI 模型部署与容器部署一样无缝方面的承诺。

DMR 的关键功能:

  • 原生 Docker 集成:使用熟悉的 Docker 命令(docker model pulldocker model rundocker model package
  • OCI 工件打包:模型作为 OCI 工件打包,可通过 Docker Hub 和其他注册表进行分发
  • OpenAI 兼容 API:可作为 OpenAI 端点的即插即用替代方案,简化集成
  • GPU 加速:原生支持 GPU,无需复杂的 nvidia-docker 配置
  • GGUF 格式支持:与流行的量化模型格式兼容
  • Docker Compose 集成:使用标准的 Docker 工具轻松配置和部署模型
  • Testcontainers 支持:与测试框架无缝集成

安装:

  • Docker Desktop:通过设置中的 AI 选项卡启用
  • Docker Engine:安装 docker-model-plugin

示例用法:

# 从 Docker Hub 拉取模型
docker model pull ai/smollm2

# 运行推理
docker model run ai/smollm2 "解释 Docker Model Runner"

# 打包自定义模型
docker model package --gguf /path/to/model.gguf --push myorg/mymodel:latest

DMR 与 Google、Hugging Face 和 VMware Tanzu 合作,通过 Docker Hub 扩展可用的 AI 模型生态系统。如果您是 Docker 新手或需要 Docker 命令的复习,我们的 Docker 快速参考 提供了关于 Docker 操作的全面指南。

第三方 Docker 解决方案

除了 DMR,生态系统还包括成熟的框架:

  • vLLM 容器:优化用于批量处理的高吞吐量推理服务器
  • 文本生成推理 (TGI):Hugging Face 的生产就绪解决方案
  • llama.cpp 容器:轻量级 C++ 实现,支持量化
  • 自定义容器:封装 PyTorch、Transformers 或专有框架

Docker 方法的优势

灵活性和框架无关性:Docker 容器可以运行任何 LLM 框架,从 PyTorch 到 ONNX Runtime,使开发人员对推理堆栈有完全的控制。

资源隔离:每个容器在隔离的环境中运行,具有定义的资源限制(CPU、内存、GPU),防止多模型部署中的资源冲突。

编排支持:Docker 与 Kubernetes、Docker Swarm 和云平台无缝集成,用于扩展、负载均衡和高可用性。

版本控制:同一系统上可以共存不同模型版本或框架,而不会出现依赖冲突。

Docker 方法的劣势

复杂性:需要了解容器化、卷挂载、网络配置和 GPU 传递(nvidia-docker)。

开销:虽然很小,但 Docker 添加了一个薄抽象层,略微影响启动时间和资源使用。

配置负担:每次部署都需要仔细配置 Dockerfile、环境变量和运行时参数。

了解 Ollama

Ollama 是一个专为本地运行 LLM 而设计的应用程序,其核心原则是简单性。它提供:

  • Linux、macOS 和 Windows 的原生二进制文件
  • 内置模型库,支持一键安装
  • 自动检测和优化 GPU
  • 与 OpenAI 格式兼容的 RESTful API
  • 模型上下文和状态管理

Ollama 的优势

简单性:安装简单(Linux 上使用 curl | sh),运行模型只需 ollama run llama2。要查看 Ollama 命令和使用模式的完整列表,请参阅我们的 Ollama 快速参考

优化性能:基于 llama.cpp,Ollama 高度优化了推理速度,支持量化(Q4、Q5、Q8)。

模型管理:内置模型注册表,使用 ollama pullollama listollama rm 等命令简化模型生命周期。

开发人员体验:干净的 API、广泛的文档和不断增长的集成生态系统(如 LangChain、CrewAI 等)。Ollama 的多功能性扩展到专门用例,如 使用嵌入模型对文本文档进行重新排序

资源效率:自动内存管理,空闲时自动卸载模型,节省系统资源。

ollama ui

Ollama 的劣势

框架锁定:主要支持 llama.cpp 兼容模型,限制了 vLLM 或自定义推理引擎等框架的灵活性。

有限的定制化:高级配置(自定义量化、特定 CUDA 流)在 Docker 环境中比 Ollama 更难以访问。

编排挑战:虽然 Ollama 可以在容器中运行,但缺乏对高级编排功能(如水平扩展)的原生支持。

性能比较

推理速度

Docker Model Runner:性能与 Ollama 相当,因为两者都支持 GGUF 量化模型。对于 Llama 2 7B(Q4),在 CPU 上预计每秒 20-30 个 token,在中等 GPU 上预计每秒 50-80 个 token。容器开销最小。

Ollama:利用高度优化的 llama.cpp 后端和高效的量化。对于 Llama 2 7B(Q4),在 CPU 上预计每秒 20-30 个 token,在中等 GPU 上预计每秒 50-80 个 token。没有容器化开销。有关 Ollama 如何管理并发推理的详细信息,请参阅我们的分析 Ollama 如何处理并行请求

Docker (vLLM):优化用于批量处理,具有连续批处理。单个请求可能稍慢,但在高并发负载下吞吐量表现优异(每模型每秒 100+ token)。

Docker (TGI):与 vLLM 类似,具有出色的批处理性能。添加了流式传输和逐 token 生成功能。

内存使用

Docker Model Runner:与 Ollama 类似,具有自动模型加载功能。GGUF Q4 模型通常使用 4-6GB 内存。容器开销最小(几十 MB)。

Ollama:自动内存管理按需加载模型并在空闲时卸载。7B Q4 模型通常使用 4-6GB 内存。对于单模型场景最有效率。

传统 Docker 解决方案:内存使用取决于框架。vLLM 预分配 GPU 内存以实现最佳性能,而基于 PyTorch 的容器可能使用更多内存用于模型权重和 KV 缓存(7B 模型为 8-14GB)。

启动时间

Docker Model Runner:容器启动增加约 1 秒,加上模型加载(2-5 秒)。中等模型总启动时间:3-6 秒。

Ollama:启动几乎即时,模型加载对于中等大小模型需要 2-5 秒。冷启动体验最快。

传统 Docker:容器启动增加 1-3 秒,加上模型加载时间。预热容器可缓解生产部署中的此问题。

Docker Model Runner 与 Ollama:直接比较

随着 Docker 官方进入 LLM 运行器领域,比较变得更加有趣。以下是 DMR 和 Ollama 的一对一比较:

特性 Docker Model Runner Ollama
安装 Docker Desktop AI 选项卡或 docker-model-plugin 单命令:`curl
命令风格 docker model pull/run/package ollama pull/run/list
模型格式 GGUF(OCI 工件) GGUF(原生)
模型分发 Docker Hub、OCI 注册表 Ollama 注册表
GPU 设置 自动(比传统 Docker 更简单) 自动
API OpenAI 兼容 OpenAI 兼容
Docker 集成 原生(是 Docker) 需要时可在 Docker 中运行
Compose 支持 原生 通过 Docker 镜像
学习曲线 低(对于 Docker 用户) 最低(对于所有人)
生态系统合作伙伴 Google、Hugging Face、VMware LangChain、CrewAI、Open WebUI
最适合 Docker 本机工作流 独立简单性

关键见解:DMR 将 Docker 工作流引入 LLM 部署,而 Ollama 保持框架无关性,具有更简单的独立操作。您现有的基础设施比技术差异更重要。

用例建议

选择 Docker Model Runner 的情况

  • 以 Docker 为主的工作流:您的团队已经广泛使用 Docker
  • 统一工具:您希望使用一个工具(Docker)进行容器和模型
  • OCI 工件分发:您需要企业注册表集成
  • Testcontainers 集成:您在 CI/CD 中测试 AI 功能
  • Docker Hub 偏好:您希望通过熟悉的渠道进行模型分发

选择 Ollama 的情况

  • 快速原型设计:使用不同模型进行快速实验
  • 框架无关:不绑定到 Docker 生态系统
  • 绝对简单性:最小的配置和维护开销
  • 单服务器部署:在笔记本电脑、工作站或单个虚拟机上运行
  • 大型模型库:访问广泛的预配置模型注册表

选择第三方 Docker 解决方案的情况

  • 生产部署:需要高级编排和监控
  • 多模型服务:同时运行不同框架(vLLM、TGI)
  • Kubernetes 编排:跨集群扩展并负载均衡
  • 自定义框架:使用 Ray Serve 或专有推理引擎
  • 严格的资源控制:对每个模型实施精细的 CPU/GPU 限制

混合方法:兼得两者优势

您不限于单一方法。考虑这些混合策略:

选项 1:Docker Model Runner + 传统容器

使用 DMR 运行标准模型,使用第三方容器运行专用框架:

# 使用 DMR 拉取标准模型
docker model pull ai/llama2

# 在高吞吐量场景中运行 vLLM
docker run --gpus all vllm/vllm-openai

选项 2:Docker 中的 Ollama

在 Docker 容器中运行 Ollama 以获得编排功能:

docker run -d \
  --name ollama \
  --gpus all \
  -v ollama:/root/.ollama \
  -p 11434:11434 \
  ollama/ollama

这提供了:

  • Ollama 的直观模型管理
  • Docker 的编排和隔离功能
  • 使用标准清单的 Kubernetes 部署

选项 3:按用例混合使用

  • 开发:使用 Ollama 进行快速迭代
  • 预发布:使用 Docker Model Runner 进行集成测试
  • 生产:在 Kubernetes 中使用 vLLM/TGI 进行扩展

API 兼容性

所有现代解决方案都收敛于 OpenAI 兼容的 API,简化了集成:

Docker Model Runner API:运行模型时自动提供 OpenAI 兼容端点,无需额外配置。

# 模型运行时自动暴露 API
docker model run ai/llama2

# 使用 OpenAI 兼容端点
curl http://localhost:8080/v1/chat/completions -d '{
  "model": "llama2",
  "messages": [{"role": "user", "content": "为什么天空是蓝色的?"}]
}'

Ollama API:OpenAI 兼容端点使其成为使用 OpenAI SDK 的应用程序的即插即用替代方案。支持流式传输。

curl http://localhost:11434/api/generate -d '{
  "model": "llama2",
  "prompt": "为什么天空是蓝色的?"
}'

第三方 Docker API:vLLM 和 TGI 提供 OpenAI 兼容端点,而自定义容器可能实现专有 API。

OpenAI 兼容性的收敛意味着您只需进行最小的代码更改即可在解决方案之间切换。

资源管理

GPU 加速

Docker Model Runner:原生支持 GPU,无需复杂的 nvidia-docker 配置。自动检测并使用可用 GPU,与传统容器相比显著简化了 Docker 的 GPU 体验。

# GPU 加速自动生效
docker model run ai/llama2

Ollama:在支持 CUDA 的 NVIDIA GPU 上自动检测 GPU。除了驱动程序安装外,无需其他配置。

传统 Docker 容器:需要 nvidia-docker 运行时和显式 GPU 分配:

docker run --gpus all my-llm-container

CPU 回退

两者在 GPU 不可用时都会优雅地回退到 CPU 推理,尽管性能会显著下降(大型模型慢 5-10 倍)。有关现代处理器上 CPU 仅的性能的见解,请阅读我们的测试 Ollama 如何使用 Intel CPU 性能和高效核心

多 GPU 支持

Ollama:支持在多个 GPU 上进行张量并行,用于大型模型。

Docker:取决于框架。vLLM 和 TGI 支持多 GPU 推理,前提是配置正确。

社区和生态系统

Docker Model Runner:2025 年 4 月推出,有强大的企业支持。与 Google、Hugging Face 和 VMware Tanzu AI 解决方案的合作伙伴关系确保了广泛的模型可用性。与 Docker 巨大的开发者社区(数百万用户)的集成提供了即时的生态系统访问。作为一个新产品,仍在构建特定于社区的资源。

Ollama:社区迅速增长,GitHub 上有 50K+ 星标。强大的集成生态系统(LangChain、LiteLLM、Open WebUI、CrewAI)和活跃的 Discord 社区。有大量第三方工具和教程。文档和社区资源更加成熟。有关可用接口的全面概述,请参阅我们的指南 本地 Ollama 实例的开源聊天 UI。对于任何快速增长的开源项目,监控项目的方向很重要 - 请阅读我们的分析 Ollama 退化早期迹象 以了解潜在的担忧。

第三方 Docker 解决方案:vLLM 和 TGI 有成熟的生态系统和企业支持。有大量生产案例研究、优化指南和部署模式,来自 Hugging Face 和社区贡献者。

成本考虑

Docker Model Runner:Docker Desktop(个人/教育)或 Docker Engine 免费。Docker Desktop 需要订阅才能用于大型组织(250+ 员工或 1000 万美元+ 收入)。通过 Docker Hub 分发的模型遵循 Docker 的注册表定价(免费公共仓库,付费私有仓库)。

Ollama:完全免费和开源,无论组织规模如何,均无许可费用。资源成本仅取决于硬件。

第三方 Docker 解决方案:开源框架(vLLM、TGI)免费。容器编排平台(ECS、GKE)和私有注册表存储的潜在成本。

安全考虑

Docker Model Runner:利用 Docker 的安全模型进行容器隔离。作为 OCI 工件打包的模型可以进行扫描和签名。通过 Docker Hub 分发使企业用户能够进行访问控制和漏洞扫描。

Ollama:默认情况下作为本地服务运行,API 暴露在 localhost 上。网络暴露需要显式配置。模型注册表是可信的(Ollama 策略),减少了供应链风险。

传统 Docker 解决方案:网络隔离是内置的。容器安全扫描(Snyk、Trivy)和镜像签名是生产环境的标准实践。

所有解决方案都需要关注:

  • 模型来源:不可信模型可能包含恶意代码或后门
  • API 认证:在生产部署中实施认证/授权
  • 速率限制:防止滥用和资源耗尽
  • 网络暴露:确保 API 不被意外暴露到互联网
  • 数据隐私:模型处理敏感数据;确保符合数据保护法规

迁移路径

从 Ollama 迁移到 Docker Model Runner

Docker Model Runner 的 GGUF 支持使迁移变得简单:

  1. 在 Docker Desktop 中启用 Docker Model Runner 或安装 docker-model-plugin
  2. 转换模型引用:ollama run llama2docker model pull ai/llama2docker model run ai/llama2
  3. 将 API 端点从 localhost:11434 更新为 DMR 端点(通常为 localhost:8080
  4. 两者都使用 OpenAI 兼容的 API,因此应用程序代码只需进行最小更改

从 Docker Model Runner 迁移到 Ollama

为了更简单的独立操作迁移到 Ollama:

  1. 安装 Ollama:curl -fsSL https://ollama.ai/install.sh | sh
  2. 拉取等效模型:ollama pull llama2
  3. 将 API 端点更新为 Ollama 的 localhost:11434
  4. 使用 ollama run llama2 进行测试以验证功能

从传统 Docker 容器迁移到 DMR

简化您的 Docker LLM 设置:

  1. 启用 Docker Model Runner
  2. docker model pull 命令替换自定义 Dockerfile
  3. 删除 nvidia-docker 配置(DMR 自动处理 GPU)
  4. 使用 docker model run 代替复杂的 docker run 命令

从任何解决方案迁移到 Docker 中的 Ollama

最佳兼顾两者的方法:

  1. docker pull ollama/ollama
  2. 运行:docker run -d --gpus all -v ollama:/root/.ollama -p 11434:11434 ollama/ollama
  3. 按照常规使用 Ollama 命令:docker exec -it ollama ollama pull llama2
  4. 获得 Docker 编排与 Ollama 简单性的结合

监控和可观测性

Ollama:通过 API(/api/tags/api/ps)获取基本指标。第三方工具如 Open WebUI 提供仪表板。

Docker:与 Prometheus、Grafana、ELK 堆栈和云监控服务完全集成。容器指标(CPU、内存、GPU)随时可用。

结论

2025 年 Docker 推出 Docker Model Runner (DMR) 后,本地 LLM 部署的格局发生了重大变化。选择取决于您的具体需求:

  • 对于寻求 Docker 集成的开发人员:DMR 提供与 docker model 命令的原生 Docker 工作流集成
  • 对于最大简单性:Ollama 仍然是最简单的解决方案,具有单命令模型管理
  • 对于生产与企业:DMR 和第三方解决方案(vLLM、TGI)在 Docker 中提供编排、监控和可扩展性
  • 对于最佳兼顾:在 Docker 容器中运行 Ollama,结合简单性与生产基础设施

DMR 的引入在易用性方面缩小了 Docker 和 Ollama 之间的差距。Ollama 在快速原型设计上仍胜出,而 DMR 在已投资于 Docker 工作流的团队中表现优异。两种方法都在积极开发,生产就绪,生态系统足够成熟,因此在它们之间切换相对无痛。

结论:如果您已经在广泛使用 Docker,DMR 是自然选择。如果您想要无论基础设施如何的最简单体验,请选择 Ollama。

有用的链接

Docker Model Runner

Ollama

其他 Docker 解决方案

其他有用文章