Created docker/ directory with: - Dockerfile.jupyter: Extends mcp-forge/python:3.12 with ipykernel 6.29.0 - build-images.sh: Build script with testing - README.md: Complete documentation and usage instructions Image Details: - Base: mcp-forge/python:3.12 (python:3.12-slim) - Size: 196 MB (~73 MB added for ipykernel + dependencies) - Includes: ipykernel, jupyter-client, pyzmq, ipython, debugpy, etc. - Version: 6.29.0 (matches host jupyter-client compatibility) Build tested and verified: ✓ ipykernel imports correctly (6.29.0) ✓ kernel launcher works ✓ Image ready for use Next: Update config and run integration tests |
||
|---|---|---|
| .. | ||
| build-images.sh | ||
| Dockerfile.jupyter | ||
| README.md | ||
Docker Images for MCP-Forge
This directory contains Dockerfiles for building MCP-Forge container images.
Images
Jupyter Image (mcp-forge/jupyter:latest)
Purpose: Provides Python environment with ipykernel for stateful Jupyter-based execution.
Base: mcp-forge/python:3.12 (which is python:3.12-slim)
Added Components:
ipykernel6.29.0 - Jupyter kernel for Python
Build Command:
# From the mcp-forge project root:
podman build -f docker/Dockerfile.jupyter -t mcp-forge/jupyter:latest .
Usage: This image is used automatically by the Jupyter backend when creating stateful sessions. The kernel communicates with the host via ZMQ over host networking.
Size: ~130-140 MB (adds ~10-15 MB to base Python image)
Base Python Images
The base Python images should already exist:
podman tag python:3.11-slim mcp-forge/python:3.11
podman tag python:3.12-slim mcp-forge/python:3.12
If not, pull and tag them:
podman pull python:3.11-slim
podman tag python:3.11-slim mcp-forge/python:3.11
podman pull python:3.12-slim
podman tag python:3.12-slim mcp-forge/python:3.12
Building All Images
To build/verify all images at once:
#!/bin/bash
# From project root
# Ensure base images exist
podman pull python:3.11-slim
podman pull python:3.12-slim
podman tag python:3.11-slim mcp-forge/python:3.11
podman tag python:3.12-slim mcp-forge/python:3.12
# Build Jupyter image
podman build -f docker/Dockerfile.jupyter -t mcp-forge/jupyter:latest .
# Verify all images
podman images | grep mcp-forge
Testing the Jupyter Image
Quick test to verify ipykernel is working:
# Test that ipykernel is installed
podman run --rm mcp-forge/jupyter:latest python -c "import ipykernel; print(ipykernel.__version__)"
# Test kernel launcher exists
podman run --rm mcp-forge/jupyter:latest python -m ipykernel_launcher --help
Expected output:
6.29.0
usage: ipykernel_launcher [-h] [-f FILE] ...
Image Sizes
Expected sizes:
mcp-forge/python:3.11- ~129 MBmcp-forge/python:3.12- ~123 MBmcp-forge/jupyter:latest- ~135-140 MB
Updating Images
To update the Jupyter image with a newer ipykernel version:
- Edit
docker/Dockerfile.jupyter - Update the ipykernel version number
- Rebuild:
podman build -f docker/Dockerfile.jupyter -t mcp-forge/jupyter:latest . - Test with integration tests
- Tag with version:
podman tag mcp-forge/jupyter:latest mcp-forge/jupyter:v1.0.1
Security Notes
All images run with:
network_mode: host(for Jupyter kernels only, to enable ZMQ communication)read_only: True(filesystem is read-only except mounted volumes)security_opt: ["no-new-privileges"]- Non-root user (UID:GID 1000:1000)
The host networking is required for ZMQ port communication between the host-side jupyter-client and the container-side ipykernel.