私は Docker のスタッフ ソリューション アーキテクトである Mike Coleman です。この役割では、AI の導入について企業のお客様と話すことに多くの時間を費やしています。私が何度も耳にすることの 1 つは、これらの企業は AI ツールの導入に関して適切なガードレールが確実に整備されていることを望んでいるということです。
たとえば、多くの組織は、開発者や AI アシスタントが Docker のモデル コンテキスト プロトコル (MCP) ツールを介してアクセスできるツールをより厳密に制御したいと考えています。Docker Hub からイメージを直接プルすることを禁止する厳格なセキュリティ ポリシーがあるものもあります。また、信頼できる MCP サーバーの厳選されたセットをチームや顧客に提供したいだけの企業もあります。
この投稿では、独自のMCPカタログを作成する方法について説明します。次の方法について説明します。
- フォーク Docker の公式 MCP カタログ
- 独自のコンテナー・レジストリでMCPサーバー・イメージをホストする
- プライベート・カタログの公開
- MCP ゲートウェイを使用して、これらのサーバーをクライアントに公開する
Docker の MCP カタログから既存の MCP サーバーをプルする場合でも、独自の MCP サーバーを構築する場合でも、組織に適したクリーンで制御された MCP 環境が得られます。
Docker の MCP ツールの紹介
Docker の MCP エコシステムには、次の 3 つのコア部分があります。
MCPカタログ
MCP サーバー定義の YAML ベースのインデックス。これらは、各サーバーの実行方法と、それに関連付けられているメタデータ (説明、イメージ、リポジトリ) を記述します。MCPカタログは、220+コンテナ化されたMCPサーバーをホストし、クリックするだけですぐに実行できます。
公式のdocker-mcpカタログは読み取り専用です。ただし、フォークしたり、エクスポートしたり、独自のビルドを行ったりすることはできます。
MCP Gateway
MCP ゲートウェイは、クライアントを MCP サーバーに接続します。何も「ホスト」するわけではなく、サーバーは通常のDockerコンテナーにすぎません。ただし、HTTP SSE または STDIO を介してカタログから複数のサーバーを公開するための 1 つの接続ポイントを提供します。
従来、X サーバーと Y クライアントでは、X * Y 構成エントリが必要でした。MCP ゲートウェイは、それを Y エントリ (クライアントごとに 1 つ) に減らします。サーバーは、選択したカタログに基づいてバックグラウンドで管理されます。
ゲートウェイは、特定のカタログを使用して起動できます。
docker mcp gateway run –catalog my-private-catalog
MCP Gatewayはオープンソースです: https://github.com/docker/mcp-gateway
図 1: MCP ゲートウェイは、複数の MCP サーバーを公開するための 1 つの接続ポイントを提供します
MCP ツールキット (GUI)
Docker Desktop に組み込まれている MCP Toolkit は、MCP カタログと MCP ゲートウェイをグラフィカルに操作する方法を提供します。これにより、次のことが可能になります。
- 豊富なGUIを介したDockerのMCPカタログへのアクセス
- シークレットの安全な処理 (GitHub トークンなど)
- MCPサーバーを簡単に有効に
- 選択したMCPサーバーをワンクリックで、Claudeコード、Claudeデスクトップ、コーデックス、カーソル、Continue.dev などのさまざまなクライアントに接続します。および Gemini CLI
ワークフローの概要
以下のワークフローは、カスタムMCPカタログを作成して使用するために必要な手順を示しています。
基本的な手順は次のとおりです。
- 公式のMCPカタログをエクスポートして、その内容を調べます
- カタログをフォークして編集できるようにする
- 独自のプライベートカタログを作成する
- 特定のサーバーエントリを追加する
- イメージをプル (または再構築) してレジストリにプッシュする
- イメージを使用するようにカタログを更新する
- カタログを使用して MCP ゲートウェイを実行する
- クライアントを接続する
ステップバイステップガイド:カスタムMCPカタログの作成と使用
まず、このプロセスを繰り返し可能にし、後で簡単に変更できるようにするために、いくつかの環境変数を設定します。
この例では、既存の MCP サーバー (DuckDuckGo) をプライベート レジストリ (ghcr.io/mikegcoleman) に移行するとします。独自のカスタム MCP サーバー イメージをカタログに追加することもできますが、これについては以下でも説明します。
export MCP_SERVER_NAME="duckduckgo"
export GHCR_REGISTRY="ghcr.io"
export GHCR_ORG="mikegcoleman"
export GHCR_IMAGE="${GHCR_REGISTRY}/${GHCR_ORG}/${MCP_SERVER_NAME}:latest"
export FORK_CATALOG="my-fork"
export PRIVATE_CATALOG="my-private-catalog"
export FORK_EXPORT="./my-fork.yaml"
export OFFICIAL_DUMP="./docker-mcp.yaml"
export MCP_HOME="${HOME}/.docker/mcp"
export MCP_CATALOG_FILE="${MCP_HOME}/catalogs/${PRIVATE_CATALOG}.yaml"
ステップ 1:公式MCPカタログをエクスポートする
公式のDocker MCPCatalogをエクスポートすると、すべてのサーバーを一覧表示する読み取り可能なローカルYAMLファイルが得られます。これにより、画像、説明、リポジトリソースなどのメタデータを CLI の外部で簡単に検査できます。
docker mcp catalog show docker-mcp --format yaml > "${OFFICIAL_DUMP}"
ステップ 2: 公式MCPカタログをフォークする
公式カタログをフォークすると、変更可能なコピーが作成されます。組み込みの Docker カタログは読み取り専用であるため、このフォークは編集可能なバージョンとして機能します。
docker mcp catalog fork docker-mcp "${FORK_CATALOG}"
docker mcp catalog ls
ステップ 3: 新しいカタログを作成する
次に、明示的にサポートするサーバーのみを保持する新しいカタログを作成します。これにより、組織は、完全に所有するクリーンで制御されたカタログを確実に実行できます。
docker mcp catalog create "${PRIVATE_CATALOG}"
ステップ 4: 特定のサーバー エントリを追加する
フォークしたカタログをファイルにエクスポートして、必要なエントリだけをコピーできるようにします。ここでは、duckduckgoサーバーのみを取得し、プライベートカタログに追加します。
docker mcp catalog export "${FORK_CATALOG}" "${FORK_EXPORT}"
docker mcp catalog add "${PRIVATE_CATALOG}" "${MCP_SERVER_NAME}" "${FORK_EXPORT}"
ステップ 5: イメージをプル (または再構築) し、レジストリにプッシュする
この時点では、次の 2 つのオプションがあります。
Docker Hub からプルできる場合は、前にエクスポートした YAML ファイルを見て、目的のサーバーのイメージ キーを見つけます。次に、そのイメージをローカル マシンにプルダウンします。プルダウンしたら、使用するリポジトリにタグを付け直します。
Example for duckduckgo
vi "${OFFICIAL_DUMP}" # look for the duckduck go entry and find the image: key which will look like this:
# image: mcp/duckduckgo@sha256:68eb20db6109f5c312a695fc5ec3386ad15d93ffb765a0b4eb1baf4328dec14f
# pull the image to your machine
docker pull \
mcp/duckduckgo@sha256:68eb20db6109f5c312a695fc5ec3386ad15d93ffb765a0b4eb1baf4328dec14f
# tag the image with the appropriate registry
docker image tag mcp/duckduckgo@sha256:68eb20db6109f5c312a695fc5ec3386ad15d93ffb765a0b4eb1baf4328dec14f ${GHCR_IMAGE}
# push the image
docker push ${GHCR_IMAGE}
この時点で、次のセクションでMCPカタログファイルの編集に進むことができます。
Docker Hub からダウンロードできない場合は、いつでも GitHub リポジトリから MCP サーバーを再構築できます。これを行うには、エクスポートされた YAML を開き、ターゲット サーバーの GitHub ソース リポジトリを探します。vi、cat、grep などのツールを使用して見つけることができます — 通常はソースキーの下にリストされています。
Example for duckduckgo:
source: https://github.com/nickclyde/duckduckgo-mcp-server/tree/main
export SOURCE_REPO="https://github.com/nickclyde/duckduckgo-mcp-server.git"
次に、元の GitHub リポジトリから MCP サーバー イメージを再構築し、独自のレジストリにプッシュします。これにより、イメージを完全に制御でき、Docker Hub アクセスへの依存が排除されます。
echo "${GH_PAT}" | docker login "${GHCR_REGISTRY}" -u "${GHCR_ORG}" --password-stdin
docker buildx build \
--platform linux/amd64,linux/arm64 \
"${SOURCE_REPO}" \
-t "${GHCR_IMAGE}" \
--push
ステップ 6: カタログを更新する
イメージを GHCR に公開した後、プライベート カタログを更新して、Docker Hub バージョンではなく新しいイメージを指すようにします。この手順では、カタログエントリを作成したイメージに直接リンクします。
vi "${MCP_CATALOG_FILE}"
# Update the image line for the duckduckgo server to point to the image you created in the previous step (e.g. ghcr.io/mikegcoleman/duckduckgo-mcp)
不要になったカタログのフォークされたバージョンを削除します
docker mcp catalog rm "${FORK_CATALOG}"
ステップ 7: MCP ゲートウェイを実行する
サーバーを有効にすると、MCP 環境内でサーバーがアクティブ化されます。有効にすると、ゲートウェイはそれをロードし、接続されたクライアントが使用できるようになります。同じサーバーが 2 つの場所 (カタログと元のカタログ) にリストされているため、「重複するサーバー」に関する警告が表示されます
docker mcp server enable "${MCP_SERVER_NAME}"
docker mcp server list
ステップ 8: 人気のあるクライアントに接続する
次に、MCP ゲートウェイを選択したクライアントと統合します。ゲートウェイを実行するための生のコマンドは次のとおりです。
docker mcp gateway run --catalog "${PRIVATE_CATALOG}"
しかし、それはローカルマシン上でインスタンスを実行するだけで、おそらくクライアントアプリケーションと統合したい場合に発生します。
これを行うには、使用するクライアントで機能するように raw コマンドをフォーマットする必要があります。たとえば、VS Code では、次のようにmcp.jsonを更新します。
"servers": {
"docker-mcp-gateway-private": {
"type": "stdio",
"command": "docker",
"args": [
"mcp",
"gateway",
"run",
"--catalog",
"my-private-catalog"
]
}
}
最後に、ゲートウェイが新しい GHCR イメージを使用していること、およびサーバーが適切に有効になっていることを確認します。このクイック チェックでは、クライアントを接続する前に、すべてが期待どおりに設定されていることを確認します。
docker mcp server inspect "${MCP_SERVER_NAME}" | grep -E 'name|image'
キーコマンドの概要
次の CLI コマンドが便利な場合があります。
docker mcp catalog show docker-mcp --format yaml > ./docker-mcp.yaml
docker mcp catalog fork docker-mcp my-fork
docker mcp catalog export my-fork ./my-fork.yaml
docker mcp catalog create my-private-catalog
docker mcp catalog add my-private-catalog duckduckgo ./my-fork.yaml
docker buildx build --platform linux/amd64,linux/arm64 https://github.com/nickclyde/duckduckgo-mcp-server.git \
-t ghcr.io/mikegcoleman/duckduckgo:latest --push
docker mcp server enable duckduckgo
docker mcp gateway run --catalog my-private-catalog
結論
Docker の MCP ツールキット、カタログ、ゲートウェイを使用すると、開発者、顧客、または AI エージェントが利用できるツールを完全に制御できます。1 回限りのセットアップ、散在する画像、またはクロスクライアント接続の頭痛の種はもうありません。
次のステップ:
- カタログにサーバーを追加する
- 新しいサーバーイメージを再構築して公開するための CI の設定
- カタログを社内または顧客と共有する
ドキュメント:
- https://docs.docker.com/ai/mcp-catalog-and-toolkit/
- https://github.com/docker/mcp-gateway/
キュレーションを楽しんでください。
カスタムカタログの作成をさらに簡単にするために、いくつかのエキサイティングな機能強化に取り組んでいます。最新情報にご期待ください!
さらに詳しく
- MCP カタログの探索: コンテナ化されたセキュリティ強化された MCP サーバーを検出する
- Docker Desktop を開き、 MCP Toolkit の使用を開始します (MCP Toolkit を自動的に起動するには、バージョン 448 以降が必要です)
- Open Source GeniusがDocker MCP ToolkitとClaude Desktopでエントロピー負債をカットする方法について読む