【Docker资源分配终极指南】:掌握CPU、内存限制的5大核心技巧

第一章:Docker资源分配的核心概念与重要性

在容器化应用部署中,Docker资源分配是确保系统稳定性与性能的关键环节。合理配置CPU、内存等资源,不仅能避免单个容器占用过多系统资源导致“资源争用”,还能提升整体服务的可用性与响应速度。

资源限制的基本维度

Docker支持对容器运行时资源进行精细化控制,主要包括:
  • CPU限制:通过指定CPU份额或核心绑定来控制处理能力
  • 内存限制:设定最大可用内存,防止内存溢出影响宿主机
  • I/O与网络带宽:可选配置,用于多租户或高并发场景下的流量管控

常见资源配置指令

使用 docker run 命令时,可通过参数实现资源约束。例如:
# 限制容器最多使用2个CPU核心和4GB内存
docker run -d \
  --cpus="2.0" \
  --memory="4g" \
  --name myapp nginx
上述命令中:
  • --cpus="2.0" 表示该容器最多可使用2个CPU逻辑核心的处理时间
  • --memory="4g" 设定内存上限为4GB,超出将触发OOM killer

资源分配策略对比

资源类型默认行为推荐配置场景
CPU无限制,按需竞争高负载微服务、批处理任务
Memory无上限,可能导致系统崩溃内存敏感型应用(如Java服务)
graph TD A[启动容器] --> B{是否设置资源限制?} B -->|是| C[应用CPU/内存约束] B -->|否| D[容器自由使用宿主机资源] C --> E[运行稳定隔离的服务] D --> F[存在资源耗尽风险]

第二章:CPU资源限制的5大关键技术

2.1 理解CPU配额与周期:cgroups原理剖析

在Linux系统中,cgroups(control groups)为进程组提供资源限制、优先级控制和监控能力。其中,CPU子系统通过“配额”(quota)与“周期”(period)机制实现对CPU时间的精细化管理。
CPU配额与周期的基本概念
每个控制组可设定一个周期(默认100ms)内的CPU使用上限。例如,配额设为50ms意味着该组进程在一个周期内最多使用50ms的CPU时间,相当于50%的CPU带宽。
参数含义典型值
cpu.cfs_period_us调度周期(微秒)100000
cpu.cfs_quota_us可用CPU时间(微秒)50000
配置示例与分析
# 设置周期为100ms,配额为30ms
echo 100000 > /sys/fs/cgroup/cpu/mygroup/cpu.cfs_period_us
echo 30000 > /sys/fs/cgroup/cpu/mygroup/cpu.cfs_quota_us
上述命令将组内进程的CPU使用率限制在30%以内。内核CFS调度器会根据这些参数动态调度任务,确保不超出配额。

2.2 实践设置容器CPU份额:--cpu-shares详解

在Docker中,`--cpu-shares` 是用于控制容器CPU资源分配的权重参数。它不设定固定CPU核心数,而是定义容器在CPU资源紧张时能获得的相对处理时间比例。
基本用法示例
docker run -d --name container1 --cpu-shares 512 nginx
docker run -d --name container2 --cpu-shares 1024 nginx
上述命令中,container2的CPU份额是container1的两倍。当两个容器竞争CPU资源时,container2将获得约2/3的CPU时间,container1获得约1/3。
权重对照表
cpu-shares值相对权重
5121x
10242x
20484x
需要注意的是,`--cpu-shares` 仅在CPU资源争用时生效;若系统空闲,容器仍可使用全部可用CPU资源。

2.3 限制容器最大CPU使用:--cpus与--cpu-quota实战

在Docker中,可通过--cpus--cpu-quota参数精确控制容器的CPU资源占用,适用于多租户或资源敏感型应用。

参数说明与对比

  • --cpus=1.5:表示容器最多使用1.5个CPU核心,语法更直观,适合快速配置;
  • --cpu-quota=50000 --cpu-period=100000:底层控制方式,表示每100ms周期内最多运行50ms(即0.5核)。

实际操作示例

docker run -d --name limited-container \
  --cpus=0.5 \
  nginx:alpine
上述命令启动一个Nginx容器,限制其最大CPU使用为0.5核。当系统负载升高时,该容器不会抢占过多CPU资源,保障其他服务稳定性。 更精细的控制可结合--cpu-quota--cpu-period
docker run -d --name fine-control \
  --cpu-period=20000 --cpu-quota=10000 \
  nginx:alpine
此配置等效于0.5核,适用于需要定制调度周期的场景。

2.4 绑定特定CPU核心运行容器:--cpuset-cpus应用技巧

在高并发或实时性要求较高的场景中,为容器绑定指定的CPU核心可有效减少上下文切换开销,提升性能稳定性。Docker通过`--cpuset-cpus`参数实现CPU亲和性控制。
基本语法与使用示例
docker run -d --cpuset-cpus="0-2" nginx
该命令将容器限定在CPU核心0、1、2上运行。适用于多核系统中隔离关键服务,避免资源争抢。
适用场景与配置建议
  • 数据库容器等计算密集型服务
  • 低延迟要求的实时处理系统
  • 与宿主机其他进程进行CPU资源隔离
多容器CPU分配示意表
容器名称分配核心用途
db-container0-3MySQL主库
cache-container4-5Redis缓存

2.5 多容器CPU资源竞争场景调优案例分析

在高密度容器化部署环境中,多个容器共享宿主机CPU资源时易引发性能抖动。某微服务系统中,计算密集型批处理容器与实时API服务共节点运行,导致API响应延迟显著上升。
CPU资源限制配置
通过Kubernetes的resources字段对容器进行CPU资源约束:
resources:
  limits:
    cpu: "2"
  requests:
    cpu: "1"
该配置确保容器最多使用2个CPU核心,调度器依据1个CPU的request值进行合理分配,避免资源争抢。
负载隔离策略
  • 将批处理任务迁移至低优先级命名空间
  • 结合Node Affinity实现工作负载分离
  • 启用CPU Manager静态策略以绑定独占核心
最终API服务P99延迟下降62%,系统稳定性显著提升。

第三章:内存资源控制的关键方法

3.1 内存限制基础:理解--memory与OOM Killer机制

在容器运行时,内存资源的合理分配至关重要。通过 --memory 参数可限制容器可使用的最大物理内存,防止其过度占用宿主机资源。
内存限制的设置方式
docker run -m 512m --name my_container nginx
上述命令将容器内存上限设为 512MB。当容器尝试使用超过该值的内存时,Linux 内核会触发 OOM(Out-of-Memory)Killer 机制。
OOM Killer 的工作原理
内核会根据进程的内存使用情况和优先级评分(oom_score),选择性地终止占用内存较多的进程以释放资源。可通过调整 /proc/<pid>/oom_score_adj 来影响进程被终止的概率。
  • -m--memory 设置硬限制,不可逾越
  • 未设置时,容器可耗尽系统内存,引发全局性能问题
  • 配合 --memory-swap 可进一步控制交换空间使用

3.2 控制容器内存+交换区使用:--memory-swap配置实践

理解 --memory-swap 的作用机制
Docker 中的 `--memory-swap` 参数用于控制容器可使用的总内存与交换空间配额。当设置 `--memory` 时,仅限制物理内存;而 `--memory-swap` 决定了内存与 swap 的总和上限。
典型配置示例
docker run -d \
  --memory=512m \
  --memory-swap=1g \
  nginx
上述命令限制容器最多使用 512MB 物理内存和 512MB swap(总计 1GB)。若 `--memory-swap` 设为 `-1`,则允许无限 swap;若与 `--memory` 相等,则禁用 swap。
参数组合行为对照表
--memory--memory-swap含义
512m1g可用 512MB 内存 + 512MB swap
512m512m禁用 swap,仅限 512MB 内存
512m-1512MB 内存,swap 不受限

3.3 避免内存溢出的监控与预警策略

实时内存监控机制
通过集成Prometheus与应用程序埋点,可实现对JVM或Go运行时内存的持续采集。例如,在Go服务中定期导出堆内存指标:

import "runtime"

func ReportHeapMetrics() {
    var m runtime.MemStats
    runtime.ReadMemStats(&m)
    heapUsed.Set(float64(m.Alloc))
    heapLimit.Set(float64(m.Sys))
}
该函数每秒执行一次,将当前堆使用量m.Alloc和系统分配总量m.Sys上报至监控系统,便于绘制趋势曲线。
动态预警规则配置
使用Grafana结合Prometheus设置分级告警,常见阈值策略如下:
内存使用率告警级别处理动作
>70%Warning记录日志,触发健康检查
>90%Critical发送通知,自动扩容实例

第四章:资源分配的高级配置与优化策略

4.1 使用Docker Compose定义资源约束:production级配置示例

在生产环境中,合理分配容器资源对系统稳定性至关重要。通过 Docker Compose 的 `deploy.resources` 配置项,可精确控制服务的 CPU 与内存使用上限。
资源配置策略
建议为每个服务设置硬性限制(limits)和软性预留(reservations),避免资源争抢。常见资源类型包括 `cpus` 和 `memory`。
version: '3.8'
services:
  web:
    image: nginx:alpine
    deploy:
      resources:
        limits:
          cpus: '2.0'
          memory: 2G
        reservations:
          cpus: '0.5'
          memory: 512M
上述配置中,`web` 服务最多使用 2 个 CPU 核心和 2GB 内存;在资源紧张时,保证至少 0.5 个 CPU 和 512MB 内存可用。这种分级配置保障了关键服务的运行稳定性,同时提升整体资源利用率。

4.2 结合cgroups v2实现更精细资源管理

随着容器化技术的发展,cgroups v2 提供了更统一和层次化的资源控制机制。相比 v1 的多控制器模型,v2 采用单层级结构,避免了资源策略冲突,提升了可维护性。
启用与挂载 cgroups v2
系统需在启动时启用 `systemd.unified_cgroup_hierarchy=1`,或通过手动挂载:

mount -t cgroup2 none /sys/fs/cgroup
该命令将 cgroups v2 挂载至标准路径,使所有进程共享同一控制树,简化资源追踪。
资源限制配置示例
可通过写入特定接口设置 CPU 和内存约束:

echo "max 50000" > /sys/fs/cgroup/demo/cpu.max
echo "1073741824" > /sys/fs/cgroup/demo/memory.max
`cpu.max` 中 "50000" 表示在 100000 周期内最多使用 50% CPU;`memory.max` 限制内存上限为 1GB。
核心优势对比
特性cgroups v1cgroups v2
层级结构多控制器独立层级单一统一层级
资源冲突易发生避免

4.3 容器资源限制在Kubernetes环境中的映射与适配

在Kubernetes中,容器的资源限制通过Pod定义中的`resources`字段进行声明,底层由cgroup实现对CPU和内存的实际控制。该机制确保容器不会过度消耗节点资源。
资源请求与限制配置示例
resources:
  requests:
    memory: "64Mi"
    cpu: "250m"
  limits:
    memory: "128Mi"
    cpu: "500m"
上述配置表示容器启动时请求64Mi内存和0.25个CPU核心,最大允许使用128Mi内存和0.5个CPU核心。当容器内存超过limits值时,将被OOM Killer终止。
资源类型与调度影响
  • CPU限制以millicores为单位,影响调度器的分配决策
  • 内存限制决定容器运行时的物理内存上限
  • 超出limits的容器可能被驱逐,影响服务稳定性

4.4 性能压测验证资源限制有效性:工具与方法论

主流压测工具选型与场景匹配
在验证容器化环境下的资源限制有效性时,需选择支持高并发、可定制负载的性能测试工具。常用工具包括 Apache JMeter、k6 和 wrk2,其中 k6 因其脚本化能力与 Prometheus 集成优势,更适合云原生场景。
  • JMeter:适用于复杂业务流程模拟,支持 GUI 与 CLI 模式
  • k6:基于 JavaScript 脚本,轻量高效,适合 CI/CD 集成
  • wrk2:固定线程模型,提供精确的延迟测量
压测代码示例与参数解析
import http from 'k6/http';
import { sleep } from 'k6';

export const options = {
  vus: 50,       // 虚拟用户数
  duration: '30s',// 测试持续时间
};

export default function () {
  http.get('http://localhost:8080/api/resource');
  sleep(1);
}
该脚本模拟 50 个并发用户持续 30 秒访问目标接口,用于观察在 CPU/memory 限制下服务的响应延迟与错误率变化。
指标采集与分析策略
结合 Prometheus 与 Grafana 可实时监控容器资源使用情况,验证 limit/request 设置是否合理。

第五章:未来趋势与最佳实践总结

云原生架构的持续演进
现代企业正加速向云原生转型,Kubernetes 已成为容器编排的事实标准。结合服务网格(如 Istio)和无服务器技术,可实现更高效的资源调度与弹性伸缩。例如,某金融企业在其核心交易系统中引入 K8s + Knative,将部署周期从小时级缩短至分钟级。
自动化安全策略嵌入 CI/CD 流程
安全左移已成为 DevSecOps 的核心实践。以下代码展示了在 GitHub Actions 中集成静态应用安全测试(SAST)的典型配置:

- name: Run SAST Scan
  uses: gittools/setup-gitversion-action@v1
  with:
    versionSpec: '5.0'
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
该流程确保每次提交均自动检测代码漏洞,减少生产环境风险。
可观测性体系的三位一体建设
日志、指标与追踪的整合至关重要。下表列出主流开源工具组合及其适用场景:
数据类型推荐工具部署复杂度
日志ELK Stack
指标Prometheus + Grafana
分布式追踪Jaeger + OpenTelemetry
团队协作模式优化建议
  • 实施跨职能小队制,提升端到端交付效率
  • 建立共享知识库,使用 Confluence 或 Notion 统一文档管理
  • 定期组织技术复盘会议,推动持续改进机制落地
计及源荷不确定性的综合能源生产单元运行调度与容量配置优化研究(Matlab代码实现)内容概要:本文围绕“计及源荷不确定性的综合能源生产单元运行调度与容量配置优化”展开研究,利用Matlab代码实现相关模型的构建与仿真。研究重点在于综合能源系统中多能耦合特性以及风、光等可再生能源出力和负荷需求的不确定性,通过鲁棒优化、场景生成(如Copula方法)、两阶段优化等手段,实现对能源生产单元的运行调度与容量配置的协同优化,旨在提高系统经济性、可靠性和可再生能源消纳能力。文中提及多种优化算法(如BFO、CPO、PSO等)在调度与预测中的应用,并强调了模型在实际能源系统规划与运行中的参考价值。; 适合人群:具备一定电力系统、能源系统或优化理论基础的研究生、科研人员及工程技术人员,熟悉Matlab编程和基本优化工具(如Yalmip)。; 使用场景及目标:①用于学习和复现综合能源系统中考虑不确定性的优化调度与容量配置方法;②为含高比例可再生能源的微电网、区域能源系统规划设计提供模型参考和技术支持;③开展学术研究,如撰写论文、课题申报时的技术方案借鉴。; 阅读建议:建议结合文中提到的Matlab代码和网盘资料,先理解基础模型(如功率平衡、设备模型),再逐步深入不确定性建模与优化求解过程,注意区分鲁棒优化、随机优化与分布鲁棒优化的适用场景,并尝试复现关键案例以加深理解。
内容概要:本文系统分析了DesignData(设计数据)的存储结构,围绕其形态多元化、版本关联性强、读写特性差异化等核心特性,提出了灵活性、版本化、高效性、一致性和可扩展性五大设计原则。文章深入剖析了三类主流存储方案:关系型数据库适用于结构化元信息存储,具备强一致性与高效查询能力;文档型数据库适配半结构化数据,支持动态字段扩展与嵌套结构;对象存储结合元数据索引则有效应对非结构化大文件的存储需求,具备高扩展性与低成本优势。同时,文章从版本管理、性能优化和数据安全三个关键维度提出设计要点,建议采用全量与增量结合的版本策略、索引与缓存优化性能、并通过权限控制、MD5校验和备份机制保障数据安全。最后提出按数据形态分层存储的核心结论,并针对不同规模团队给出实践建议。; 适合人群:从事工业设计、UI/UX设计、工程设计等领域数字化系统开发的技术人员,以及负责设计数据管理系统架构设计的中高级工程师和系统架构师。; 使用场景及目标:①为设计数据管理系统选型提供依据,合理选择或组合使用关系型数据库、文档型数据库与对象存储;②构建支持版本追溯、高性能访问、安全可控的DesignData存储体系;③解决多用户协作、大文件存储、历史版本管理等实际业务挑战。; 阅读建议:此资源以实际应用场景为导向,结合具体数据库类型和表结构设计进行讲解,建议读者结合自身业务数据特征,对比分析不同存储方案的适用边界,并在系统设计中综合考虑成本、性能与可维护性之间的平衡。
# 地质AI工作流系统完整部署方案(小白终极版) ## 📋 部署前准备 ### 硬件要求检查 - ✅ 操作系统:Windows 11 - ✅ 显卡:NVIDIA 2080ti双显卡(44GB显存) - ✅ 内存:96GB RAM - ✅ 存储:D盘有足够空间(建议至少100GB) ### 第一步:自动创建文件夹结构 1. **下载并运行自动创建脚本**: - 在桌面右键 → **新建** → **文本文档** - 重命名为:`自动创建文件夹.bat` - 右键编辑,粘贴以下代码: ```batch @echo off chcp 65001 >nul title 地质AI工作流系统文件夹创建工具 echo ========================================== echo 正在自动创建地质AI工作流系统文件夹结构 echo ========================================== echo. echo 请确保以管理员身份运行此脚本! echo. set "RootPath=D:\GeologyAI" echo 正在创建根目录... mkdir "%RootPath%" 2>nul echo 正在创建子文件夹... mkdir "%RootPath%\DockerData" 2>nul mkdir "%RootPath%\Ollama" 2>nul mkdir "%RootPath%\RAGFlow" 2>nul mkdir "%RootPath%\Dify" 2>nul mkdir "%RootPath%\Templates" 2>nul mkdir "%RootPath%\Templates\矿产勘查" 2>nul mkdir "%RootPath%\Templates\水工环地质" 2>nul mkdir "%RootPath%\Templates\岩土工程" 2>nul mkdir "%RootPath%\Templates\通用模板" 2>nul mkdir "%RootPath%\数据备份" 2>nul mkdir "%RootPath%\项目文档" 2>nul mkdir "%RootPath%\日志文件" 2>nul echo. echo ✅ 文件夹创建完成! echo. echo 创建的文件夹结构: tree "%RootPath%" /A echo. echo 按任意键退出... pause >nul ``` 2. **运行脚本**: - 右键点击 `自动创建文件夹.bat` - 选择"**以管理员身份运行**" - 等待完成,查看创建的文件夹结构 ### 第二步:开启WSL功能 1. **自动开启WSL**: - 创建新文件:`开启WSL.bat` - 右键编辑,粘贴: ```batch @echo off chcp 65001 >nul echo 正在启用WSL功能... dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart echo 正在启用虚拟机平台... dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart echo. echo ✅ WSL功能已启用! echo 请重启计算机完成安装... echo. pause ``` - 右键"以管理员身份运行" 2. **重启电脑** 3. **安装Ubuntu**: - 按 `Win + S`,输入"Microsoft Store" - 搜索"Ubuntu 22.04 LTS" - 点击"获取"安装 - 安装后打开,设置用户名和密码(记住密码!) ### 第三步:安装Docker Desktop 1. **下载Docker Desktop**: - 访问:https://www.docker.com/products/docker-desktop/ - 下载Windows版本 2. **自定义安装**: - 运行安装程序 - 取消"Use WSL 2 instead of Hyper-V"(如果出现) - 点击"Advanced" - 设置安装路径:`D:\GeologyAI\Docker\` - 设置数据目录:`D:\GeologyAI\DockerData\` - 完成安装 3. **配置Docker**: - 启动Docker Desktop - 右键系统托盘鲸鱼图标 → Settings - General → 勾选"Use the WSL 2 based engine" - 点击"Apply & Restart" ### 第四步:系统环境配置 1. **创建环境配置脚本**: - 在Ubuntu中运行以下命令: ```bash # 设置文件夹权限 sudo chmod -R 777 /mnt/d/GeologyAI/ # 创建项目目录链接 ln -s /mnt/d/GeologyAI ~/GeologyAI # 更新系统 sudo apt update && sudo apt upgrade -y # 安装必要工具 sudo apt install -y curl wget git vim ``` ### 第五步:安装Ollama 1. **创建Ollama安装脚本**: - 在Ubuntu中运行: ```bash cd /mnt/d/GeologyAI # 创建安装脚本 cat > install_ollama.sh << 'EOF' #!/bin/bash echo "开始安装Ollama..." # 安装Ollama curl -fsSL https://ollama.ai/install.sh | sh # 设置模型存储路径 echo 'export OLLAMA_MODELS="/mnt/d/GeologyAI/Ollama"' >> ~/.bashrc source ~/.bashrc # 下载地质行业AI模型 echo "开始下载AI模型(这需要较长时间,请耐心等待)..." ollama pull deepseek-coder:6.7b ollama pull llama2:7b ollama pull deepseek-llm:7b echo "✅ Ollama安装完成!" EOF # 运行安装脚本 chmod +x install_ollama.sh ./install_ollama.sh ``` ### 第六步:部署RAGFlow 1. **创建RAGFlow配置**: - 在Ubuntu中运行: ```bash cd /mnt/d/GeologyAI/RAGFlow # 创建docker-compose配置文件 cat > docker-compose.yml << 'EOF' version: '3.8' services: ragflow: image: inchat/ragflow:latest container_name: ragflow ports: - "9380:9380" volumes: - ./data:/app/data - /mnt/d/GeologyAI/Templates:/templates - /mnt/d/GeologyAI/项目文档:/projects environment: - RAGFLOW_DATA_DIR=/app/data restart: unless-stopped deploy: resources: reservations: devices: - driver: nvidia count: all capabilities: [gpu] EOF # 启动RAGFlow docker-compose up -d ``` ### 第七步:部署Dify 1. **创建Dify配置**: - 在Ubuntu中运行: ```bash cd /mnt/d/GeologyAI/Dify # 创建docker-compose配置文件 cat > docker-compose.yml << 'EOF' version: '3.8' services: dify: image: langgenius/dify:latest container_name: dify ports: - "5001:5001" volumes: - ./data:/app/api/data - /mnt/d/GeologyAI/Templates:/templates environment: - DB_TYPE=sqlite - SQLITE_DATABASE=dify.db restart: unless-stopped EOF # 启动Dify docker-compose up -d ``` ### 第八步:创建地质模板结构 1. **创建模板初始化脚本**: - 在Windows中创建:`初始化地质模板.bat` ```batch @echo off chcp 65001 >nul echo 正在创建地质报告模板结构... set "TemplatePath=D:\GeologyAI\Templates" echo 创建矿产勘查模板目录... mkdir "%TemplatePath%\矿产勘查\第一章_前言" mkdir "%TemplatePath%\矿产勘查\第二章_地质特征" mkdir "%TemplatePath%\矿产勘查\第三章_勘查工作" mkdir "%TemplatePath%\矿产勘查\第四章_资源储量" mkdir "%TemplatePath%\矿产勘查\第五章_结论建议" echo 创建水工环地质模板目录... mkdir "%TemplatePath%\水工环地质\水文地质" mkdir "%TemplatePath%\水工环地质\工程地质" mkdir "%TemplatePath%\水工环地质\环境地质" echo 创建岩土工程模板目录... mkdir "%TemplatePath%\岩土工程\勘察报告" mkdir "%TemplatePath%\岩土工程\测试数据" mkdir "%TemplatePath%\岩土工程\分析评价" echo 创建通用模板目录... mkdir "%TemplatePath%\通用模板\封面页" mkdir "%TemplatePath%\通用模板\目录结构" mkdir "%TemplatePath%\通用模板\图表模板" echo. echo ✅ 地质模板结构创建完成! echo 请将您的Word报告模板复制到相应目录中 echo. pause ``` - 右键"以管理员身份运行" ### 第九步:创建一键管理系统 1. **创建主启动脚本**: - 在Ubuntu中运行: ```bash cd /mnt/d/GeologyAI # 创建主启动脚本 cat > 地质AI工作流系统.sh << 'EOF' #!/bin/bash # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 日志函数 log() { echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1" } error() { echo -e "${RED}[错误]${NC} $1" } warning() { echo -e "${YELLOW}[警告]${NC} $1" } # 主菜单 show_menu() { clear echo -e "${BLUE}==========================================${NC}" echo -e "${BLUE} 地质AI工作流系统管理菜单${NC}" echo -e "${BLUE}==========================================${NC}" echo -e "1. 启动所有服务" echo -e "2. 停止所有服务" echo -e "3. 重启所有服务" echo -e "4. 查看服务状态" echo -e "5. 查看系统日志" echo -e "6. 备份系统数据" echo -e "7. 更新AI模型" echo -e "0. 退出" echo -e "${BLUE}==========================================${NC}" echo -n "请选择操作 [0-7]: " } # 启动所有服务 start_services() { log "启动Ollama AI模型服务..." ollama serve & sleep 10 log "启动RAGFlow知识库系统..." cd /mnt/d/GeologyAI/RAGFlow docker-compose up -d sleep 10 log "启动Dify工作流系统..." cd /mnt/d/GeologyAI/Dify docker-compose up -d sleep 10 log "检查服务状态..." check_status } # 停止所有服务 stop_services() { log "停止RAGFlow服务..." cd /mnt/d/GeologyAI/RAGFlow docker-compose down log "停止Dify服务..." cd /mnt/d/GeologyAI/Dify docker-compose down log "停止Ollama服务..." pkill -f "ollama serve" log "所有服务已停止" } # 重启服务 restart_services() { stop_services sleep 5 start_services } # 检查服务状态 check_status() { log "服务状态检查:" echo -e "\n${YELLOW}Ollama 状态:${NC}" if pgrep -f "ollama serve" > /dev/null; then echo -e "${GREEN}✅ 运行中${NC}" else echo -e "${RED}❌ 未运行${NC}" fi echo -e "\n${YELLOW}RAGFlow 状态:${NC}" cd /mnt/d/GeologyAI/RAGFlow if docker-compose ps | grep -q "Up"; then echo -e "${GREEN}✅ 运行中${NC}" echo -e "访问地址: ${BLUE}http://localhost:9380${NC}" else echo -e "${RED}❌ 未运行${NC}" fi echo -e "\n${YELLOW}Dify 状态:${NC}" cd /mnt/d/GeologyAI/Dify if docker-compose ps | grep -q "Up"; then echo -e "${GREEN}✅ 运行中${NC}" echo -e "访问地址: ${BLUE}http://localhost:5001${NC}" else echo -e "${RED}❌ 未运行${NC}" fi } # 查看日志 show_logs() { echo -e "${YELLOW}选择要查看的日志:${NC}" echo "1. RAGFlow 日志" echo "2. Dify 日志" echo "3. 系统日志" echo "4. 所有日志" echo -n "请选择 [1-4]: " read log_choice case $log_choice in 1) cd /mnt/d/GeologyAI/RAGFlow docker-compose logs -f ;; 2) cd /mnt/d/GeologyAI/Dify docker-compose logs -f ;; 3) tail -f /mnt/d/GeologyAI/日志文件/system.log ;; 4) log "显示所有服务日志..." ;; *) error "无效选择" ;; esac } # 备份数据 backup_data() { log "开始备份系统数据..." BACKUP_DIR="/mnt/d/GeologyAI/数据备份/backup_$(date +%Y%m%d_%H%M%S)" mkdir -p "$BACKUP_DIR" cp -r /mnt/d/GeologyAI/RAGFlow/data "$BACKUP_DIR/" cp -r /mnt/d/GeologyAI/Dify/data "$BACKUP_DIR/" cp -r /mnt/d/GeologyAI/Templates "$BACKUP_DIR/" log "数据备份完成: $BACKUP_DIR" } # 更新模型 update_models() { log "更新AI模型..." ollama pull deepseek-coder:latest ollama pull llama2:latest log "模型更新完成" } # 主循环 while true; do show_menu read choice case $choice in 1) start_services ;; 2) stop_services ;; 3) restart_services ;; 4) check_status ;; 5) show_logs ;; 6) backup_data ;; 7) update_models ;; 0) log "感谢使用地质AI工作流系统!" exit 0 ;; *) error "无效选择,请重新输入" ;; esac echo echo -n "按任意键继续..." read -n 1 done EOF # 设置执行权限 chmod +x 地质AI工作流系统.sh # 创建Windows快捷方式脚本 cat > create_shortcut.bat << 'EOF' @echo off chcp 65001 >nul echo 创建地质AI系统快捷方式... set SCRIPT_PATH="%USERPROFILE%\Desktop\启动地质AI系统.lnk" set TARGET="wsl.exe" set ARGUMENTS="-d Ubuntu-22.04 -e bash /mnt/d/GeologyAI/地质AI工作流系统.sh" echo 创建桌面快捷方式... powershell -Command "$WshShell = New-Object -comObject WScript.Shell; $Shortcut = $WshShell.CreateShortcut(%SCRIPT_PATH%); $Shortcut.TargetPath = %TARGET%; $Shortcut.Arguments = %ARGUMENTS%; $Shortcut.Save()" echo ✅ 快捷方式创建完成! echo 桌面上的"启动地质AI系统"快捷方式已创建 pause EOF # 在Windows中运行快捷方式创建 cmd.exe /c create_shortcut.bat ``` ### 第十步:验证部署 1. **创建验证脚本**: - 在Ubuntu中运行: ```bash cd /mnt/d/GeologyAI # 创建验证脚本 cat > 系统验证.sh << 'EOF' #!/bin/bash echo "开始验证地质AI工作流系统..." echo "1. 检查文件夹结构..." ls -la /mnt/d/GeologyAI/ echo "2. 检查Docker服务..." docker --version docker-compose --version echo "3. 检查Ollama..." ollama --version ollama list echo "4. 检查容器状态..." cd /mnt/d/GeologyAI/RAGFlow && docker-compose ps cd /mnt/d/GeologyAI/Dify && docker-compose ps echo "5. 测试网络访问..." echo "RAGFlow: http://localhost:9380" echo "Dify: http://localhost:5001" echo "✅ 验证完成!" EOF chmod +x 系统验证.sh ./系统验证.sh ``` ## 🎯 使用指南 ### 启动系统: 1. 双击桌面"**启动地质AI系统**"快捷方式 2. 在菜单中选择"1"启动所有服务 3. 等待服务启动完成 ### 访问系统: - **知识库管理**:http://localhost:9380 - **工作流配置**:http://localhost:5001 ### 地质工作流程: 1. **准备知识**:在RAGFlow中上传地质规范、技术标准 2. **配置模板**:在Templates文件夹中放置报告模板 3. **创建工作流**:在Dify中配置报告生成流程 4. **生成报告**:输入勘查数据,自动生成专业报告 ## 🔧 故障排除 ### 常见问题解决: 1. **端口冲突**: ```bash # 修改RAGFlow端口为9381 # 修改Dify端口为5002 ``` 2. **Docker启动失败**: - 检查Docker Desktop是否运行 - 重启Docker服务 3. **模型下载慢**: ```bash # 使用镜像加速 OLLAMA_HOST=0.0.0.0 ollama pull deepseek-coder:6.7b ``` 4. **权限问题**: ```bash sudo chmod -R 777 /mnt/d/GeologyAI/ ``` ## 💾 维护指南 ### 日常维护: - 定期使用菜单选项"6"备份数据 - 使用菜单选项"4"检查服务状态 - 定期使用菜单选项"7"更新AI模型 ### 数据备份: 重要数据位置: - `D:\GeologyAI\RAGFlow\data\` - 知识库数据 - `D:\GeologyAI\Dify\data\` - 工作流配置 - `D:\GeologyAI\Ollama\` - AI模型 - `D:\GeologyAI\Templates\` - 报告模板 分析完善以上部署方案
09-30
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值