Docker AI 功能详解与应用
本文档详细介绍了 Docker AI 的新功能,旨在通过集成人工智能提升开发者的体验。主要亮点包括 Docker Model Runner,它简化了 AI 模型的管理和部署,支持从各种注册表拉取和运行模型,并通过兼容 OpenAI 的 API 提供服务。此外,MCP Toolkit 实现了容器化 MCP 服务器的无缝设置和管理,而 Ask Gordon 则作为嵌入式 AI 助手,在 Docker Desktop 和 CLI 中提供上下文帮助,包括改进 Dockerfile 和故障排除等。这些功能共同旨在简化 AI 驱动型应用程序的开发和部署。
Docker AI 配置
- ✅ Enable Docker AI (启用 Docker AI)
- 在
Docker Desktop
和命令行(CLI)
中启用 “Ask Gordon
” 功能。
- 在
- ✅ Enable Docker Model Runner (启用 Docker 模型运行器)
- 启用 GPU 加速的推理引擎,用于运行 AI 模型。
- ✅ Enable Docker MCP Toolkit (启用 Docker MCP 工具套件)
- 在 Docker Desktop 中启用 “
MCP Toolkit
” 功能。
- 在 Docker Desktop 中启用 “
- registry-mirrors: https://registry.cn-hangzhou.aliyuncs.com
- 这是 Docker 镜像的镜像地址,国内使用阿里云的镜像加速器可以提高拉取镜像的速度。
Docker Model Runner
Docker Model Runner 让您能够使用 Docker 轻松管理、运行和部署 AI 模型。Docker Model Runner 专为开发者设计,简化了直接从 Docker Hub 或任何符合 OCI 标准的注册表拉取、运行和提供大型语言模型 (LLM) 及其他 AI 模型的流程。
通过与 Docker Desktop 和 Docker Engine 无缝集成,您可以通过兼容 OpenAI 的 API 提供模型服务,将 GGUF 文件打包为 OCI Artifacts,并从命令行和图形界面与模型进行交互。
主要功能
- 从 Docker Hub 拉取和推送模型:轻松管理您的模型版本。
- 在兼容 OpenAI 的 API 上提供模型服务:方便与现有应用程序集成。
- 将 GGUF 文件打包为 OCI Artifacts 并发布到任何容器注册表:灵活地分发您的模型。
- 直接从命令行或 Docker Desktop GUI 运行和交互 AI 模型:提供多种操作方式。
- 管理本地模型并显示日志:便于监控和调试。
工作原理
模型首次使用时会从 Docker Hub 拉取并存储在本地。它们只在运行时收到请求时才加载到内存中,并在不使用时卸载以优化资源。由于模型可能很大,首次拉取可能需要一些时间,但之后它们会缓存在本地以实现更快的访问。您可以使用兼容 OpenAI API
与模型进行交互。
在 Docker Engine 中启用 DMR
-
确保您已安装
Docker Engine
。 -
DMR 可作为软件包使用。要安装它,请运行:
- Ubuntu/Debian
$ sudo apt-get update $ sudo apt-get install docker-model-plugin
- RPM-based distributions
$ sudo dnf update $ sudo dnf install docker-model-plugin
- Ubuntu/Debian
-
测试安装:
$ docker model version $ docker model run ai/smollm2
拉取模型
模型会在本地缓存。使用 Docker CLI 时,您还可以直接从 HuggingFace 拉取模型。
Docker Desktop
Docker CLI
- 从 Docker Hub 拉取
docker model pull ai/smollm2:360M-Q4_K_M
- 从 HuggingFace 拉取
docker model pull hf.co/bartowski/Llama-3.2-1B-Instruct-GGUF
运行模型
Docker Desktop
Docker CLI
docker model run ai/smollm2
发布模型
这适用于任何支持 OCI Artifacts 的容器注册表,而不仅仅是 Docker Hub。
您可以为现有模型打上新标签并将其发布到不同的命名空间和仓库:
# 为已拉取的模型打上新标签
$ docker model tag ai/smollm2 myorg/smollm2
# 推送到 Docker Hub
$ docker model push myorg/smollm2
您还可以直接将 GGUF 格式的模型文件打包为 OCI Artifact 并将其发布到 Docker Hub。
# 下载 GGUF 格式的模型文件,例如从 HuggingFace
$ curl -L -o model.gguf https://huggingface.co/TheBloke/Mistral-7B-v0.1-GGUF/resolve/main/mistral-7b-v0.1.Q4_K_M.gguf
# 将其打包为 OCI Artifact 并推送到 Docker Hub
$ docker model package --gguf "$(pwd)/model.gguf" --push myorg/mistral-7b-v0.1:Q4_K_M
示例:将 Docker Model Runner 集成到您的软件开发生命周期中
您现在可以开始构建由 Docker Model Runner 提供支持的生成式 AI 应用程序。
如果您想尝试现有的 GenAI 应用程序,请按照以下说明操作。
-
设置示例应用程序。克隆并运行以下仓库:
$ git clone https://github.com/docker/hello-genai.git
-
在您的终端中,导航到
hello-genai
目录。 -
运行
run.sh
以拉取所选模型并运行应用程序: -
在浏览器中打开您的应用程序,地址在仓库的 README 中指定。
您将看到 GenAI 应用程序的界面,您可以在其中开始输入您的提示。
您现在可以与您自己的 GenAI 应用程序进行交互,该应用程序由本地模型提供支持。尝试一些提示,并注意响应的速度——所有这些都在您的机器上使用 Docker 运行。
常见问题
有哪些模型可用?
所有可用模型都托管在 ai
的公共 Docker Hub 命名空间。
有哪些 CLI 命令可用?
请参阅参考文档。
有哪些 API 端点可用?
启用 OpenAI API
启用该功能后,新的 API 端点将在以下基本 URL 下可用:
- Docker Desktop
- 容器:
http://model-runner.docker.internal/
- 主机进程:
http://localhost:12434/
- 容器:
- Docker Engine
- 从容器:
http://172.17.0.1:12434/
(其中172.17.0.1
表示主机网关地址) - 从主机进程:
http://localhost:12434/
- 从容器:
172.17.0.1
接口默认可能不适用于 Compose 项目中的容器。 在这种情况下,请在您的 Compose 服务 YAML 中添加extra_hosts
指令:extra_hosts: - "model-runner.docker.internal:host-gateway"
然后您可以通过
http://model-runner.docker.internal:12434/
访问 Docker Model Runner API。
Docker 模型管理端点:
POST /models/create
GET /models
GET /models/{namespace}/{name}
DELETE /models/{namespace}/{name}
OpenAI 端点:
GET /engines/llama.cpp/v1/models
GET /engines/llama.cpp/v1/models/{namespace}/{name}
POST /engines/llama.cpp/v1/chat/completions
POST /engines/llama.cpp/v1/completions
POST /engines/llama.cpp/v1/embeddings
要通过 Unix 套接字 (/var/run/docker.sock
) 调用这些端点,请在其路径前加上 /exp/vDD4.40
。
您可以省略路径中的
llama.cpp
。例如:POST /engines/v1/chat/completions
。
如何通过 OpenAI API 进行交互?
在容器内部
要从另一个容器内部使用 curl
调用 chat/completions
OpenAI 端点:
#!/bin/sh
curl http://model-runner.docker.internal/engines/llama.cpp/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "ai/smollm2",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Please write 500 words about the fall of Rome."
}
]
}'
从主机使用 TCP
要通过 TCP 从主机调用 chat/completions
OpenAI 端点:
-
从 Docker Desktop GUI 或通过 Docker Desktop CLI 启用主机端 TCP 支持。 例如:
docker desktop enable model-runner --tcp <port>
。如果您在 Windows 上运行,还要启用 GPU 加速推理。 请参阅启用 Docker Model Runner。
-
如上一节所述,使用
localhost
和正确的端口进行交互。
#!/bin/sh
curl http://localhost:12434/engines/llama.cpp/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "ai/smollm2",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Please write 500 words about the fall of Rome."
}
]
}'
从主机使用 Unix 套接字
要通过 Docker 套接字从主机使用 curl
调用 chat/completions
OpenAI 端点:
#!/bin/sh
curl --unix-socket $HOME/.docker/run/docker.sock \
localhost/exp/vDD4.40/engines/llama.cpp/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "ai/smollm2",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Please write 500 words about the fall of Rome."
}
]
}'
MCP Toolkit
Docker MCP Toolkit 实现了容器化 MCP 服务器及其与 AI 代理连接的无缝设置、管理和运行。通过提供安全默认配置、一键式设置以及对日益增长的基于 LLM 的客户端生态系统的支持,消除了工具使用障碍。这是从发现 MCP 工具到本地执行的最快捷路径。
MCP 服务器目录:
运行的 MCP 服务器:
配置连接到 MCP 服务器的客户端:
Ask Gordon
Ask Gordon 是您在 Docker Desktop 和 Docker CLI 中嵌入的个人 AI 助手。它旨在简化您的工作流程,帮助您充分利用 Docker 生态系统。
Docker Desktop 界面:
命令行界面:
什么是 Ask Gordon?
Ask Gordon 在 Docker 工具中提供 AI 驱动的协助。它为以下任务提供上下文帮助:
- 改进 Dockerfile
- 运行和故障排除容器
- 与您的镜像和代码交互
- 查找漏洞或配置问题
它了解您的本地环境,包括源代码、Dockerfile 和镜像,以提供个性化和可操作的指导。
这些功能默认情况下未启用,并且尚未准备用于生产环境。您可能还会遇到术语”Docker AI”作为对此技术的更广泛引用。
Gordon 访问哪些数据?
当您使用Ask Gordon 时,它访问的数据取决于您查询的上下文:
- 本地文件:如果您使用
docker ai
命令,Ask Gordon 可以访问执行命令的当前工作目录中的文件和目录。在 Docker Desktop 中,如果您在 Ask Gordon 视图中询问特定文件或目录,系统会提示您选择相关上下文。 - 本地镜像:Gordon 与 Docker Desktop 集成,可以查看本地镜像存储中的所有镜像。这包括您构建或从注册表拉取的镜像。
为了提供准确的响应,Ask Gordon 可能会将相关文件、目录或镜像元数据与您的查询一起发送到 Gordon 后端。这种数据传输通过网络进行,但从不持久存储或与第三方共享。它仅用于处理您的请求并制定响应。
所有传输的数据在传输过程中都进行了加密。
如何收集和使用您的数据
Docker 从您与 Ask Gordon 的交互中收集匿名数据以增强服务。这包括以下内容:
- 您的查询:您向 Gordon 提出的问题。
- 响应:Gordon 提供的答案。
- 反馈:点赞和点踩评级。
为确保隐私和安全:
- 数据经过匿名化处理,无法追溯到您或您的账户。
- Docker 不使用此数据来训练 AI 模型或与第三方共享。
通过使用Ask Gordon,您帮助改进了 Docker AI 的可靠性和准确性,使其对所有用户更加有效。
如果您对数据收集或使用有疑虑,可以随时禁用此功能。
启用 Ask Gordon
- 登录您的 Docker 账户。
- 导航到设置中的 Beta 功能 选项卡。
-
选中 启用 Docker AI 复选框。
将显示 Docker AI 服务条款协议。您必须同意条款才能启用此功能。查看条款并选择 接受并启用 以继续。
- 选择 应用并重启。
使用 Ask Gordon
Docker AI 功能的主要界面是通过 Docker Desktop 中的 Ask Gordon 视图,或者如果您更喜欢使用 CLI:docker ai
CLI 命令。
启用 Docker AI 功能后,您还会在 Docker Desktop 用户界面的其他各个地方找到 Ask Gordon 的引用。每当您在用户界面中遇到带有 星光 (✨) 图标的按钮时,都可以使用该按钮从 Ask Gordon 获得上下文支持。
示例工作流程
Ask Gordon 是一个通用 AI 助手,旨在帮助您完成所有与 Docker 相关的任务和工作流程。如果您需要一些灵感,以下是您可以尝试的几种方法:
- 故障排除崩溃的容器
- 获取运行容器的帮助
- 改进 Dockerfile
有关更多示例,请尝试直接 Ask Gordon。例如:
$ docker ai "你能做什么?"
故障排除崩溃的容器
如果您尝试使用无效配置或命令启动容器,可以使用 Ask Gordon 来故障排除错误。例如,尝试在不指定数据库密码的情况下启动 Postgres 容器:
$ docker run postgres
Error: Database is uninitialized and superuser password is not specified.
You must specify POSTGRES_PASSWORD to a non-empty value for the
superuser. For example, "-e POSTGRES_PASSWORD=password" on "docker run".
You may also use "POSTGRES_HOST_AUTH_METHOD=trust" to allow all
connections without a password. This is *not* recommended.
See PostgreSQL documentation about "trust":
https://www.postgresql.org/docs/current/auth-trust.html
在 Docker Desktop 的 容器 视图中,选择容器名称旁边的 ✨ 图标,或检查容器并打开 Ask Gordon 选项卡。
获取运行容器的帮助
如果您想运行特定镜像但不确定如何操作,Gordon 可能能够帮助您进行设置:
- 从 Docker Hub 拉取镜像(例如,
postgres
)。 - 打开 Docker Desktop 中的 镜像 视图并选择镜像。
- 选择 运行 按钮。
在 运行新容器 对话框中,您应该看到有关 Ask Gordon 的消息。
改进 Dockerfile
Gordon 可以分析您的 Dockerfile 并建议改进。要让 Gordon 使用 docker ai
命令评估您的 Dockerfile:
-
导航到您的项目目录:
$ cd path/to/my/project
-
使用
docker ai
命令评估您的 Dockerfile:$ docker ai rate my Dockerfile
Gordon 将分析您的 Dockerfile 并在几个维度上识别改进机会:
- 构建缓存优化
- 安全性
- 镜像大小效率
- 最佳实践合规性
- 可维护性
- 可重现性
- 可移植性
- 资源效率