Ubuntu 20.04 Docker 部署 Ollama + DeepSeek-Coder:本地 AI 编程助手实战

摘要

想在本地拥有一套完全属于自己的 AI 编程助手,无需联网、无惧数据隐私问题?本文手把手带你从零开始在 Ubuntu 20.04 上搭建基于 Docker 的 Ollama 运行环境,并部署 DeepSeek-Coder-V2 模型。内容涵盖 Docker 安装、国内镜像加速配置、Ollama 容器化部署、模型数据持久化、Python 调用环境(LangChain + Chroma),以及通过 SSH 连接 Gitee 仓库的完整流程。

适用人群 / 前置知识

适用人群 :希望在本地运行大语言模型的开发者、AI 爱好者、关注数据隐私的技术人员。
前置知识:熟悉 Linux 终端基本命令(cd, ls, sudo 等);了解 Docker 的基本概念(镜像、容器、卷);知道什么是 SSH 密钥以及 GitHub / Gitee 的基本使用

引言

随着大语言模型的快速发展,像 DeepSeek-Coder 这样的代码模型已经能在普通消费级硬件上运行。但很多教程依赖直接安装 Ollama 到宿主机,可能导致环境冲突、升级困难。使用 Docker 部署则能完美隔离环境,并借助数据卷实现模型持久化。本文记录了一套经过验证的完整流程,帮你避开国内网络、权限配置等常见"坑"。

一、在 Ubuntu 20.04 上安装 Docker

如果你的系统尚未安装 Docker,请按以下步骤操作。已安装的读者可跳过本节。

1. 更新系统包索引

python 复制代码
sudo apt update

2. 安装必要依赖

Docker 官方仓库需要 apt-transport-https、ca-certificates 和 curl 等工具:

python 复制代码
sudo apt install apt-transport-https ca-certificates curl software-properties-common

3. 添加 Docker 官方 GPG 密钥

python 复制代码
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

4. 添加 Docker APT 仓库

python 复制代码
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

5. 安装 Docker 引擎及相关组件

python 复制代码
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

6. 启动并验证 Docker

python 复制代码
sudo systemctl start docker
sudo systemctl enable docker
docker --version

运行测试容器:

python 复制代码
sudo docker run hello-world

若输出欢迎信息,说明安装成功。

💡 小提示:每次使用 docker 命令都加 sudo 比较繁琐。可以将当前用户加入 docker 组:

python 复制代码
sudo usermod -aG docker $USER

之后重新登录终端即可免 sudo 运行 Docker 命令。

二、配置 Docker 国内镜像加速器(必看)

在国内拉取 Docker Hub 镜像时,极易遇到 context deadline exceeded 超时错误。这是因为官方仓库访问不稳定。解决方法是配置多个国内镜像加速器。

1. 创建/编辑 Docker 配置文件

python 复制代码
sudo mkdir -p /etc/docker

2. 写入加速器地址

这里提供了三组经过验证的可用地址,多源配置能避免单点故障:

python 复制代码
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://docker.1panel.live",
    "https://hub.rat.dev"
  ]
}
EOF

3. 重启 Docker 服务

python 复制代码
sudo systemctl daemon-reload
sudo systemctl restart docker

4. 验证配置

python 复制代码
docker info | grep -A 2 "Registry Mirrors"

如果能看到你配置的地址列表,表示加速器已生效。

📌 延伸见解:配置镜像加速器是"一劳永逸"的优化。即使你只是偶尔拉取镜像,也强烈建议完成这一步。另外,部分企业内网可能还有自己的私有镜像仓库,配置方法类似。

三、在 Docker 中运行 Ollama

1. 拉取官方 Ollama 镜像

python 复制代码
docker pull ollama/ollama

如果加速器配置正确,拉取过程应该稳定快速。

2. 解决 Docker 权限问题(可选)

若你在拉取或运行容器时遇到类似以下错误:

python 复制代码
permission denied while trying to connect to the Docker daemon socket

说明当前用户不在 docker 组中。两种解决办法:

复制代码
临时方案:所有 docker 命令前加 sudo

永久方案:执行 sudo usermod -aG docker $USER 并重新登录

3. 运行 Ollama 容器(带数据卷映射)

python 复制代码
docker run -d \
  --name ollama.docker \
  -p 11434:11434 \
  -v ollama:/root/.ollama \
  ollama/ollama

参数解释:

  • -d:后台运行容器
  • --name ollama.docker:指定容器名称(方便后续管理)
  • -p 11434:11434:将容器的 11434 端口映射到宿主机同一端口
  • -v ollama:/root/.ollama:创建 Docker 数据卷 ollama,挂载到模型存储目录

为什么数据卷映射如此重要?

  • ❌ 没有映射:容器删除后,所有下载的模型(如 DeepSeek-Coder)都会丢失,下次需要重新下载(几个 GB 甚至几十 GB)。
  • ✅ 有了映射:即使容器被删除或升级,模型文件依然保存在数据卷中。重新启动新容器时,只需挂载同一个卷,模型即刻可用。

4. 验证容器运行状态

python 复制代码
docker ps | grep ollama.docker

四、下载并运行 DeepSeek-Coder 模型

本文以 DeepSeek-Coder-V2 16B 模型为例(标准量化版约 8.9GB,对硬件相对友好)。

1. 拉取模型

python 复制代码
docker exec ollama.docker ollama pull deepseek-coder-v2:16b

docker exec 允许我们在运行中的容器内执行命令。ollama pull 会下载模型到数据卷映射的路径中。

2. 运行模型(后台)

python 复制代码
docker exec -d ollama.docker ollama run deepseek-coder-v2:16b

3. 测试模型:用 Python 写一个快速排序

python 复制代码
docker exec ollama.docker ollama run deepseek-coder-v2:16b "用Python写一个快速排序算法"

如果一切正常,你会看到模型生成的代码输出。至此,一个本地的 AI 代码助手已就绪。

💡 常见问题:模型下载中途失败怎么办?

可以使用 docker logs ollama.docker 查看容器日志。如果是网络问题,检查镜像加速器配置;如果是磁盘空间不足,请清理硬盘或更换模型(如尝试更小的 deepseek-coder-v2:6.7b)。

五、搭建 Python 调用环境

有了 Ollama 服务,我们还需要一个 Python 环境来开发应用(例如结合 LangChain 实现 RAG 或构建 API)。

1. 使用 Conda 创建虚拟环境

python 复制代码
conda create -n ollama python=3.10 -y
conda activate ollama

2. 安装必要的依赖包

python 复制代码
pip install langchain langchain-ollama langchain-chroma chromadb pypdf
  • langchain-ollama:LangChain 官方 Ollama 集成
  • chromadb:轻量级向量数据库,用于存储文档嵌入
  • pypdf:处理 PDF 文件(可用于构建本地知识库)

3. 验证 Ollama 连接(Python 示例)

创建一个测试脚本 test_ollama.py:

python 复制代码
from langchain_ollama import OllamaLLM

llm = OllamaLLM(model="deepseek-coder-v2:16b", base_url="http://localhost:11434")
response = llm.invoke("解释一下 Docker 数据卷的作用")
print(response)

运行 python test_ollama.py,若输出正常,则 Python 环境与 Ollama 容器已打通。

六、配置 Git 与 Gitee SSH 连接(代码管理)

为了管理你的 AI 项目代码,建议使用 Git 并连接 Gitee 仓库。SSH 方式比 HTTPS 更安全且无需重复输入密码。

1. 安装 Git

python 复制代码
sudo apt update
sudo apt install git -y
git --version

2. 配置用户信息

python 复制代码
git config --global user.name "你的Gitee用户名"
git config --global user.email "你的Gitee注册邮箱"

3. 生成 SSH 密钥对(ed25519 算法)

python 复制代码
ssh-keygen -t ed25519 -C "你的Gitee注册邮箱"

按三次回车(不设密码短语也可)。密钥默认保存在 ~/.ssh/id_ed25519(私钥)和 ~/.ssh/id_ed25519.pub(公钥)。

4. 添加公钥到 Gitee

  • 查看并复制公钥:cat ~/.ssh/id_ed25519.pub
  • 登录 Gitee → 右上角头像 → 设置 → 安全设置 → SSH公钥 → 添加公钥
  • 粘贴公钥内容,标题任意(如 My-Ubuntu),点击确定。

5. 验证 SSH 连接

python 复制代码
ssh -T git@gitee.com

成功会显示:Hi 用户名! You've successfully authenticated...

6. 克隆或推送仓库(使用 SSH 地址)

在 Gitee 仓库页面,点击 克隆/下载 → 选择 SSH 标签,复制地址(格式 git@gitee.com:用户名/仓库名.git)。

如果你已有 HTTPS 远程地址,可以修改为 SSH:

python 复制代码
git remote set-url origin git@gitee.com:用户名/仓库名.git
git push -u origin master
复制代码
⚠️ 注意:Gitee 现已不再支持 HTTPS 密码登录(需使用私人令牌),强烈建议统一使用 SSH 方式。

七、常见问题与注意事项

  1. docker pull 超时:配置镜像加速器(见第二节)
  2. 权限不足(socket 错误):将用户加入 docker 组或使用 sudo
  3. 容器删除后模型丢失:启动容器时务必使用 -v ollama:/root/.ollama 数据卷映射
  4. 模型下载太慢:检查网络
  5. SSH 连接 Gitee 失败:确认公钥已添加,且仓库地址为 SSH 格式
  6. conda 命令未找到:需先安装 Anaconda/Miniconda,或使用 Python 自带的 venv

总结

通过本文的完整流程,你已经成功在 Ubuntu 20.04 上搭建了一个基于 Docker 的本地 AI 编程环境:

复制代码
✅ Docker 安装与国内镜像加速

✅ Ollama 容器化运行,模型数据持久化

✅ 下载并运行 DeepSeek-Coder 模型

✅ Python 调用环境(LangChain + Chroma)

✅ Git 与 Gitee SSH 连接

这个环境不仅可以用作代码生成助手,还可以进一步扩展为本地知识库问答、代码审查工具等。所有数据都在你的机器上,安全可控。如果你使用的是 NVIDIA GPU,还可以尝试添加 --gpus all 参数启用 GPU 加速,让模型推理飞起来。

下一步建议:尝试用 LangChain 构建一个简单的 RAG 应用,让 Ollama 根据你本地的 PDF 文档回答问题。享受本地 AI 带来的乐趣吧!

参考链接

  1. https://developer.aliyun.com/article/1656693
  2. https://blog.eimoon.com/p/run-ollama-in-docker-local-llms-simplified/
相关推荐
码匠许师傅2 小时前
【STM32开发笔记】基于STM32CubeMX2 和STM32CubeIDE for VSCode的全新STM32C5开发体验
笔记·vscode·stm32
Stone_OverLooking2 小时前
vscode 配置Qt qmake项目
ide·vscode·qt
愈努力俞幸运2 小时前
docker 容器连接, dockerfile
运维·docker·容器
小连~2 小时前
Docker
docker·容器
blog.pytool.com2 小时前
Ubuntu + VSCODE +aarch64 +qt +qmake +clangd
linux·qt·ubuntu
来两个炸鸡腿3 小时前
【Datawhale2604】Hello-agents task01 智能体经典范式构建
人工智能·大模型·智能体
如此热烈走向夏天3 小时前
科研中常用的GIT常用指令
git
ฅ ฅBonnie3 小时前
使用 VSCODE 连接远程服务器上的容器
服务器·ide·vscode
守护安静星空3 小时前
esp32开发笔记-wifi网络
网络·笔记·vscode·单片机·tcp/ip