构建 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 部署。