UNPKG

@debugmcp/mcp-debugger

Version:

Run-time step-through debugging for LLM agents.

87 lines (65 loc) 2.66 kB
# Docker Image Optimization Summary ## Date: January 13, 2025 ## Objective Reduce the MCP debugger Docker image size from 670MB to under 100MB. ## Results ### Size Reduction Achieved - **Original Size**: 670MB - **Optimized Size**: 240MB - **Reduction**: 430MB (64% reduction) ### Optimization Techniques Applied #### Phase 1: JavaScript Bundling - Used esbuild to bundle all Node.js dependencies into a single file - Bundle size: 1.11MB (includes all JavaScript dependencies) - Eliminated the need to copy node_modules to production image #### Phase 2: Base Image Optimization - Switched from `python:3.11-slim` (Debian-based) to `python:3.11-alpine` - Alpine Linux is significantly smaller than Debian - Installed only Node.js runtime (no npm) in production image #### Phase 3: Multi-stage Build - Build stage uses full Node.js image with npm for building - Production stage only copies the bundled JavaScript file - Minimal runtime dependencies ## Technical Implementation ### Bundle Configuration ```javascript { format: 'cjs', platform: 'node', target: 'node18', minify: true, external: ['fsevents'] // Only native modules kept external } ``` ### Dockerfile Structure ```dockerfile # Build stage - 2GB+ (temporary) FROM node:20-slim AS builder # ... build and bundle ... # Production stage - 240MB (final) FROM python:3.11-alpine # Only runtime dependencies ``` ## Why Not Under 100MB? The 240MB size is primarily due to: 1. **Python 3.11 runtime**: ~100MB (required for debugpy) 2. **Node.js runtime**: ~80MB (required to run JavaScript) 3. **debugpy package**: ~30MB (Python debugging library) 4. **Alpine base + system libraries**: ~30MB Getting under 100MB would require: - Removing either Python or Node.js (not possible for functionality) - Using a custom-compiled minimal runtime (high complexity, maintenance burden) ## Verification The optimized image was tested with all debugging functionality: - Session creation and management - Breakpoint setting - Step debugging - Variable inspection - Stack trace analysis ## Recommendations 1. **Current 240MB is Production-Ready**: 64% reduction is significant 2. **Further Optimization**: Consider using distroless images if stricter size requirements 3. **Bundle Maintenance**: Update bundle.js when adding new dependencies 4. **CI/CD Integration**: Add automated Docker build with size checks ## Conclusion While the target of <100MB wasn't achieved, the 64% size reduction from 670MB to 240MB represents a substantial optimization. The image maintains full functionality while being significantly more efficient for deployment and distribution.