使用 Docker 部署 Ollama:Docker Compose 一键运行 DeepSeek-R1 1.5B

最近本地大模型越来越好用,如果你不想在系统里安装一堆运行环境,使用 Docker 部署 Ollama 是一个非常省心的方案。

Ollama 本身提供了官方 Docker 镜像,我们只需要启动一个容器,就可以在本地运行 DeepSeek、Qwen、Llama 等各种开源模型。

这篇文章就从零开始介绍:

  • 使用 Docker 安装 Ollama
  • 使用 Docker Compose 管理 Ollama
  • 下载并运行 DeepSeek-R1 1.5B
  • 调用 Ollama API
  • Docker 数据持久化
  • NVIDIA GPU 加速
  • macOS Apple Silicon 需要注意的问题

最终我们会得到这样一个结构:

text 复制代码
Docker
  │
  └── Ollama
        │
        ├── HTTP API :11434
        │
        └── DeepSeek-R1 1.5B

一、为什么使用 Docker 安装 Ollama?

Ollama 本身安装已经很简单了,但是如果是在服务器、开发环境或者需要重复部署,我还是比较推荐 Docker。

主要有几个优点:

text 复制代码
环境隔离
    ↓
安装方便
    ↓
迁移方便
    ↓
升级方便
    ↓
数据可以持久化

例如以后迁移服务器,基本只需要:

bash 复制代码
docker compose up -d

整个 Ollama 服务就可以重新启动。

Ollama 官方本身也提供了:

text 复制代码
ollama/ollama

Docker 镜像。官方目前给出的 CPU 运行方式同样是通过挂载 /root/.ollama 并暴露 11434 端口。


二、准备 Docker

首先确认电脑已经安装 Docker。

执行:

bash 复制代码
docker --version

例如:

text 复制代码
Docker version 28.x.x

然后检查 Docker Compose:

bash 复制代码
docker compose version

注意,现在比较推荐:

bash 复制代码
docker compose

而不是以前的:

bash 复制代码
docker-compose

如果两个命令都能够正常执行,就可以继续了。


三、使用 Docker 安装 Ollama

最简单的方法只有一条命令:

bash 复制代码
docker run -d \
  --name ollama \
  -p 11434:11434 \
  -v ollama:/root/.ollama \
  --restart unless-stopped \
  ollama/ollama

这里几个参数分别代表:

参数 作用
-d 后台运行
--name ollama 容器名称
-p 11434:11434 映射 Ollama API 端口
-v ollama:/root/.ollama 持久化模型
--restart unless-stopped Docker 重启后自动启动
ollama/ollama Ollama 官方镜像

其中最重要的是:

bash 复制代码
-v ollama:/root/.ollama

因为我们后面下载的大模型都会保存到:

text 复制代码
/root/.ollama

如果不做持久化,删除容器以后模型数据也可能一起丢失。


四、检查 Ollama 是否启动成功

执行:

bash 复制代码
docker ps

应该可以看到:

text 复制代码
CONTAINER ID   IMAGE           PORTS
xxxxxxxx       ollama/ollama   0.0.0.0:11434->11434/tcp

也可以直接访问 Ollama:

bash 复制代码
curl http://localhost:11434

如果返回类似:

text 复制代码
Ollama is running

说明安装成功。


五、下载 DeepSeek-R1 1.5B

接下来我们安装一个非常小的 DeepSeek 模型:

text 复制代码
DeepSeek-R1-Distill-Qwen-1.5B

在 Ollama 中对应:

text 复制代码
deepseek-r1:1.5b

Ollama 官方模型库目前仍然提供这个模型,运行命令就是:

bash 复制代码
ollama run deepseek-r1:1.5b

官方提供的 Q4_K_M 版本模型文件大约只有 1.1 GB,实际参数量约 1.78B,非常适合作为 Ollama 入门测试模型。

因为 Ollama 现在运行在 Docker 里面,所以执行:

bash 复制代码
docker exec -it ollama ollama pull deepseek-r1:1.5b

开始下载。

下载完成以后,可以查看本地模型:

bash 复制代码
docker exec -it ollama ollama list

你应该可以看到类似:

text 复制代码
NAME                  ID              SIZE
deepseek-r1:1.5b      xxxxxxxxxxxx    1.1 GB

六、运行 DeepSeek-R1 1.5B

直接执行:

bash 复制代码
docker exec -it ollama ollama run deepseek-r1:1.5b

然后输入:

text 复制代码
你好,请介绍一下你自己。

DeepSeek 就会开始回答。

例如:

text 复制代码
>>> 你好,请介绍一下你自己。

退出可以输入:

text 复制代码
/bye

这样,我们实际上已经完成了:

text 复制代码
Docker
   ↓
Ollama
   ↓
DeepSeek-R1 1.5B
   ↓
本地 AI

整个过程不需要配置 Python,也不需要安装 PyTorch、CUDA SDK 或者其他大模型运行框架。


七、使用 Docker Compose 安装 Ollama

如果只是测试,一条 docker run 命令就够了。

但如果准备长期使用,我更加推荐 Docker Compose。

新建目录:

bash 复制代码
mkdir ollama
cd ollama

创建:

text 复制代码
compose.yml

写入:

yaml 复制代码
services:

  ollama:
    image: ollama/ollama:latest
    container_name: ollama

    ports:
      - "11434:11434"

    volumes:
      - ollama_data:/root/.ollama

    restart: unless-stopped

volumes:
  ollama_data:

目录结构:

text 复制代码
ollama/
└── compose.yml

然后启动:

bash 复制代码
docker compose up -d

查看运行状态:

bash 复制代码
docker compose ps

查看日志:

bash 复制代码
docker compose logs -f ollama

八、Docker Compose 下载 DeepSeek-R1

Ollama 启动以后执行:

bash 复制代码
docker compose exec ollama ollama pull deepseek-r1:1.5b

查看模型:

bash 复制代码
docker compose exec ollama ollama list

运行模型:

bash 复制代码
docker compose exec ollama ollama run deepseek-r1:1.5b

这样我们的 Ollama 环境就基本完成了。


九、让 Docker Compose 自动下载 DeepSeek

如果希望第一次启动的时候就自动准备 DeepSeek,还可以增加一个初始化容器。

例如:

yaml 复制代码
services:

  ollama:
    image: ollama/ollama:latest
    container_name: ollama

    ports:
      - "11434:11434"

    volumes:
      - ollama_data:/root/.ollama

    restart: unless-stopped

    healthcheck:
      test: ["CMD", "ollama", "list"]
      interval: 10s
      timeout: 5s
      retries: 10


  ollama-pull:
    image: ollama/ollama:latest

    depends_on:
      ollama:
        condition: service_healthy

    environment:
      OLLAMA_HOST: http://ollama:11434

    entrypoint: /bin/sh

    command:
      - -c
      - |
        ollama pull deepseek-r1:1.5b

    restart: "no"


volumes:

  ollama_data:

然后:

bash 复制代码
docker compose up -d

第一次启动时:

text 复制代码
启动 Ollama
      ↓
等待 Ollama Ready
      ↓
ollama-pull
      ↓
自动下载 deepseek-r1:1.5b

这样比较适合服务器初始化或者自动化部署。


十、通过 HTTP API 调用 DeepSeek

Ollama 最大的价值之一,其实不是命令行聊天,而是它提供了 API。

默认地址:

text 复制代码
http://localhost:11434

例如:

bash 复制代码
curl http://localhost:11434/api/chat \
  -d '{
    "model": "deepseek-r1:1.5b",
    "messages": [
      {
        "role": "user",
        "content": "用简单的话解释一下什么是 Docker"
      }
    ],
    "stream": false
  }'

模型就会返回结果。

Ollama 官方模型页面本身也提供 /api/chat 的调用示例。


十一、使用 generate API

也可以使用:

text 复制代码
/api/generate

例如:

bash 复制代码
curl http://localhost:11434/api/generate \
  -d '{
    "model": "deepseek-r1:1.5b",
    "prompt": "为什么天空是蓝色的?",
    "stream": false
  }'

返回大概类似:

json 复制代码
{
  "model": "deepseek-r1:1.5b",
  "response": "天空呈现蓝色主要与瑞利散射有关......",
  "done": true
}

这意味着你完全可以把 Ollama 当成一个本地 AI API Server。


十二、其他程序如何调用 Ollama?

现在整个架构其实就是:

text 复制代码
                     ┌─────────────────┐
                     │ DeepSeek R1     │
                     │ 1.5B            │
                     └────────▲────────┘
                              │
                     ┌────────┴────────┐
                     │     Ollama      │
                     │     Docker      │
                     └────────▲────────┘
                              │
                           :11434
                              │
           ┌──────────────────┼──────────────────┐
           │                  │                  │
       Python              Node.js           Java/Go
           │                  │                  │
           └──────────────────┴──────────────────┘

所以后面无论是:

  • Python
  • Java
  • Go
  • Node.js
  • AI Agent
  • VS Code 插件
  • Web 项目

都可以连接这个 Ollama 服务。


十三、建议只监听本机端口

如果 Ollama 只准备自己电脑使用,我建议把:

yaml 复制代码
ports:
  - "11434:11434"

改成:

yaml 复制代码
ports:
  - "127.0.0.1:11434:11434"

Docker Compose:

yaml 复制代码
services:

  ollama:
    image: ollama/ollama:latest
    container_name: ollama

    ports:
      - "127.0.0.1:11434:11434"

    volumes:
      - ollama_data:/root/.ollama

    restart: unless-stopped

volumes:

  ollama_data:

这样 Ollama 只允许:

text 复制代码
localhost

访问。

如果直接写:

text 复制代码
11434:11434

Docker 默认可能会把端口发布到主机网络接口。

对于服务器环境尤其要注意,不建议毫无保护地把 Ollama API 直接暴露到公网。


十四、NVIDIA GPU 加速

如果是在 Linux + NVIDIA 显卡环境,可以让 Docker 中的 Ollama 使用 GPU。

首先需要安装:

text 复制代码
NVIDIA Container Toolkit

然后配置 Docker Runtime。

官方给出的 NVIDIA 启动方式为:

bash 复制代码
docker run -d \
  --gpus=all \
  -v ollama:/root/.ollama \
  -p 11434:11434 \
  --name ollama \
  ollama/ollama

Docker Compose 可以写成:

yaml 复制代码
services:

  ollama:
    image: ollama/ollama:latest
    container_name: ollama

    ports:
      - "11434:11434"

    volumes:
      - ollama_data:/root/.ollama

    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities:
                - gpu

    restart: unless-stopped

volumes:

  ollama_data:

启动:

bash 复制代码
docker compose up -d

然后可以检查模型到底运行在 CPU 还是 GPU:

bash 复制代码
docker exec -it ollama ollama ps

例如:

text 复制代码
NAME                 PROCESSOR
deepseek-r1:1.5b     100% GPU

Ollama 官方文档说明,ollama psPROCESSOR 列可以判断模型是运行在 CPU、GPU,还是两者混合运行。


十五、Mac 用户特别注意

这里有一个非常容易踩的坑。

如果你使用的是:

text 复制代码
MacBook
Mac mini
Mac Studio
Apple M1 / M2 / M3 / M4

虽然 Ollama 原生运行可以使用 Apple GPU,但是:

Docker Desktop for macOS 中运行 Ollama,目前不能直接使用 Apple GPU。

原因是 Docker Desktop 没有把 Apple GPU 直接透传给 Ollama Linux 容器。

官方 FAQ 明确说明,Docker Desktop on macOS 的 Ollama GPU acceleration 不可用;而 Ollama 原生 macOS 版本可以在 Apple Silicon 上使用 CPU 和 GPU。

所以如果你使用 Mac:

学 Docker 部署

可以使用:

text 复制代码
Docker + Ollama

但是主要是 CPU 推理。

真正本地长期跑模型

更加推荐:

text 复制代码
macOS
  ↓
原生 Ollama
  ↓
Metal
  ↓
Apple GPU

也就是说:

Mac 上为了性能,优先考虑原生 Ollama;服务器上为了部署方便,Docker Ollama 非常合适。

这个区别一定要搞清楚。


十六、常用 Docker Ollama 命令

最后整理几个经常会用到的命令。

查看容器

bash 复制代码
docker ps

查看日志

bash 复制代码
docker logs -f ollama

查看模型

bash 复制代码
docker exec -it ollama ollama list

下载模型

bash 复制代码
docker exec -it ollama ollama pull deepseek-r1:1.5b

运行模型

bash 复制代码
docker exec -it ollama ollama run deepseek-r1:1.5b

查看运行中的模型

bash 复制代码
docker exec -it ollama ollama ps

删除模型

bash 复制代码
docker exec -it ollama ollama rm deepseek-r1:1.5b

停止 Ollama

bash 复制代码
docker stop ollama

启动 Ollama

bash 复制代码
docker start ollama

Docker Compose 停止

bash 复制代码
docker compose down

Docker Compose 更新 Ollama

bash 复制代码
docker compose pull
docker compose up -d

模型存储在 Docker Volume 中,因此正常重新创建 Ollama 容器并不会要求重新下载所有模型。


十七、最终推荐的 compose.yml

如果只是想快速搭一个自己的本地 Ollama,我建议直接保存下面这个版本:

yaml 复制代码
services:

  ollama:
    image: ollama/ollama:latest
    container_name: ollama

    ports:
      - "127.0.0.1:11434:11434"

    volumes:
      - ollama_data:/root/.ollama

    restart: unless-stopped


volumes:

  ollama_data:

然后:

bash 复制代码
docker compose up -d

下载 DeepSeek:

bash 复制代码
docker compose exec ollama ollama pull deepseek-r1:1.5b

运行:

bash 复制代码
docker compose exec ollama ollama run deepseek-r1:1.5b

到这里,一个完全运行在自己机器上的 DeepSeek 就搭建完成了。


总结

Ollama 把本地运行大语言模型这件事情做得非常简单,而 Docker 又进一步解决了环境部署、迁移和管理的问题。

整个安装过程其实可以浓缩成三步:

bash 复制代码
docker compose up -d

然后:

bash 复制代码
docker compose exec ollama ollama pull deepseek-r1:1.5b

最后:

bash 复制代码
docker compose exec ollama ollama run deepseek-r1:1.5b

我们就拥有了:

text 复制代码
Docker
+
Ollama
+
DeepSeek-R1 1.5B
+
localhost:11434 API

而且整个模型运行在自己的设备上。

对于第一次接触 Ollama 的人来说,deepseek-r1:1.5b 是一个非常合适的入门模型:模型文件大约 1.1GB,部署成本低,可以先把 Docker、Ollama、本地模型和 API 调用这一整套流程跑通,再逐渐尝试 7B、8B、14B、32B 等更大的模型。

如果你的目标不是单纯聊天,而是继续往 AI Agent、本地知识库、IDE 编程助手或者自己的 AI API 服务发展,那么这个 Docker Ollama 环境也可以直接作为后续所有实验的基础设施。

相关推荐
蓝速科技1 小时前
蓝速科技信创落地:平衡安全合规与项目成本的实战方案
android·运维·人工智能·科技·安全·电脑·鸿蒙
NJCloud1 小时前
MooseFS 分布式存储部署与高可用架构实践
linux·运维·分布式·架构
晓晓_za8986681 小时前
Geo 优化源码蒸馏词机制:地域词库构建与匹配逻辑详解
运维·tcp/ip·spring·缓存·ci/cd
奈斯先生Vector2 小时前
从 127.0.0.1:3080 到插件运行时:DeepSeek Harness 远程开发与版本治理实战
linux·运维·人工智能·ubuntu·aigc
FoldWinCard2 小时前
K8s集群部署的方法原理
大数据·容器·kubernetes
Android系统攻城狮2 小时前
Linux PipeWire深度解析之pw_stream_new调用流程与实战(七十八)
linux·运维·服务器·音频进阶·pipewire音频实战进阶
东莞和裕包装4 小时前
如何管控广州定制纸箱生产中的啤切精度与印刷色差质量问题
大数据·运维·网络·人工智能
二宝哥5 小时前
docker安装apisix
docker·容器·apisix
小飞侠在吗5 小时前
Windows 下 Nginx 访问 127.0.0.1 报 50x 错误:根因是路径里 \t 被当成 Tab
运维·windows·nginx