Docker GenAI Stack 部署 Ollama 的 7 个关键步骤(附完整配置清单)

第一章:Docker GenAI Stack 与 Ollama 集成概述

在现代人工智能应用开发中,本地化运行大语言模型(LLM)正变得越来越重要。Docker GenAI Stack 提供了一套容器化的工具链,用于快速部署和管理生成式 AI 应用环境,而 Ollama 是一个轻量级框架,支持在本地高效运行 LLM 模型,如 Llama 3、Mistral 等。通过将两者集成,开发者可以在隔离且可复用的环境中快速启动和测试 AI 模型服务。

核心优势

  • 环境一致性:Docker 容器确保开发、测试与生产环境的一致性
  • 模型即服务:Ollama 将模型加载封装为 REST API,便于调用
  • 资源隔离:利用容器限制 CPU、内存使用,提升系统稳定性

典型集成流程

  1. 启动 Ollama 服务容器
  2. 拉取所需模型(如 llama3)
  3. 通过 Docker Compose 编排 GenAI 应用栈
以下是一个典型的 docker-compose.yml 配置示例:
# 启动 Ollama 服务并暴露 API 端口
version: '3.8'
services:
  ollama:
    image: ollama/ollama:latest
    ports:
      - "11434:11434"  # Ollama 默认 API 端口
    volumes:
      - ollama_data:/root/.ollama  # 持久化模型存储

  genai-app:
    build: ./app
    depends_on:
      - ollama
    environment:
      - OLLAMA_HOST=http://ollama:11434
    ports:
      - "3000:3000"

volumes:
  ollama_data:
该配置通过 Docker Compose 同时管理 Ollama 核心服务与上层 GenAI 应用,实现一键部署。genai-app 可通过环境变量访问 Ollama 提供的模型推理能力。

支持的模型类型

模型名称架构适用场景
llama3Transformer通用对话、内容生成
mistralDecoder-only代码生成、逻辑推理
graph LR A[Client Request] --> B[Docker Network] B --> C[GenAI App Container] C --> D[Ollama API] D --> E[Loaded LLM Model] E --> F[Response Return]

第二章:环境准备与基础组件部署

2.1 理解 Docker GenAI Stack 架构设计

Docker GenAI Stack 是面向生成式 AI 应用的一体化容器化平台,其架构融合了模型服务、数据管道与推理优化组件。
核心组件构成
  • Model Runner:负责加载大语言模型(LLM),支持 GGUF、ONNX 等格式
  • Prompt Gateway:统一接收用户提示,实现请求路由与上下文管理
  • Vector Cache:集成近似最近邻(ANN)索引,加速语义检索
典型部署配置
services:
  llm-engine:
    image: ghcr.io/docker/genai-runner:latest
    runtime: nvidia
    environment:
      - MODEL_ID=meta-llama/Llama-3-8B-Instruct
      - GPU_MEMORY_LIMIT=20Gi
该配置声明使用 NVIDIA GPU 运行 Llama-3-8B 模型,通过环境变量控制资源配额,确保推理稳定性。

2.2 安装并配置 Docker 与 Compose 环境

为了构建现代化的容器化应用,首先需在开发或生产环境中部署 Docker 与 Docker Compose。主流 Linux 发行版可通过包管理器便捷安装。
安装 Docker 引擎
以 Ubuntu 为例,执行以下命令添加官方仓库并安装:
sudo apt update
sudo apt install docker.io
sudo usermod -aG docker $USER
该脚本启用系统级 Docker 服务,并将当前用户加入 docker 用户组,避免每次使用 sudo 执行命令。
配置 Docker Compose
Docker Compose 可通过 Python 的 pip 工具安装:
  1. 安装 pip3: sudo apt install python3-pip
  2. 全局安装 compose: pip3 install docker-compose
安装完成后,可通过 docker-compose --version 验证版本信息。
运行状态验证
组件验证命令预期输出示例
Dockerdocker --versionDocker version 24.0.7
Composedocker-compose versiondocker-compose version 1.29.2

2.3 搭建 GPU 支持的运行时依赖(nvidia-container-toolkit)

为了在容器环境中调用 NVIDIA GPU,必须安装 nvidia-container-toolkit,它使容器运行时(如 Docker)能够访问 GPU 硬件资源。
安装步骤
首先配置 NVIDIA 的 APT 仓库并安装必要组件:

# 添加 NVIDIA 官方 GPG 密钥和仓库
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
  sudo tee /etc/apt/sources.list.d/nvidia-docker.list

# 更新包索引并安装工具包
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
该脚本配置了 NVIDIA 提供的容器工具包源,确保系统可获取最新稳定版本。其中 nvidia-container-toolkit 是核心组件,负责将 GPU 设备挂载到容器中。
配置 Docker 使用 NVIDIA 运行时
修改 Docker 守护进程配置文件:

{
    "default-runtime": "nvidia",
    "runtimes": {
        "nvidia": {
            "path": "/usr/bin/nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}
将上述 JSON 写入 /etc/docker/daemon.json 后重启 Docker 服务,即可默认启用 GPU 支持。

2.4 初始化项目结构与目录规划

良好的项目结构是工程可维护性的基石。合理的目录划分有助于团队协作、依赖管理和持续集成。
标准项目布局示例
采用通用的 Go 项目结构,主目录按功能模块垂直拆分:

my-service/
├── cmd/              # 主程序入口
├── internal/         # 核心业务逻辑
├── pkg/              # 可复用的公共组件
├── config/           # 配置文件定义
├── api/              # API 路由与 DTO 定义
├── go.mod            # 模块依赖管理
└── Makefile          # 构建与部署脚本
该结构通过 internal 限制包的外部访问,保障封装性;pkg 提供可被外部引用的工具集。
关键目录职责说明
目录职责
cmd服务启动逻辑,避免存放业务代码
internal私有业务实现,防止外部导入
api定义 HTTP 接口契约与版本控制

2.5 验证基础容器运行能力与网络连通性

在完成容器环境部署后,首要任务是验证其基本运行能力和网络通信状态。通过启动一个轻量级调试容器,可快速检验节点的容器运行时是否正常工作。
启动测试容器
使用以下命令运行一个带有网络功能的 Alpine Linux 容器:
docker run -d --name test-container alpine sleep 3600
该命令启动一个后台容器,执行 sleep 3600 以保持运行状态,便于后续进入调试。镜像选择 alpine 因其体积小且包含基础网络工具。
网络连通性检测
进入容器并测试外部网络可达性:
docker exec -it test-container ping -c 4 8.8.8.8
若收到 ICMP 回显回复,表明容器具备基本出站网络能力。进一步测试 DNS 解析:
docker exec -it test-container nslookup google.com
成功解析则说明 DNS 配置正确。 以下表格总结关键验证步骤及预期结果:
测试项命令示例预期结果
容器运行docker pstest-container 处于运行状态
网络连通ping 8.8.8.8收到回包,无丢包
DNS 解析nslookup google.com返回 IP 地址列表

第三章:Ollama 服务集成与模型管理

3.1 部署 Ollama 容器并启用 API 接口

在本地环境中部署 Ollama 服务,推荐使用 Docker 容器化方式以保证环境一致性。首先拉取官方镜像并启动容器实例。
启动 Ollama 容器

docker run -d \
  --name ollama \
  -p 11434:11434 \
  -v ollama_data:/root/.ollama \
  ollama/ollama
该命令将 Ollama 服务运行在后台模式(-d),映射主机的 11434 端口用于对外提供 API 接口(-p),并通过命名卷 ollama_data 持久化模型数据,避免重启丢失。
验证 API 可用性
  • 服务启动后,可通过 curl http://localhost:11434 检查响应状态码是否为 200
  • 确认接口正常后,即可通过 HTTP 请求加载模型或执行推理任务

3.2 拉取与加载大语言模型(如 Llama3、Mistral)

在本地或云端部署大语言模型的第一步是正确拉取并加载模型权重。Hugging Face 提供了 `transformers` 和 `huggingface_hub` 工具库,极大简化了这一流程。
使用 Transformers 加载模型

from transformers import AutoTokenizer, AutoModelForCausalLM

model_name = "meta-llama/Meta-Llama-3-8B"  # 或 "mistralai/Mistral-7B-v0.1"
tokenizer = AutoTokenizer.from_pretrained(model_name, use_auth_token=True)
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto", use_auth_token=True)
该代码片段通过模型名称自动从 Hugging Face 下载 tokenizer 和模型结构。use_auth_token=True 确保访问受保护的模型仓库;device_map="auto" 实现多GPU或CPU/GPU混合部署的自动分配。
常见支持的模型列表
  • Llama3 系列:8B、70B 参数版本
  • Mistral-7B:高效推理架构,支持长上下文
  • Falcon、Mixtral 等开源模型亦适用相同加载范式

3.3 配置持久化存储与模型缓存策略

持久化机制选择
在高并发AI服务中,选择合适的持久化存储至关重要。推荐使用Redis作为缓存层,结合PostgreSQL实现结构化数据持久化,保障数据一致性与访问效率。
缓存策略配置示例
cache:
  backend: redis
  host: localhost
  port: 6379
  db: 0
  ttl: 3600  # 缓存过期时间(秒)
上述配置指定Redis为缓存后端,设置键值对生存周期为1小时,有效避免内存溢出并保证数据时效性。
缓存更新机制对比
策略优点适用场景
Write-Through数据一致性高强一致性要求场景
Write-Behind写入性能优高吞吐异步处理

第四章:高级功能配置与安全优化

4.1 配置反向代理与 HTTPS 访问(Nginx + SSL)

反向代理基础配置
使用 Nginx 作为反向代理服务器,可将外部请求转发至后端应用服务。以下是最简配置示例:

server {
    listen 80;
    server_name example.com;
    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}
该配置监听 80 端口,将所有请求转发至本地 3000 端口的服务,并保留客户端原始信息。
启用 HTTPS 与 SSL 证书
为提升安全性,需配置 SSL 加密。假设已通过 Let's Encrypt 获取证书:

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    location / {
        proxy_pass http://localhost:3000;
    }
}
上述配置启用 443 端口并加载证书文件,实现加密通信。建议配合 HSTS 增强安全策略。

4.2 实现身份认证与 API 访问控制(JWT/OAuth)

在现代 Web 应用中,安全的身份认证机制是保障系统资源访问控制的核心。JSON Web Token(JWT)和 OAuth 2.0 是当前主流的两种技术方案,分别适用于不同场景。
JWT:无状态会话管理
JWT 通过签名令牌实现用户身份验证,服务端无需存储会话信息。典型的 JWT 由三部分组成:头部、载荷与签名。

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
该结构支持跨域认证,适合分布式系统。其中 `sub` 表示用户唯一标识,`iat` 为签发时间,需配合密钥验证防止篡改。
OAuth 2.0:第三方授权框架
OAuth 更侧重于授权而非认证,常用于允许用户授权第三方应用有限访问其资源而不暴露密码。其核心角色包括客户端、资源所有者、授权服务器和资源服务器。 常见授权模式包括:
  • 授权码模式(Authorization Code)——适用于 Web 应用
  • 隐式模式 —— 适用于单页应用
  • 客户端凭证模式 —— 适用于服务间调用
结合 JWT 与 OAuth 可构建既安全又灵活的 API 安全体系,实现细粒度的访问控制策略。

4.3 资源限制与性能调优(CPU/GPU/内存约束)

在高并发与大规模计算场景中,合理分配和限制系统资源是保障服务稳定性的关键。容器化环境中,可通过配置资源请求(requests)和限制(limits)实现对 CPU、内存的精细化控制。
资源配置示例
resources:
  requests:
    memory: "512Mi"
    cpu: "250m"
  limits:
    memory: "1Gi"
    cpu: "500m"
上述配置确保容器启动时至少获得 512Mi 内存和 0.25 核 CPU,上限为 1Gi 内存和 0.5 核。超出内存限制将触发 OOM Killer,而 CPU 超限仅会 throttling。
GPU 资源调度
使用 Kubernetes 调度 NVIDIA GPU 时,需声明资源类型:
  • nvidia.com/gpu: 1
  • 确保节点安装 GPU 驱动与设备插件
  • 支持多框架(如 TensorFlow、PyTorch)的并行训练优化
通过监控指标持续调优,可提升资源利用率并避免节点过载。

4.4 日志收集与监控集成(Prometheus + Grafana)

监控架构设计
在现代云原生环境中,Prometheus 负责指标采集,Grafana 实现可视化展示。系统通过暴露 /metrics 接口供 Prometheus 抓取数据。

scrape_configs:
  - job_name: 'node_exporter'
    static_configs:
      - targets: ['localhost:9100']
该配置定义了从本机 9100 端口抓取节点指标,Prometheus 按周期轮询,存储时间序列数据。
告警与看板集成
Grafana 通过添加 Prometheus 为数据源,构建实时监控面板。支持自定义图表、阈值告警规则。
组件作用
Prometheus指标采集与存储
Grafana可视化与告警

第五章:总结与生产环境部署建议

配置管理最佳实践
在生产环境中,统一的配置管理是系统稳定运行的基础。推荐使用环境变量结合配置中心(如 Consul 或 Apollo)进行动态配置加载,避免硬编码敏感信息。
  • 数据库连接字符串应通过环境变量注入
  • 日志级别支持运行时动态调整
  • 配置变更需触发热更新机制,避免重启服务
高可用部署架构
采用多可用区部署可有效提升系统容灾能力。以下为典型 Kubernetes 部署策略示例:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-service
spec:
  replicas: 6
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
  template:
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchExpressions:
                  - key: app
                    operator: In
                    values:
                      - web-service
              topologyKey: "kubernetes.io/hostname"
监控与告警体系
完整的可观测性方案应涵盖指标、日志和链路追踪。建议集成 Prometheus + Grafana + Loki + Tempo 技术栈。
组件用途采样频率
Prometheus收集 CPU、内存、请求延迟等指标15s
Loki聚合结构化日志实时
Tempo分布式链路追踪分析按需采样 10%
安全加固措施
所有对外服务必须启用 TLS 1.3,内部微服务间通信采用 mTLS 双向认证。定期执行漏洞扫描,镜像构建阶段集成 Trivy 静态检测。
<think>我们正在讨论如何在Docker环境中部署Dify并配置Ollama大模型。根据用户的需求,我们需要完成以下步骤: 1. 部署Dify:Dify是一个开源的大模型应用开发平台,支持多种大模型。 2. 配置OllamaOllama是一个在本地运行大模型的工具,支持多种模型,如Llama2、Mistral等。 为了在Docker部署Dify并集成Ollama,我们需要: - 确保DockerDocker Compose已安装。 - 获取Dify的Docker Compose配置文件。 - 修改配置文件以使用Ollama作为大模型服务。 具体步骤: ### 步骤1:安装DockerDocker Compose 确保系统已安装DockerDocker Compose。如果没有安装,可以参考以下命令(以Ubuntu为例): ```bash # 安装Docker sudo apt-get update sudo apt-get install docker.io # 安装Docker Compose sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose ``` ### 步骤2:获取Dify的Docker Compose配置文件 Dify官方提供了Docker Compose部署方式。我们可以从GitHub仓库获取配置文件。 ```bash # 创建项目目录并进入 mkdir -p ~/dify && cd ~/dify # 下载docker-compose.yml curl -o docker-compose.yml https://raw.githubusercontent.com/langgenius/dify/main/docker/docker-compose.yml # 下载.env配置文件 curl -o .env https://raw.githubusercontent.com/langgenius/dify/main/docker/.env.example ``` ### 步骤3:配置Ollama服务 Ollama通常运行在本地,监听11434端口。我们需要在Dify中配置Ollama的API地址。 首先,我们需要在docker-compose.yml中添加Ollama服务。修改docker-compose.yml,添加以下内容: ```yaml version: '3' services: # Dify原有的服务 dify-api: ... # 保持原有配置 dify-worker: ... # 保持原有配置 # 添加Ollama服务 ollama: image: ollama/ollama ports: - "11434:11434" volumes: - ollama:/root/.ollama networks: - dify # 原有网络和卷配置 volumes: ... # 原有卷 ollama: # 为Ollama添加卷 networks: dify: driver: bridge ``` ### 步骤4:修改Dify的环境变量以使用Ollama 编辑`.env`文件,设置大模型为Ollama提供的模型。例如,我们可以使用Ollama的Llama2模型。 在`.env`文件中,找到以下配置并修改: ```bash # 设置模型提供商为Ollama LLM_SERVICE=ollama OLLAMA_API_BASE_URL=http://ollama:11434 # 选择模型,例如llama2 OLLAMA_MODEL_NAME=llama2 ``` 注意:由于我们在同一个Docker Compose网络中,可以使用服务名`ollama`来访问Ollama服务。 ### 步骤5:启动服务 运行以下命令启动Dify和Ollama: ```bash docker-compose up -d ``` ### 步骤6:验证部署 1. 检查容器是否正常运行: ```bash docker-compose ps ``` 2. 访问Dify的Web界面(默认端口为80,即http://localhost),并登录(初始账号:admin@dify.ai,密码:difyai123456)。 3. 在Dify中创建应用,选择模型为Ollama提供的模型(如llama2),进行测试。 ### 注意事项 - Ollama在首次使用某个模型时会自动下载,因此需要确保网络畅通,并且有足够的磁盘空间。 - 如果需要使用其他模型,可以在Ollama容器中执行命令下载,例如: ```bash docker-compose exec ollama ollama pull mistral ``` 然后在Dify的模型设置中选择`mistral`。 通过以上步骤,我们成功在Docker环境中部署了Dify,并集成了Ollama大模型服务。 §§相关问题§§ 1. 如何更新Dify到最新版本? 2. 如何配置Dify使用其他大模型服务(如OpenAI、Azure OpenAI)? 3. 如何扩展Ollama支持的模型? 4. 如何备份和恢复Dify的数据?</think>### 在Docker环境中部署Dify并配置Ollama大模型的完整指南 #### 1. 准备工作 - **安装DockerDocker Compose** 确保系统已安装最新版Docker Engine和Docker Compose: ```bash sudo apt update && sudo apt install docker.io docker-compose ``` - **创建部署目录** ```bash mkdir -p ~/dify-ollama-deploy/{data,config} && cd ~/dify-ollama-deploy ``` #### 2. 配置Docker Compose文件 (`docker-compose.yml`) ```yaml version: '3.8' services: # Dify核心服务 dify-api: image: langgenius/dify:latest environment: - APP_LOG_LEVEL=info - MODEL_PROVIDER=ollama - OLLAMA_API_HOST=http://ollama:11434 volumes: - ./data:/data depends_on: - ollama ports: - "80:80" # Ollama大模型服务 ollama: image: ollama/ollama:latest volumes: - ./config/ollama:/root/.ollama ports: - "11434:11434" ``` #### 3. Ollama模型配置 1. 启动Ollama容器: ```bash docker-compose up -d ollama ``` 2. 下载所需大模型(如Llama2): ```bash docker exec -it dify-ollama-deploy_ollama_1 ollama pull llama2 ``` 3. 验证模型: ```bash curl http://localhost:11434/api/tags # 应返回已下载模型列表 ``` #### 4. 启动Dify服务 ```bash docker-compose up -d ``` #### 5. 验证部署 1. 访问Dify Web界面: `http://<服务器IP>` 2. 登录凭证(首次启动): ``` 账号:admin@dify.ai 密码:difyai123456 ``` 3. 在Dify中配置模型: - 进入 **"模型供应商" > "Ollama"** - 设置模型名称:`llama2`(与下载的模型名一致) - API地址保持默认:`http://ollama:11434` #### 6. 关键配置说明 | 配置项 | 值 | 作用 | |--------|----|------| | `MODEL_PROVIDER` | `ollama` | 指定使用Ollama服务 | | `OLLAMA_API_HOST` | `http://ollama:11434` | Docker内部通信地址 | | 卷映射 | `./data:/data` | 持久化Dify数据 | | 卷映射 | `./config/ollama:/root/.ollama` | 持久化模型文件 | #### 7. 常见问题排查 - **模型加载失败**: 检查Ollama容器日志:`docker-compose logs ollama` - **API连接错误**: 在Dify容器内测试连接: ```bash docker exec -it dify-api curl http://ollama:11434 ``` - **性能优化**: 在`docker-compose.yml`中添加GPU支持: ```yaml ollama: deploy: resources: reservations: devices: - driver: nvidia count: 1 capabilities: [gpu] ``` > **注意**:首次运行需下载模型(约3-7GB),确保磁盘空间充足。可通过`docker system df`监控存储使用情况[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值