AI 重塑運維:基于 Spring AI 的 Docker 自然語言管理實踐
MCP (Model Context Protocol) 是一個創(chuàng)新的開源協議,它的核心目標是徹底簡化 AI 應用程序的開發(fā)流程。通過提供標準化的通信接口,MCP 在 AI 模型與應用程序上下文之間搭建了一座智能橋梁,讓開發(fā)者能夠更加高效地構建和部署 AI 驅動的應用。
MCP Docker 服務器使用指南
圖片
在容器化技術日益普及的今天,Docker 的管理和運維工作往往需要掌握大量的命令和配置知識。MCP Docker 服務器應運而生,它是一個革命性的工具,能讓你通過自然語言來管理 Docker 容器,大大降低了使用門檻。
通過 MCP Docker 服務器,你可以用日常對話的方式來完成復雜的容器管理任務。例如,你只需要用自然語言告訴 AI:"啟動一個 Nginx 容器并映射到 8080 端口,掛載指定目錄的靜態(tài)文件",AI 就能自動完成所有必要的部署步驟,包括:
- 拉取合適的鏡像
- 配置端口映射
- 設置目錄掛載
- 啟動并管理容器
這種方式不僅大大簡化了 Docker 的使用流程,還能幫助團隊提高工作效率,減少人為錯誤。無論你是 Docker 新手還是經驗豐富的運維人員,MCP Docker 服務器都能讓你的容器管理工作變得更加輕松自如。
Spring AI 與 Docker 集成
Spring AI 提供了強大的 MCP 集成能力,讓開發(fā)者能夠輕松地將 AI 能力引入到 Docker 容器管理中。
環(huán)境準備
- 安裝 uv
# 筆者這里使用 mac , 如果Windows的話去搜索一下安裝就行啦
brew install uv
- 下載 mcp-docker-server 插件
git clone https://github.com/ckreiling/mcp-server-docker.git
創(chuàng)建客戶端項目
首先需要在項目中添加相關依賴:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>1.0.0-M5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.experimental</groupId>
<artifactId>spring-ai-mcp</artifactId>
<version>0.4.1</version>
</dependency>
</dependencies>
配置文件
筆者這里使用 deepseek v3 模型,只需要在 application.properties 中添加以下配置:
spring.ai.openai.chat.options.model=deepseek-chat
spring.ai.openai.base-url=https://api.deepseek.com
spring.ai.openai.api-key=sk-XXX
MCP Docker 客戶端實現
以下是一個使用 Spring AI 和 MCP 來管理 Docker 容器的示例實現:
@Bean
public CommandLineRunner dockerCommands(ChatClient.Builder chatClientBuilder,
List<McpFunctionCallback> functionCallbacks,
ConfigurableApplicationContext context) {
return args -> {
var chatClient = chatClientBuilder
.defaultFunctions(functionCallbacks.toArray(new McpFunctionCallback[0]))
.build();
// 示例:使用自然語言管理 Docker 容器
String command = "啟動一個 Nginx 容器并映射到 8888 端口 ,并掛載 /Users/lengleng/work/open/pig-ui/docker/dist 的靜態(tài)頁面";
System.out.println("執(zhí)行命令: " + command);
System.out.println("AI 響應: " + chatClient.prompt(command).call().content());
context.close();
};
}
@Bean
public List<McpFunctionCallback> functionCallbacks(McpSyncClient mcpClient) {
return mcpClient.listTools(null)
.tools()
.stream()
.map(tool -> new McpFunctionCallback(mcpClient, tool))
.toList();
}
@Bean(destroyMethod = "close")
public McpSyncClient mcpClient() {
// 配置 Docker MCP 服務器,指向 mcp-server-docker 插件的路徑
var dockerParams = ServerParameters.builder("uv")
.args("--directory", "/Users/lengleng/Downloads/mcp-server-docker", "run", "mcp-server-docker")
.build();
var mcpClient = McpClient.using(new StdioClientTransport(dockerParams))
.requestTimeout(Duration.ofSeconds(30))
.sync();
var init = mcpClient.initialize();
System.out.println("Docker MCP 服務初始化狀態(tài): " + init);
return mcpClient;
}
圖片
執(zhí)行日志示例
以下是一個完整的執(zhí)行過程示例,展示了如何使用自然語言命令來管理 Docker 容器:
# 1. 執(zhí)行自然語言命令
執(zhí)行命令: 啟動一個 Nginx 容器并映射到 8888 端口,并掛載 /Users/lengleng/work/open/pig-ui/docker/dist 的靜態(tài)頁面
# 2. 系統(tǒng)檢查現有容器
發(fā)現沖突: 容器名稱 "/nginx_container" 已被容器 "3f20f2720263..." 使用
狀態(tài): 系統(tǒng)自動處理沖突,移除舊容器
# 3. 創(chuàng)建新容器
容器ID: db72b87c2069...
容器名稱: nginx_container
狀態(tài): 創(chuàng)建成功
# 4. 啟動容器
狀態(tài): 運行中
端口映射: 80 -> 8888
目錄掛載: /Users/lengleng/work/open/pig-ui/docker/dist -> /usr/share/nginx/html
# 5. 最終結果
? Nginx 容器成功啟動
? 端口 8888 成功映射
? 靜態(tài)文件目錄成功掛載
通過這個日志示例,我們可以看到 MCP Docker 服務器是如何:
- 智能理解自然語言命令
- 自動處理容器名稱沖突
- 正確配置端口映射和目錄掛載
- 完成容器的創(chuàng)建和啟動
這種自動化的過程大大簡化了 Docker 容器的管理工作,即使是復雜的操作也能通過簡單的自然語言命令完成。