大家好!我是韩老师。

本文是 MCP 系列文章的第五篇,之前的四篇是:

写在最前:容器化 MCP Server,有用。但是,你不一定需要。

WHY

如果你在开发一个 local MCP Server,并且有以下的任何一种情况:

  • 需要安装多个 toolchain,才能运行 local MCP Server
  • 用于开发 local MCP Server 的语言,没有像 npx 或者 uv 那样一键运行程序的工具

那么,容器化 MCP Server,对你的用户是有用的。

反之,如果你已经用主流的 Node.js 或者 Python 来开发 local MCP Server,并且没有其他额外的依赖。

那么,你也许并不需要容器化。

WHAT

local MCP Server 其实就是个 Node.js/Python/PHP/Go/Java/... 开发的 Console App 而已,通过 stdin/stdout 与 MCP Client 交互,没有什么特别的地方。

所以,一般来说,你只需要一个 Dockerfile 即可。

HOW

既然是容器化一个普通的 Console App,那么,一切就变得很简单了。

以下是 Code Runner MCP Server 的 Dockerfile :

 1 ## Stage 1: Builder
2 FROM node:lts-alpine AS builder
3
4 # Set working directory
5 WORKDIR /app
6
7 # Copy all files into the container
8 COPY . .
9
10 # Install dependencies without running scripts
11 RUN npm install --ignore-scripts
12
13 # Build the TypeScript source code
14 RUN npm run build
15
16 ## Stage 2: Runtime
17 FROM node:lts-alpine
18
19 WORKDIR /app
20
21 # Install Python and other programming languages
22 RUN apk add --no-cache \
23 python3 \
24 go \
25 php \
26 ruby
27
28 # Copy only the necessary files from the builder stage
29 COPY --from=builder /app/dist ./dist
30 COPY package*.json ./
31
32 # Install only production dependencies
33 RUN npm install --production --ignore-scripts
34
35 # Use a non-root user for security (optional)
36 RUN adduser -D mcpuser
37 USER mcpuser
38
39 # Set the entrypoint command
40 CMD ["node", "./dist/index.js"]

这,就是一个标准的 multi-stage builds 的 Dockerfile。

由于 Code Runner MCP Server 需要支持多种编程语言的运行,我在 Dockerfile 里面,预先安装了几个常用的编程语言的解释器/编译器。

这样,用户在使用的时候,唯一需要安装的,就是 Docker 而已:

 1 {
2 "mcp": {
3 "inputs": [],
4 "servers": {
5 "mcp-server-code-runner": {
6 "command": "docker",
7 "args": [
8 "run",
9 "--rm",
10 "-i",
11 "formulahendry/mcp-server-code-runner"
12 ]
13 }
14 }
15 }
16 }

完整的代码,可以参考 Code Runner MCP Server 的 repo,完全开源:

https://github.com/formulahendry/mcp-server-code-runner

 

容器化 MCP Server!的更多相关文章

  1. Docker最全教程——数据库容器化(十)

    终于按时完成第二篇.本来准备着手讲一些实践,但是数据库部分没有讲到,部分实践会存在一些问题,于是就有了此篇以及后续——数据库容器化.本篇将从SQL Server容器化实践开始,并逐步讲解其他数据库的容 ...

  2. .NET Core容器化@Docker

    温馨提示:本文适合动手演练,效果更佳.  1. 引言 我们知道. NET Core最大的特性之一就是跨平台,而对于跨平台,似乎大家印象中就是可以在非Windows系统上部署运行.而至于如何操作,可能就 ...

  3. .NET Core容器化之多容器应用部署@Docker-Compose

    1.引言 紧接上篇.NET Core容器化@Docker,这一节我们先来介绍如何使用Nginx来完成.NET Core应用的反向代理,然后再介绍多容器应用的部署问题. 2. Why Need Ngin ...

  4. .NET Core+MySql+Nginx 容器化部署

    .NET Core容器化@Docker .NET Core容器化之多容器应用部署@Docker-Compose .NET Core+MySql+Nginx 容器化部署 GitHub-Demo:Dock ...

  5. Asp.net容器化

    注意:本文只用于探讨asp.net容器化,不建议生产环境下使用(docker 镜像太大!!!!) 安装docker 准备一个台windwos server 2016 ,在PowerShell 里执行以 ...

  6. 一份.NET 容器化的调查小结

    小编在上个月在微信公众号"dotnet跨平台" 做了一个针对.NET 容器化的调查:https://mp.weixin.qq.com/s/oszbuIORT0G8XLLgMZzkn ...

  7. Docker最全教程——数据库容器化之持久保存数据(十一)

    上一节我们讲述了SQL Server容器化实践(注意,SQL Server现在也支持跨平台),本节将讲述如何持久保存数据,并且接下来将逐步讲解其他数据库(MySql.Redis.Mongodb等等)的 ...

  8. 通过 Azure Pipelines 实现持续集成之docker容器化及自动化部署

    通过 Azure Pipelines 实现持续集成之docker容器化及自动化部署 Intro Azure DevOps Pipeline 现在对于公开的项目完全免费,这对于开源项目来讲无疑是个巨大的 ...

  9. Atitit s2018.6 s6 doc list on com pc.docx Atitit s2018.6 s6 doc list on com pc.docx  Aitit algo fix 算法系列补充.docx Atiitt 兼容性提示的艺术 attilax总结.docx Atitit 应用程序容器化总结 v2 s66.docx Atitit file cms api

    Atitit s2018.6 s6  doc list on com pc.docx Atitit s2018.6 s6  doc list on com pc.docx  Aitit algo fi ...

  10. [ci]jenkins-slave-ssh docker容器化-用户名密码

    jenkins-slave-ssh docker容器化 架构 参考:https://www.youtube.com/watch?v=OxrBCt1JLuQ https://github.com/Dav ...

随机推荐

  1. CDN在互联网直播中的运用与性能优化

    本文分享自天翼云开发者社区<CDN在互联网直播中的运用与性能优化>,作者:不知不觉 随着互联网技术的不断发展,互联网直播已成为人们获取信息.娱乐.学习等多种需求的重要途径之一.然而,在直播 ...

  2. Q:ssh远程连接慢的原因排查

    连接linux服务器一般都是使用SSH远程连接的方式.有时,SSH连接速度很慢,大约30s左右,但是ping时一切正常. 问题原因 1.server的sshd会去DNS查找访问的client ip的h ...

  3. [THUSC2015] 异或运算 题解

    学到新思路了:求解 \(k\) 大值时,可以将所有元素放一块一起跑. 考虑到 \(n,q\) 奇小无匹,我们便可以制造一个 \(O(qn\log V)\) 的代码. 那么对于我们不想在时间复杂度中出现 ...

  4. 发那科机器人R2000iC控制柜常见故障类型

    发那科机器人维修R2000iC控制柜常见故障类型 电源故障: 发那科机器人R2000iC控制柜不能正常供电,可能是由于电源线路损坏.保险丝烧断.电源模块故障或电压不稳定等原因造成. 通信故障: 控制柜 ...

  5. 最新版go-cqhttp的sign 签名服务器搭建教程

    安装go-cqhttp 传送门 自建sign签名服务器容器: 拉取镜像(只支持amd64) docker pull hansaes/unidbg-fetch-qsign:latest 启动容器 doc ...

  6. PHP站点及mysql常用操作

    1.mysql查询表里面重复数据 SELECT * FROM 表名xxxx a WHERE ((SELECT COUNT(*) FROM 表名xxxx WHERE title = a.title) & ...

  7. 一个生成随机颜色的js函数

    function getRandomColor(){ let rgb = []; for(let i=0;i<3;++i){ let color = Math.floor(Math.random ...

  8. Web前端入门第 11 问:HTML 常用标签有多少?全量标签有多少?

    HELLO,这里是大熊学习前端开发的入门笔记. 本系列笔记基于 windows 系统. 截止发文,MDN 收录的 HTML 全量标签有 126 个,有 18 个标记已弃用. 名词解释:MDN --- ...

  9. [I.2]个人作业:软件案例分析

    项目 内容 这个作业属于哪个课程 2025春季软件工程(罗杰.任健) 这个作业的要求在哪里 [I.2]个人作业:软件案例分析 我在这个课程的目标是 在PSP中精进个人代码技术,在TSP中提高团队合作凝 ...

  10. 如何编写Kubernetes的YAML(一)

    什么是API对象 作为一个集群操作系统,Kubernetes 归纳总结了 Google 多年的经验,在理论层面抽象出了很多个概念,用来描述系统的管理运维工作,这些概念就叫做"API 对象&q ...