KDnuggets

Building AI Agents with Docker Agent

8.5内容质量

TL;DR · AI 摘要

Docker Agent通过声明式YAML配置实现AI代理容器化,支持多模型协作与OCI仓库分发,已获3300星标。

核心要点

  • 使用YAML/HCL定义AI代理,无需编程背景
  • 支持OpenAI/Anthropic/AWS Bedrock等9大模型平台
  • 代理可推送到OCI兼容仓库实现版本化分发

结构提纲

按章节快速跳转。

  1. Docker Agent通过容器理念革新AI代理开发方式

  2. 采用YAML声明式配置替代传统代码开发AI代理

  3. 集成Docker Model Runner实现本地模型运行

  4. 兼容OpenAI/Anthropic/Gemini等9大平台

  5. 支持OCI仓库分发与多环境部署策略

  6. 实现多代理团队的自动化任务分配

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • Docker Agent
    • 核心功能
      • 声明式配置(YAML/HCL)
      • 多模型支持
      • 多代理协作
    • 技术集成
      • Docker Model Runner
      • OCI仓库分发
    • 运行模式
      • 本地执行
      • 远程服务器
      • 容器隔离

金句 / Highlights

值得收藏与分享的关键句。

  • Docker Agent通过YAML配置实现AI代理的定义、版本控制和共享,无需编程背景

    — 第2段

    ⬇︎ 下载 PNG𝕏 分享到 X
  • 已集成OpenAI、Anthropic、Gemini等9大模型平台,支持本地模型通过Docker Model Runner运行

    — 第2段

    ⬇︎ 下载 PNG𝕏 分享到 X
  • 代理团队可实现多代理协作,任务自动分配,且支持本地/远程/MCP服务器三种运行模式

    — 第2段

    ⬇︎ 下载 PNG𝕏 分享到 X
  • 超过3300 GitHub星标和近10000次提交,显示社区快速采用趋势

    — 第2段

    ⬇︎ 下载 PNG𝕏 分享到 X
#Docker Agent#AI代理#容器化#MLOps#开源工具
打开原文

使用 Docker Agent 构建 AI 代理 - KDnuggets

publ: 2026年10月8日

  • 博客热门文章
  • 主题 AI 职业建议 计算机视觉 数据工程 数据科学 语言模型 机器学习 MLOps NLP 编程 Python SQL
  • 数据集
  • 活动
  • 资源 快速参考指南 推荐 技术简报
  • 广告

订阅通讯

#header end

/ad_wrapper

使用 Docker Agent 构建 AI 代理

Docker Agent 是由 Docker 工程团队开发的开源 CLI 插件,采用 Apache 2.0 许可证,安装后通过 docker agent 命令运行。其官方标语清晰地表达了目标:像运行容器一样运行 AI 代理。

作者:Shittu Olumide,技术内容专家 2026年10月8日发布于 人工智能

<div class="addthis_native_toolbox"></div>

Docker 一直以一个理念著称:一次打包软件,任何地方都能以相同方式运行。Docker Agent 将这一理念应用于 AI 代理:通过声明式配置而非代码描述代理,通过 CLI 插件运行它们,并通过与存储容器镜像相同的 OCI 注册表进行分发。如果你曾希望 AI 代理能像容器一样被定义、版本化和共享,这个工具正好填补了这一空白。

这是一篇完整的实践教程,从完全空白的安装开始,直到构建出真正可用的多代理团队。

什么是 Docker Agent?

Docker Agent 是由 Docker 工程团队开发的开源 CLI 插件,采用 Apache 2.0 许可证,安装后通过 docker agent 命令运行。其官方标语清晰地表达了目标:像运行容器一样运行 AI 代理。在 pkg.go.dev 上的 Go 模块历史记录显示,该项目自 2026 年 3 月起已有早期版本发布,发展迅速;目前该项目已在 GitHub 上获得超过 3300 颗星标,提交记录接近 10000 次。

该项目并非凭空出现。Docker 在 2025 年就为这一目标做了充分准备:2025 年 7 月的公告将 Docker Compose 扩展为直接支持代理和 AI 模型,Docker Model Runner 作为无需云 API 密钥即可本地运行模型的工具。Docker Agent 是将这些基础工作整合为单一专用工具的成果,而非在 Compose 上添加单一功能。

其独特之处在于:代理通过 YAML(或 HCL)定义,而非代码,这意味着无需软件工程背景即可构建。它与供应商无关,兼容 OpenAI、Anthropic、Gemini、AWS Bedrock、Mistral、xAI 以及通过 Docker Model Runner 运行的本地模型,配置不锁定单一厂商。支持真正的多代理编排,即多个专业化代理之间相互委托工作。其工具生态系统包含内置工具和任何 MCP 服务器,可本地、远程或在隔离的 Docker 容器中运行。最后,呼应容器类比,完成的代理可推送和拉取至任何 OCI 兼容注册表——这正是 Docker 镜像已使用的分发机制。

先决条件与 Docker Agent 安装

你需要三样东西:在机器上安装 Docker、实际运行它的方法,以及至少一个语言模型的访问权限。

安装有三种途径。如果你使用的是 Docker Desktop 4.63 或更高版本,插件已内置;只需运行 docker agent。

通过 Homebrew 安装,执行 brew install docker-agent 直接安装二进制文件;运行时使用 docker-agent,或通过符号链接至 ~/.docker/cli-plugins/docker-agent 以使用 docker agent 格式。

对于二进制版本,可直接从 GitHub Releases 下载并以相同方式创建符号链接。

接下来是设置模型,你有两个实际选择。最简单的方式是使用云服务商的 API 密钥,并作为环境变量设置:

code
export ANTHROPIC_API_KEY=sk-ant-your-key-here
# 或 OPENAI_API_KEY, GOOGLE_API_KEY,具体取决于你的服务商

或者完全跳过云密钥,通过 Docker Model Runner 本地运行模型。本教程其余部分在指定模型时会以替代方案标注。确认安装成功:

code
docker agent --help

如果该命令输出命令列表而非错误信息,说明你已准备好创建第一个真实代理。

构建你的第一个代理

最小的 Docker Agent 实际上只是一个 YAML 文件。创建 agent.yaml:

code
agents:
  root:
    model: anthropic/claude-sonnet-4-5
    description: A helpful coding assistant
    instruction: |
      You are an expert software developer. Help users write
      clean, efficient code. Explain your reasoning step by step.
    toolsets:
      - type: filesystem
      - type: shell
      - type: think

代码说明:

  • root 是该代理的名称,每个配置至少需要一个同名代理作为入口点,模型遵循 提供商/模型名称 格式,此处通过 Anthropic 指向 Claude Sonnet 4.5
  • description 是运行时用来识别代理的简要说明,当配置中存在多个代理时变得重要
  • instruction 是系统提示——你实际定义的行为,以自然语言编写
  • toolsets 是该代理可使用的功能列表:filesystem 提供文件读写权限;shell 允许运行命令;think 为代理提供结构化空间进行分步推理,对缺乏原生推理能力的模型特别有用

通过交互式终端界面运行:

code
docker agent run agent.yaml

或以非交互方式运行单个任务,适用于脚本或 CI:

code
docker agent run --exec agent.yaml "Create a Dockerfile for a Node.js app"

代码说明:

  • 第一条命令将带你进入与代理的实时聊天会话
  • --exec 标志完全跳过交互循环,发送单条指令,输出结果后退出——如果你是从脚本而非终端调用该代理,这将是实际使用的格式

为你的代理提供真实工具

文件系统和 shell 工具很有用,但真正有能力的代理通常还需要访问机器外部的资源。Docker Agent 的 MCP 支持就是实现这一目标的方式,特别需要理解推荐模式:在独立的 Docker 容器中运行 MCP 服务器,与主机系统隔离,而不是作为本地进程运行。

code
agents:
  root:
    model: anthropic/claude-sonnet-4-5
    description: Research assistant with memory and web search
    instruction: |
      You are a research assistant. Search the web for information,
      remember important findings, and provide thorough analysis.
    toolsets:
      - type: think
      - type: memory
        path: ./research.db
      - type: mcp
        ref: docker:duckduckgo
  • 内存工具集为代理提供了一个持久化的存储位置./research.db,使其能够在会话的不同回合中回忆事实,而不是每次消息都重新开始。需要特别注意的是带有 ref: docker:duckduckgo 的 mcp 工具集——docker: 这个前缀会指示 Docker Agent 在自己的容器内运行 DuckDuckGo MCP 服务器,这是官方推荐使用 MCP 工具的方式,因为默认情况下它通过容器实现了安全隔离,而不是信任任意本地进程访问你的系统。此配置也通过了真实模式的验证,确认字段名称和结构完全正确。

构建多代理团队

这正是 Docker Agent 所擅长的领域。与其让一个代理尝试完成所有任务,不如定义一个小团队——每个成员都有明确的职责——并设置一个协调器在它们之间进行任务分配。本节的项目案例:内容研究团队,协调器将主题交给研究员,再将研究结果传递给写作者生成最终报告。

code
agents:
  root:
    model: anthropic/claude-sonnet-4-5
    description: 内容研究团队的协调器
    instruction: |
      你是一个协调小型研究团队的内容负责人。
      当收到主题时,将网络研究任务分配给研究员,
      然后将研究结果传递给写作者生成一份简明、
      结构清晰的报告。在向用户展示前请审核最终输出内容。
    sub_agents: [researcher, writer]
    toolsets:
      - type: think

  researcher:
    model: openai/gpt-5
    description: 负责收集和总结研究发现的网络研究员
    instruction: |
      在给定主题上搜索当前可信的信息,
      以结构化列表形式总结关键发现,
      并为每个主张标注来源。
    toolsets:
      - type: mcp
        ref: docker:duckduckgo
      - type: memory
        path: ./research.db

  writer:
    model: anthropic/claude-sonnet-4-5
    description: 将研究发现转化为清晰、有条理的报告
    instruction: |
      根据提供的研究发现撰写一份简明、结构清晰的报告,
      使普通读者能够轻松理解,使用清晰的章节标题,
      避免未经解释的专业术语。
    toolsets:
      - type: filesystem
  • 根代理中的 sub_agents: [researcher, writer] 这一行将三个独立代理转变为一个协调团队——它会自动授予 root 对内置 transfer_task 工具的访问权限,无需任何额外配置。当协调器决定让研究员处理某项任务时,会调用 transfer_task(agent="researcher", task="...", expected_output="...")——这会启动研究员自己的干净子会话,等待其完成后再将结果返回协调器,协调器随后继续执行。这与 Docker Agent 的另一种多代理模式 handoffs 形成真正不同的模式,在 handoffs 模式中整个对话及其完整历史会传递给下一个代理并直接切换控制权——handoffs 更适合流水线场景,而当前项目正好需要协调器进行任务分配并综合结果,这正是本项目的结构特征。

请注意每个代理使用了不同的提供商:协调员和写作者使用 Claude,研究员使用 GPT-5。这是一个真实且有意为之的设计,而非不一致之处:Docker Agent 的架构明确旨在让您为每个特定角色选择最佳模型,而不是强制使用单一模型处理团队中的所有任务。上述三代理配置已通过与早期示例相同的模式验证,且验证结果完全通过。

验证和运行您的配置

在信任任何配置之前,检查其格式正确性是值得的。Docker Agent 的真实模式定义使这成为一个可验证的步骤,而非猜测。以下是本文中用于验证所有配置的验证器,它直接基于项目仓库中发布的模式构建:

code
import yaml, json, jsonschema

with open("agent-schema.json") as f:
    SCHEMA = json.load(f)

def validate(yaml_text: str, label: str):
    config = yaml.safe_load(yaml_text)
    try:
        jsonschema.validate(instance=config, schema=SCHEMA)
        print(f"[{label}] VALID against agent-schema.json")
    except jsonschema.ValidationError as e:
        print(f"[{label}] SCHEMA VALIDATION ERROR: {e.message}")
  • agent-schema.json 直接从 docker/docker-agent 仓库下载,因此此验证是针对实际最新规范进行的,而非近似值

为确认此验证器确实能发现错误而非盲目通过,我们故意使用了一个包含虚构工具类型 not_a_real_toolset_type 的损坏配置进行测试,验证器正确地报出清晰的模式错误并定位到具体问题位置。本文之前展示的所有配置均通过了相同的验证。

确认配置有效后,Docker Agent 提供几种实际运行方式。交互式终端 UI(如前所述)是默认方式。对于自动化场景,docker agent run --exec agent.yaml "your task" 会执行一次后退出。添加 --yolo 参数会自动批准代理所有工具调用——这对完全无人值守的运行很有用,但建议谨慎使用而非作为默认选项,因为这会跳过代理决策与实际执行之间的确认步骤。如果您更倾向于通过实践学习,docker agent getting-started 会启动一个简短的脚本化教程,可在真实聊天界面中跳过查看。

打包和共享您的代理

当如上文所示的团队配置运行方式符合预期后,Docker 用于容器镜像的 OCI 标准分发机制可直接应用于代理。完成的代理可推送到任意 OCI 兼容仓库,并可在任何运行 Docker Agent 的地方拉取,无需对方端有任何本地 YAML 文件:

code
docker agent run myorg/agent:tag

代理还可以通过相同仓库系统相互引用作为子代理,一个配置中可混合本地代理和共享的外部维护代理成员:

code
agents:
  root:
    model: openai/gpt-5
    description: 委派给共享且固定版本研究代理的协调者
    instruction: |
      将研究任务委派给共享研究代理。
    sub_agents:
      - reviewer:docker.io/myorg/review-agent@sha256:44117e73263afa5c861bdf3730dae7925918ffdd146827eee5bcff20bc55e8fa

代码说明:通过简单的标签(如 myorg/agent:latest)引用外部代理意味着 Docker Agent 在每次运行时都会重新解析该标签,这通常会增加一两秒的启动延迟,并且如果注册表或凭据出现问题,这会成为真正的故障点。相反,通过固定到不可变摘要(即上面显示的长 @sha256:... 字符串)可以告诉运行时直接从本地缓存中加载代理,完全无需网络往返,从而保持启动速度,更重要的是,确保团队行为完全可复现:标签可能会在之后静默指向不同的更新代理,而摘要永远不会这样。此配置也通过了验证,确认外部引用语法完全符合架构预期。

总结

这里真正的贡献并不是一种新的模型提示方式,因为已有许多工具能很好地实现这一点。关键在于将代理的定义——其模型、指令、工具和队友——视为一种可移植、可版本控制的工件,可以将其提交到源代码控制中,自动验证,并通过与容器镜像相同的注册表基础设施进行分发。

从单代理文件开始,确认其行为符合预期,然后像本教程一样逐步扩展为一个团队——每次委派一个角色,每一步都根据真实架构进行验证,而不是假设看起来正确的 YAML 文件就是正确的。

Shittu Olumide 是一位软件工程师和技术作家,热衷于利用前沿技术创作引人入胜的故事,注重细节并擅长简化复杂概念。你也可以在 Twitter 上找到 Shittu。

更多相关内容

  • 构建强大 AI 代理的五大代理技能市场
  • 使用代理开发工具包构建生产级 AI 代理
  • Docker AI 与代理构建者:模型、工具和云卸载
  • 如何构建并发布 Docker 镜像到 Docker Hub
  • 构建流式本地 AI 代理
  • 构建和部署你的第一个自主代理的 7 个步骤

<hr class="grey-line"><br> <div><h3>我们推荐的 5 门免费课程</h3><br> </div>

Mailchimp for WordPress v4.14.1 - https://wordpress.org/plugins/mailchimp-for-wp/

/ Mailchimp for WordPress 插件

你可以从此处开始编辑。

如果评论已关闭。

<= 上一篇

下一篇 =>

#content end

<script type="text/javascript">kda_sid_write(kda_sid_n);</script>

最新文章

  • 在企业级 AI 中弥合算法设计与监管标准的差距 使用 Docker Agent 构建 AI 代理 7 个学习自我进化 AI 代理的最佳资源 OpenAI Dots:数据科学家的现实检验 2026 年 ML 工程师、AI 工程师或 LLM 工程师:哪种角色实际上构建了什么? 我测试了 5 个 AI 编码助手一个月:这是我实际发现的

热门文章

  • 工程中的 Python 基础:KDnuggets 快速参考
  • 10 个让代码更简洁更快的 Python 一行式代码
  • 使用 Ollama 管理本地语言模型:KDnuggets 快速参考
  • 如何使用 Marimo 进行交互式数据分析
  • 学习 AI 工程的 5 门免费课程
  • 2026 年可使用的 5 个免费 LLM API 提供商
  • Meta Muse 解析:它是什么、如何运作以及能做什么
  • 从杂乱文档到结构化数据:使用 Docling
  • 我测试了 5 个 AI 编码助手一个月:这是我实际发现的
  • 前置部署工程师:AI 最热门的新职业,还是拥有更好头衔的咨询?

#content_wrapper end

© 2026

Guiding Tech Media

|

About

Contact

Advertise

Privacy

Terms of Service

Published on October 8, 2026 by Olumide Shittu

blank

No, thanks!

/.main_wrapper

<script defer type="text/javascript" src="https://s7.addthis.com/js/300/addthis_widget.js#pubid=gpsaddthis"></script>

noptimize

/noptimize