构建 MCP 服务器的 Docker 镜像#

本教程使用 Podman 构建 MCP 服务器的 Docker 镜像,该镜像专门用于在 Anyscale 上使用 Ray Serve 进行部署。本教程是对官方 Anthropic 教程 构建 MCP 天气服务器 的补充,该教程不包含 Docker 镜像构建说明。

Docker 通过将 MCP 服务器打包到标准化、可移植的容器中,简化了构建和分发 MCP 服务器的过程。这消除了与依赖项和环境配置相关的问题。它还实现了简化的云开发——增强了以代理为中心的工具的测试、安全性和跨平台部署。

不幸的是,您无法使用 Anyscale Docker 镜像构建农场 来构建此镜像,因为它不支持从本地存储复制的 Docker COPY 命令。

因此,本教程将向您展示如何直接从 Anyscale 工作区构建 MCP Docker 镜像。或者,您也可以 从本地机器构建它

请参阅 https://hub.docker.com/catalogs/mcp 了解 MCP 服务器的 Docker 镜像集合。

先决条件和文件夹布局#

安装 Podman

sudo apt-get update && sudo apt-get install -y podman

确保您已成功安装 Podman

podman --version

查看包含以下文件的 build-mcp-docker-image 文件夹

build-mcp-docker-image/
├── Dockerfile     
├── requirements.txt
└── weather.py      

1. 天气 MCP 服务器的 Dockerfile#

此 Dockerfile 基于 python3.10 创建一个轻量级镜像,用于运行天气 MCP 服务器。它安装系统依赖项以及 uv CLI 工具,以实现高效的包和应用程序管理。

Dockerfile 将工作目录设置为 /app,使用 uv 从 requirements.txt 安装 Python 包,将整个项目复制到容器中,最后使用 uv 运行 weather.py 服务器脚本。

# Use Python 3.10 base image.
FROM python:3.10-slim

# Install system dependencies.
RUN apt-get update && \
    apt-get install -y curl ca-certificates && \
    rm -rf /var/lib/apt/lists/*

# Install the 'uv' CLI.
RUN curl -LsSf https://astral.sh/uv/install.sh | sh

# Make sure 'uv' is on PATH.
ENV PATH="/root/.local/bin:${PATH}"

# Set the working directory.
WORKDIR /app

# Copy and install only requirements first (caching).
COPY requirements.txt .
RUN uv pip install --system -r requirements.txt

# Now copy everything from the current directory into /app.
COPY . .

# Run the server.
CMD ["uv", "run", "weather.py"]

2. 使用 Podman 构建 Docker 镜像#

导航到项目目录

cd build-mcp-docker-image

运行以下 Podman 命令构建 Docker 镜像,确保使用 –events-backend=file 标志以防止在 Anyscale 上出现构建错误

podman build \
  --events-backend=file \
  --cgroup-manager=cgroupfs \
  -t weather-mcp:latest .

注意:

省略 --events-backend=file 标志可能会导致以下错误

ERRO[0000] unable to write build event: "write unixgram @11c5a->/run/systemd/journal/socket: sendmsg: no such file or directory"

3. 将 Docker 镜像推送到注册表#

将构建的镜像推送到您自己的容器注册表。您应该将 your-dockerhub-username/weather-mcp 替换为您的实际镜像名称

podman tag weather-mcp:latest your-dockerhub-username/weather-mcp:latest

podman push \
  --events-backend=file \
  your-dockerhub-username/weather-mcp:latest ## make sure replace with your own dockerhub username or repo

在推送之前,请确保您已登录到您的 Docker Hub 帐户或容器注册表

podman login docker.io

下一步#

您已成功构建并推送了 MCP 服务器的 Docker 镜像,现在可以进行部署了。

推送镜像后,您可以使用 Ray Serve 在 Anyscale 上部署 MCP 服务器。

请遵循接下来的两个教程,以使用 Ray Serve 进行单服务器和多服务器 MCP 部署。