Rust で開発した MCP サーバを Docker で簡単に構築・運用できるようにしたので、その手順をまとめます。
ローカル開発やチーム開発、CI/CD でも活用できる構成です。
1.ディレクトリ構成
rust_mcp/
├── compose.yml
└── rust/
├── Dockerfile
└── app/
└── ...(Rustプロジェクトのソース)
2.Dockerfile の内容
FROM rust:1.86.0
WORKDIR /app
# 必要なツールをインストール
RUN apt-get update && apt-get install -y \
build-essential \
pkg-config \
libssl-dev \
&& rm -rf /var/lib/apt/lists/* \
# Rustの追加コンポーネントとツールをインストール
&& rustup component add rust-src \
&& cargo install cargo-edit
# シェルスクリプトを作成
RUN echo '#!/bin/bash \n\
set -e \n\
\n\
# プロジェクト初期化チェック \n\
if [ -e "Cargo.toml" ]; then \n\
echo "Existing project found. Ready to work." \n\
else \n\
echo "No project found. Initializing a new project..." \n\
cargo init --bin \n\
echo "New Rust project created successfully!" \n\
fi \n\
\n\
# 引数があれば実行、なければコンテナを維持 \n\
if [ $# -eq 0 ]; then \n\
echo "No command specified, keeping container alive..." \n\
exec tail -f /dev/null \n\
else \n\
echo "Executing command: $@" \n\
exec "$@" \n\
fi \n\
' > /entrypoint.sh \
&& chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
CMD []
ポイント
・Rust公式イメージをベースに、ビルドに必要なツールやライブラリをインストール
・cargo-edit など便利ツールも導入
・プロジェクトがなければ cargo init で自動生成
・コマンド未指定時はコンテナを維持(tail -f /dev/null)
compose.yml 設定
compose.yml
services:
rust:
build:
context: ./rust
dockerfile: Dockerfile
ports:
- "8083:8083"
volumes:
- ./rust/app:/app
tty: true
stdin_open: true
networks:
mynetwork:
aliases:
- rust_backend
restart: unless-stopped
networks:
mynetwork:
driver: bridge
ポイント
・./rust/app を /app にマウントし、ホストとコンテナでソースを共有
・ポート 8083 を公開(必要に応じて変更)
・独自ネットワーク mynetwork で他サービスと連携可能
4.使い方
ビルド&サーバ起動
$ docker compose up -d --build
コンテナに入りRustプロジェクトをコンパイル
$ docker compose exec rust bash
$ cargo build
ポイント
・コンパイルが成功すると「/app/target/release/」のディレクトリに「mcp-doubler」が生成される、
5.mcp.jsonを編集
{
"mcpServers": {
"mcp-doubler": {
"command": "docker",
"args": [
"exec",
"-i",
"rust_mcp-rust-1",
"/app/target/release/mcp-doubler",
]
}
}
}
mco-doublerのインジケーターが緑になれば起動できています。
実行結果
- まとめ
Rust + Docker + docker-compose で、開発・運用がとても楽になります。
チーム開発やCI/CDにもそのまま流用できるので、ぜひ活用してみてください!
参考
Rust公式Dockerイメージ
docker-compose公式ドキュメント