大模型Docker部署教程:从零跑通本地推理服务
想在服务器上跑大模型,又不想折腾 Python 环境和依赖冲突,用 Docker 是最省事的路径。
这篇教程以 Ollama 为例,带你在 Linux 上用 Docker 部署一个大模型推理服务,跑通后可以直接通过 API 调用。
适合有基本 Linux 操作经验、服务器至少 8GB 内存(跑 7B 以下小模型)的读者。
先确认服务器能不能跑得动
大模型对内存和显存有硬性要求,部署前先检查环境,避免装完才发现跑不起来。
登录服务器后执行:
# 查看内存
free -h
# 查看 CPU 核数
nproc
# 如果有 NVIDIA 显卡,查看驱动和显存
nvidia-smi
判断标准参考:
- 跑 1B~3B 参数的小模型,纯 CPU 推理至少 8GB 内存。
- 跑 7B 参数模型,建议 16GB 以上内存;用 GPU 推理则显存至少 8GB。
- 磁盘预留 10GB 以上空间放镜像和模型文件。
如果 nvidia-smi 能正常输出显卡信息,说明驱动已就绪,后面可以走 GPU 加速。
如果命令不存在,先用 CPU 模式跑通流程,再考虑装驱动。
安装 Docker 并拉取推理镜像
大多数 Linux 发行版可以用官方脚本安装 Docker,执行:
curl -fsSL https://get.docker.com | sh
systemctl enable docker
systemctl start docker
docker version
能正常输出版本号就说明安装成功。
接着拉取 Ollama 镜像:
docker pull ollama/ollama
镜像拉取时间取决于服务器网络,
国内服务器如果速度慢,
可以配置 Docker 镜像加速器,
在 /etc/docker/daemon.json 中写入加速地址后重启 Docker 服务。
启动容器并下载模型
先以 CPU 模式启动容器,把模型数据目录挂载到宿主机,避免容器删除后模型丢失:
mkdir -p /data/ollama
docker run -d \
--name ollama \
-p 11434:11434 \
-v /data/ollama:/root/.ollama \
--restart unless-stopped \
ollama/ollama
参数说明:-p 11434:11434 把容器端口映射到宿主机,-v 做目录持久化,--restart unless-stopped 让容器异常退出后自动重启。
容器启动后,进入容器下载一个轻量模型测试:
docker exec -it ollama ollama run qwen2:0.5b
首次执行会下载模型文件,下载完成后会出现交互式对话提示符,输入一句话能收到回复,就说明推理服务已经跑通。
输入 /bye 退出对话。
如果服务器有 NVIDIA 显卡并已安装驱动,需要先安装 NVIDIA Container Toolkit,然后用 --gpus all 参数重新启动容器,才能启用 GPU 加速。
通过 API 验证服务是否可用
Ollama 默认提供 HTTP API,在宿主机上执行:
curl http://127.0.0.1:11434/api/generate -d '{
"model": "qwen2:0.5b",
"prompt": "用一句话解释什么是Docker",
"stream": false
}'
返回 JSON 中 response 字段有内容,说明 API 工作正常。
如果要在其他机器上调用,需要把请求地址换成服务器公网 IP,并确认防火墙放行了 11434 端口。
注意:直接把 11434 端口暴露到公网存在被滥用的风险,建议只在内网调用,或者在前端加一层带鉴权的反向代理。
容易踩坑的几个地方
- 容器启动后立即退出:用
docker logs ollama查看日志,常见原因是挂载目录权限不足或端口被占用。 - 模型下载卡住:检查服务器到模型下载源的网络连通性,必要时更换网络环境或配置代理。
- 显存不足报错:换更小参数的模型,或者改用 CPU 模式启动,去掉
--gpus参数。 - 修改配置后不生效:容器需要删除重建,先
docker rm -f ollama,再用新参数重新docker run,数据目录因为做了挂载不会丢失。
部署完成后的检查清单
最后按这几项确认服务状态:
docker ps能看到 ollama 容器处于 Up 状态。curl http://127.0.0.1:11434/api/tags能返回已下载的模型列表。- 用 API 发一条测试请求能收到正常回复。
- 宿主机
/data/ollama目录下有模型文件,重启容器后模型仍然存在。
这套流程跑通后,你可以按同样方式更换其他模型,或者把 API 接入自己的应用。
如果后续要对外提供服务,再考虑加 Nginx 反向代理和访问控制。