KylinV10系统下Docker容器化部署DeepSeek方案 —— 集成Ollama/VLLM/GPUStack与Open-WebUI的全栈实现

前言

由于博主所使用的麒麟操作系统是基于CentOS 7.6进行改造的,导致无法直接在裸机环境中运行Ollama和VLLM等应用。经过深入研究和实践,我们最终采用了Docker容器化部署方案,这也是很多信创厂家改造的方式。其中,Docker镜像源的选择尤为关键,直接影响部署的效率和稳定性。在此特别感谢轩辕镜像提供的优质镜像资源,使得这一部署方案不仅适用于麒麟操作系统,在众多其他国产操作系统上也展现了良好的兼容性和通用性。本文将详细介绍这一部署方案的具体实施步骤,希望能为面临类似技术挑战的开发者提供有价值的参考。

一、环境准备

1.1 安装Docker

yum install docker -y
systemctl start docker
systemctl enable docker

1.2 配置加速镜像源

创建配置文件/etc/docker/daemon.json:

{
    "registry-mirrors": [
        "https://docker.xuanyuan.me",
        "https://docker.1ms.run"
    ]
}

重启服务生效:

systemctl daemon-reload
systemctl restart docker

二、Ollama模型服务部署

2.1 基础部署(CPU模式),昇腾的用欧拉可以适配驱动,命令其实都是一样的

# 拉取官方镜像
docker pull ollama/ollama

# 启动容器并运行DeepSeek模型
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
docker exec -it ollama ollama run deepseek-r1:1.5b

在这里插入图片描述

其他方法:不想用ollama,用GPUStack加速(昇腾GPU)

服务端部署
docker run -d --name gpustack \
    --restart=unless-stopped \
    -e ASCEND_VISIBLE_DEVICES=0 \    # 指定GPU设备索引
    -p 80:80 \
    --ipc=host \
    -v gpustack-data:/var/lib/gpustack \
    gpustack/gpustack:latest-GPU

# 获取管理员密码
docker exec -it gpustack cat /var/lib/gpustack/initial_admin_password
Worker节点注册(可选)
# 获取服务器令牌
TOKEN=$(docker exec gpustack cat /var/lib/gpustack/token)

# 启动Worker节点
docker run -d --name gpustack-worker \
    -e ASCEND_VISIBLE_DEVICES=0 \
    -p 10150:10150 \
    -p 40000-41024:40000-41024 \
    --ipc=host \
    -v gpustack-worker-data:/var/lib/gpustack \
    gpustack/gpustack:latest-GPU \
    --server-url http://<SERVER_IP> \
    --token $TOKEN \
    --worker-ip <WORKER_IP>

三、Open WebUI可视化部署

# 拉取最新镜像
docker pull dyrnq/open-webui

# 启动Web服务(需关联Ollama)
docker run -d \
    --name webui \
    -p 19999:8080 \
    --link ollama:ollama \
    dyrnq/open-webui

四、服务验证

  1. 模型服务验证
    访问 http://localhost:11434 检查Ollama API状态

  2. WebUI访问
    浏览器打开 http://<服务器IP>:19999 即可使用交互界面

  3. GPU资源监控
    GPUStack控制台可通过 http://<服务器IP>:80 查看GPU利用率


五、注意事项

  1. 硬件要求

    • 鲲鹏920处理器(ARMv8架构)
    • 昇腾 GPU需已安装CANN工具包(≥5.0.RC2)
    • 内存建议≥32GB
  2. 容器网络配置

    • 若跨主机部署需开放 1015040000-41024 端口范围
    • Docker网桥建议使用 macvlan 模式
  3. 模型管理

    • Ollama模型默认存储在 /var/lib/docker/volumes/ollama
    • 可挂载NFS目录实现分布式存储

附录:常见问题排查

Q1:GPU设备未识别

# 检查nPU驱动状态
npu-smi info
# 验证设备权限
ls -l /dev/davinci*
<think>好的,我现在需要解释用户提供的Docker命令中的每个参数的功能和作用。首先,我得回忆一下Docker的基本命令结构和常用参数。用户给出的命令是: docker run -d -p 80:8080 -v ollama:/root/.ollama -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:ollama 首先,这个命令的大致结构是docker run [选项] 镜像名[:标签]。接下来要分解每个参数: 1. -d:应该是让容器在后台运行,也就是detached模式。 2. -p 80:8080:端口映射,主机的80端口映射到容器的8080端口。 3. -v ollama:/root/.ollama:挂载卷,这里可能是指定卷的名称和容器内的路径。 4. -v open-webui:/app/backend/data:另一个卷挂载。 5. --name open-webui:给容器指定一个名字。 6. --restart always:设置容器的重启策略,总是重启。 7. ghcr.io/open-webui/open-webui:ollama:镜像名称和标签。 需要确认每个参数的具体含义,尤其是卷的部分,是否使用的是命名卷,以及路径是否正确。另外,端口映射和重启策略也需要详细说明。例如,-p参数的格式是主机端口:容器端口,所以这里将主机的80端口转发到容器的8080。--restart always意味着无论容器退出状态如何,都会自动重启,这有助于保持服务持续运行。 可能还需要指出这些参数在实际应用中的作用,比如使用命名卷可以持久化数据,防止容器删除后数据丢失。另外,命名容器方便管理,避免随机生成的名称带来的麻烦。 另外,用户提供的引用中有提到一些类似的命令,比如引用[2]中的命令和用户的问题中的命令相似,但端口不同,一个是3000,另一个是80。这可能影响外部访问的端口,需要注意说明端口映射的重要性。 需要确保解释清晰,每个参数都分点说明,并且结合实际应用场景,帮助用户理解为什么需要这些参数。同时,可能还需要提到常见的使用场景,比如开发环境中的持久化存储,生产环境中的自动恢复等。 最后,检查是否有遗漏的参数或可能的误解,比如卷的名称和路径是否正确,是否有特殊的主机配置需要考虑,比如--add-host在示例中出现过,但当前命令中没有,所以不需要提及。确保每个部分都准确对应用户给出的命令参数。</think>以下是对Docker命令`docker run -d -p 80:8080 -v ollama:/root/.ollama -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:ollama`的参数解析,按功能分类说明: --- ### **1. 基础运行控制** - **`-d`** 以“分离模式”(detached mode)运行容器,使容器在后台运行,不占用当前终端窗口[^2][^3]。 - **`--name open-webui`** 为容器指定唯一名称`open-webui`,便于后续通过名称管理容器(如启动、停止操作)[^4]。 - **`--restart always`** 设置容器自动重启策略: - `always`表示无论容器因何退出(包括正常退出或错误),都会自动重新启动,确保服务高可用性[^4]。 --- ### **2. 网络端口映射** - **`-p 80:8080`** 绑定宿主机(主机)容器的端口: - 宿主机端口`80`(HTTP默认端口)接收外部请求。 - 容器内部端口`8080`提供服务。 - 最终用户通过`http://宿主机IP:80`访问容器内`8080`端口的应用。 --- ### **3. 数据持久化(卷挂载)** - **`-v ollama:/root/.ollama`** 创建名为`ollama`的**命名卷**,并挂载到容器内路径`/root/.ollama`: - 用于保存Ollama模型数据,避免容器删除后数据丢失。 - **`-v open-webui:/app/backend/data`** 创建名为`open-webui`的**命名卷**,挂载到容器内路径`/app/backend/data`: - 存储Open WebUI的配置文件、数据库等持久化数据[^3]。 --- ### **4. 镜像版本** - **`ghcr.io/open-webui/open-webui:ollama`** 指定从GitHub容器仓库(GHCR)拉取的镜像: - 镜像名称:`ghcr.io/open-webui/open-webui` - 标签(版本):`ollama`,表示专为Ollama集成优化的版本[^2]。 --- ### **实际应用场景** - 该命令适用于部署支持Ollama模型的Open WebUI服务,常用于本地开发或生产环境: - 通过端口`80`提供Web访问,适配标准HTTP端口需求。 - 持久化存储保证模型和配置不丢失。 - 自动重启增强服务稳定性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值