很多开发者都想尝试在本地跑大模型,但常常不知道从哪儿下手。
随着 Llama、Mistral 这类开源模型的崛起,本地 AI 变得前所未有的触手可及。你不用再花一分钱给 OpenAI 或 Anthropic,也不用担心把公司或个人的敏感数据发送到第三方服务器。但挑战在于,大多数的安装指南都涉及到折腾 Python 环境、CUDA 驱动和各种依赖库,这些东西换台机器就可能出问题。
Ollama 的出现就是为了解决这个问题,它提供了一种极简的方式来本地化运行 LLM。而当 Ollama 与 Docker 结合时,你就拥有了一个干净、可移植、在任何系统上都能一致运行的终极解决方案。
在这篇文章里,我会带你一步步在 Docker 中设置好 Ollama,拉取你的第一个模型,并开始运行一个可以被任何应用程序调用的本地大模型服务。
Ollama 是什么?
你可以把 Ollama 理解为在自己电脑上运行大模型最简单的方式。
它是一个轻量级的程序,包揽了所有本地运行 LLM 的脏活累活。你不需要手动管理 Python 环境、安装 CUDA 驱动,也不用去搞清楚模型权重、分词器这些复杂的东西。Ollama 帮你处理好模型的下载、加载和启动服务,比如用一条命令就能跑起来 LLaMA、Mistral 或者 Gemma。
隐私是内置的。你和模型的对话永远不会离开你的电脑。没有 API 密钥,没有用量追踪,没有数据被发送到外部服务器。这让它非常适合处理那些不能冒任何风险的敏感工作,比如公司的专有代码或个人信息。
Ollama 从设计之初就是为开发者服务的。它原生支持 macOS 和 Linux,提供一个简单的 REST API 用于集成,现在还能在 Docker 容器里运行。这意味着你在本地开发时用的那套环境,可以原封不动地部署到任何支持 Docker 的地方。
为什么非要用 Docker 来跑 Ollama?
答案很简单:你能享受到 Ollama 的所有好处,同时保持你的系统干净整洁。
直接在你的机器上安装 Ollama 当然也行,官方提供了打包好的安装程序(Windows 的 .exe,Mac 的 .dmg)。但 Docker 提供了一个关键优势:隔离。
- 隔离性与纯净度:有了 Docker,Ollama 和它下载的所有模型都运行在自己的容器里。这让你的主系统保持干净,没有任何安装残留。测试完了想清理?一条命令就能彻底删除,不留痕迹。
- 一致性与可复现性:分享一条 Docker 命令,团队里的任何人都能启动一个一模一样的 Ollama 环境,不管他们用的是 macOS、Linux 还是 Windows。再也没有“在我电脑上是好的”这种扯皮了。
- 部署简单:在你笔记本上运行的容器,同样可以无缝地在云服务器、CI/CD 流水线或者同事的机器上运行,不需要任何修改。
简单来说,用 Docker 跑 Ollama,你获得了本地 LLM 的所有能力,却没有了环境配置的烦恼。
三步搭建你的本地 LLM 服务
你只需要三条命令,就能在 Docker 里跑起 Ollama。
首先,从 Docker Hub 拉取官方的 Ollama 镜像:
docker pull ollama/ollama
接着,运行容器,并做好端口和数据卷的映射:
docker run -d --name my-ollama-docker -p 11434:11434 -v ollama:/root/.ollama ollama/ollama
解释一下每个参数的作用:
-d:让容器在后台(detached mode)运行。--name my-ollama-docker:给你的容器起一个好记的名字。-p 11434:11434:把容器内的 11434 端口映射到你电脑的 11434 端口,这样你才能访问到 Ollama 服务。-v ollama:/root/.ollama:这是最关键的一步。它创建了一个具名卷(named volume),为你的模型数据提供了一个持久化的卷宗。没有它,容器一停,下载的模型就全没了。
容器会立刻启动,并开始在 http://localhost:11434 监听请求。
现在,我们来下载一个模型测试一下:
docker exec -it my-ollama-docker ollama pull llama3.1
这条命令会进入正在运行的容器,并执行 ollama pull llama3.1,下载 Llama 3.1 8B 模型。这个模型大概 5GB,可能需要几分钟。
下载完成后,你可以验证一下:
docker exec -it my-ollama-docker ollama list
你应该能看到刚刚下载的 llama3.1 模型信息。
与你的本地 LLM 交互
容器跑起来后,Ollama 就变成了一个标准的 REST API 服务。你可以用任何能发送 HTTP 请求的工具和它交互。
使用 curl
用 curl 做个快速测试:
curl http://localhost:11434/api/generate -d '{
"model": "llama3.1",
"prompt": "Why is the sky blue?",
"stream": false
}'
API 会返回一个包含生成文本的 JSON 响应。把 stream 设置为 false 可以一次性拿到完整结果,设置为 true 则会以流式的方式逐个返回 token。
使用 Python
在 Python 里调用也同样简单:
import requests
response = requests.post(
"http://localhost:11434/api/generate",
json={
"model": "llama3.1",
"prompt": "用一句话解释什么是 Docker 容器。",
"stream": False,
},
)
print(response.json()["response"])
这让 Ollama 非常适合作为本地应用的后端。你可以构建聊天界面、代码补全工具或者文档分析系统,让它们与容器化的 LLM 对话,而无需将数据发送到外部。
集成 LangChain
对于更复杂的工作流,与 LangChain 的集成也是开箱即用的:
from langchain_ollama import ChatOllama
llm = ChatOllama(model="llama3.1", base_url="http://localhost:11434")
response = llm.invoke("用两句话解释容器化的好处。")
print(response)
性能考量:硬件才是硬道理
本地跑 LLM 对硬件有要求,这点必须清楚。
- CPU vs GPU:差距巨大。Ollama 可以在纯 CPU 的机器上运行,但推理速度会很慢,一个简单的回复可能要等 30 秒以上。如果有一块现代 GPU,同样的查询可能 5 秒内就完成了。NVIDIA 的 GPU 效果最好,但 Apple Silicon 的 Mac 表现也很不错。
- 内存(RAM):这是最主要的瓶颈。模型大小和内存需求直接挂钩。像 Llama 3.1 8B 这样的小模型至少需要 8GB 内存,而 70B 的大模型则需要 64GB 甚至更多。
- 硬盘空间:模型文件很大,每个模型都会占用几个 GB 的空间。7B 模型大约 4-8GB,13B 的 8-16GB,70B 的则需要 40-80GB。
总的来说,瓶颈通常是内存,而不是 CPU 或硬盘速度。
小贴士与踩坑指南
在 Docker 里用 Ollama 时,有几个小地方需要注意。
-
GPU 支持:官方的 Ollama 镜像支持 NVIDIA GPU,但你需要先安装 NVIDIA Container Toolkit,然后在运行容器时加上
--gpus all参数:docker run -d --gpus all --name my-ollama-gpu -p 11434:11434 -v ollama:/root/.ollama ollama/ollama没有这个参数,Ollama 会回退到纯 CPU 模式,虽然能用,但跑的的很慢。
-
数据卷的坑:再强调一次,一定要用
-v ollama:/root/.ollama这样的具名卷。如果你直接挂载主机目录,可能会因为文件权限问题导致 Ollama 无法写入模型文件。如果你在次启动容器时忘记加-v参数,所有模型都得重新下载。 -
常见问题排查:
- 容器启动失败?检查 11434 端口是否被其他程序占用了。
- 模型下载慢?检查你的网络连接。
- API 请求超时?如果跑的是大模型,尝试在 Docker Desktop 的设置里增加分配给容器的内存。
结语
Ollama 和 Docker 的组合,极大地降低了本地 AI 开发的门槛。
你得到了设计层面的隐私保护,可预测的零成本,以及对 AI 技术栈的完全控制,不受任何供应商或网络状况的限制。
整个搭建过程不过几分钟。拉取镜像,运行容器,下载模型,然后你就可以开始创造了。无论你是想做一个 AI 助手原型,还是搭建一个私有的 RAG 系统,这套组合拳都能让你在自己的笔记本上拥有企业级的 AI 能力。
现在,问题是,你准备用它来构建什么呢?
关于
关注我获取更多资讯