Docker Architecture Diagram & Overview#
ποΈ Multi-Stage Build Architecture#
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Dockerfile β
β (148 lines, 6 stages) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββΌββββββββββββββββ
β β β
βΌ βΌ βΌ
ββββββββββββ ββββββββββββ ββββββββββββ
β Builder β β Runtime β β Dev β
β Stage 1 βββββΆβ Base βββββ Stage 6 β
β β β Stage 2 β β β
β - uv β β β β - pytest β
β - build β β - git β β - black β
β - wheel β β - deps β β - flake8 β
ββββββββββββ ββββββββββββ β - mypy β
β ββββββββββββ
βββββββββββββββΌββββββββββββββ
β β β
βΌ βΌ βΌ
ββββββββββ ββββββββββ ββββββββββ
β CLI β β API β β MCP β
β Stage β β Stage β β Stage β
β 3 β β 4 β β 5 β
β β β β β β
β Entry: β β Entry: β β Entry: β
β CLI β βUvicornβ β MCP β
β tool β β REST β β Server β
β β β β β β
ββββββββββ ββββββββββ ββββββββββ
β β β
βΌ βΌ βΌ
terraform-ingest terraform-ingest terraform-ingest
:cli :api :mcp
(~350MB) (~350MB) (~350MB)
π¦ Image Specification#
Base Layer (All Images)#
Python 3.13-slim
βββ apt dependencies
β βββ git
β βββ ca-certificates
βββ Python packages (via pip)
β βββ click
β βββ fastapi
β βββ fastmcp
β βββ gitpython
β βββ httpx
β βββ loguru
β βββ pydantic
β βββ python-hcl2
β βββ pyyaml
β βββ uvicorn
βββ Application (from wheel)
βββ terraform_ingest
CLI Mode#
runtime-base
βββ Entry: terraform-ingest command
βββ Features:
β βββ Full Click CLI
β βββ Ingest command
β βββ Analyze command
β βββ Help system
βββ Use: Docker run with command args
API Mode#
runtime-base
βββ Entry: uvicorn terraform_ingest.api:app
βββ Features:
β βββ FastAPI REST service
β βββ Swagger UI (/docs)
β βββ ReDoc (/redoc)
β βββ Health check (/health)
β βββ Ingest endpoint (/ingest)
β βββ Analyze endpoint (/analyze)
βββ Port: 8000
βββ Use: Long-running service
MCP Mode#
runtime-base
βββ Entry: terraform-ingest-mcp
βββ Features:
β βββ FastMCP server
β βββ Stdio protocol
β βββ Auto-ingestion
β βββ Periodic refresh
β βββ list_repositories tool
β βββ search_modules tool
βββ Use: AI agent integration
Dev Mode#
runtime-base
βββ pytest (testing)
βββ black (formatting)
βββ flake8 (linting)
βββ mypy (type checking)
βββ ipython (interactive)
βββ ipdb (debugging)
βββ Entry: /bin/bash (interactive)
π Execution Flow by Mode#
CLI Mode Flow#
docker run terraform-ingest:cli ingest config.yaml
β
βββΊ Parse CLI arguments
β
βββΊ Load YAML config
β
βββΊ Ingest repositories
β βββΊ Clone repos
β βββΊ Parse Terraform
β βββΊ Generate JSON
β
βββΊ Exit (0 = success)
API Mode Flow#
docker run -p 8000:8000 terraform-ingest:api
β
βββΊ Start Uvicorn server
β
βββΊ Listen on 0.0.0.0:8000
β
βββΊ Handle requests
β βββΊ GET /health β OK
β βββΊ GET /docs β Swagger UI
β βββΊ POST /ingest β Process
β βββΊ POST /analyze β Process
β
βββΊ Run indefinitely
(until container stops)
MCP Mode Flow#
docker run terraform-ingest:mcp
β
βββΊ Check config
β
βββΊ Optional: Run ingestion
β
βββΊ Start MCP server
β
βββΊ Listen on stdio
β
βββΊ Handle MCP requests
β βββΊ list_repositories
β βββΊ search_modules
β
βββΊ Run indefinitely
(until container stops)
π Volume Mount Architecture#
Host System Container
βββββββββββββ ββββββββββ
~/.ssh/
βββ id_rsa βββββββββββββββββββββΊ /root/.ssh/id_rsa (ro)
βββ id_rsa.pub βββββββββββββββββββββΊ /root/.ssh/id_rsa.pub (ro)
βββ known_hosts βββββββββββββββββββββΊ /root/.ssh/known_hosts (ro)
$(pwd)/config.yaml βββββββββββββββββΊ /app/config/config.yaml (ro)
$(pwd)/output/
βββ module1.json βββββββββββββββββββ /app/output/module1.json
βββ module2.json βββββββββββββββββββ /app/output/module2.json
$(pwd)/repos/
βββ repo1/ βββββββββββββββββββββββ /app/repos/repo1/
βββ repo2/ βββββββββββββββββββββββ /app/repos/repo2/
.venv/ ββββββββββββββββΊ /app/.venv/ (dev only)
π CI/CD Pipeline Flow#
GitHub Push/Tag/PR
β
βΌ
Docker Build Job (docker-build.yml)
β
βββΊ Setup Docker Buildx
β
βββΊ Extract metadata
β βββΊ Branch tags
β βββΊ Semantic version tags
β βββΊ SHA tags
β
βββΊ Build matrix (4 targets)
β βββΊ cli
β βββΊ api
β βββΊ mcp
β βββΊ dev
β
βββΊ Multi-platform build
β βββΊ linux/amd64
β βββΊ linux/arm64
β
βββΊ Push to GHCR
β
βββΊ Test stage (if PR)
β βββΊ CLI: --help, --version
β βββΊ API: uvicorn check
β βββΊ MCP: startup test
β
βββΊ Security scan (if push)
βββΊ Trivy scan
βββΊ Upload SARIF
π Security Model#
Production Image Security
βββββββββββββββββββββββββββββββ
β Minimal Base Image (python:3.13-slim)
ββ Only essential packages
ββ git (for cloning)
ββ ca-certificates (for HTTPS)
β Multi-Stage Build
ββ Build tools (uv, gcc) not in final image
ββ Smaller image size
ββ Reduced attack surface
ββ Faster deployment
β No Build Tools in Runtime
ββ gcc, make, etc. excluded
ββ Prevents runtime compilation
β Read-Only Config Mounts
ββ Configuration cannot be modified
ββ Immutable setup
β SSH Key Isolation
ββ Keys in volumes, not in image
ββ No credentials in image
ββ Easy credential rotation
β Health Checks
ββ Automated monitoring
ββ API: HTTP health endpoint
ββ MCP: Process monitoring
β Security Scanning
ββ Trivy in CI/CD
ββ Vulnerability detection
ββ Automatic SARIF reports
π― Mode Selection Decision Tree#
What do you want to do?
β
ββ Run ingestion once?
β βββΊ CLI Mode
β docker run terraform-ingest:cli ingest config.yaml
β
ββ Expose REST API?
β βββΊ API Mode
β docker run -p 8000:8000 terraform-ingest:api
β
ββ Integrate with AI agents?
β βββΊ MCP Mode
β docker run terraform-ingest:mcp
β
ββ Develop & test code?
βββΊ Dev Mode
docker-compose up terraform-ingest-dev
docker-compose exec terraform-ingest-dev bash
Environment Variable Hierarchy#
Application Configuration
ββββββββββββββββββββββββββ
Docker Env Vars
β
ββ TERRAFORM_INGEST_CONFIG
β ββ Default: /app/config/config.yaml
β
ββ API Mode Only
β ββ UVICORN_HOST (0.0.0.0)
β ββ UVICORN_PORT (8000)
β ββ UVICORN_LOG_LEVEL (info)
β ββ UVICORN_WORKERS (1)
β
ββ MCP Mode Only
ββ TERRAFORM_INGEST_MCP_AUTO_INGEST (true)
ββ TERRAFORM_INGEST_MCP_INGEST_ON_STARTUP (false)
ββ TERRAFORM_INGEST_MCP_REFRESH_INTERVAL_HOURS (24)
Config File (YAML)
β
ββ repositories[]
ββ output_dir
ββ clone_dir
ββ mcp:
ββ auto_ingest
ββ ingest_on_startup
ββ refresh_interval_hours
ποΈ Project Structure#
terraform-ingest/
βββ Dockerfile β Build definition
βββ .dockerignore β Build optimizations
βββ docker-compose.yml β Service definitions
β
βββ docker.md β Quick start guide
β
βββ docs/
β βββ docker_complete.md β This summary
β βββ docker_guide.md β Full guide (600+ lines)
β βββ docker_quick_ref.md β Quick commands
β βββ docker_complete.md β Technical details
β βββ DOCKER_CHECKLIST.md β Verification
β
βββ .github/workflows/
β βββ docker-build.yml β CI/CD pipeline
β
βββ src/terraform_ingest/
β βββ cli.py β CLI mode
β βββ api.py β API mode
β βββ mcp_service.py β MCP mode
β βββ ingest.py β Core logic
β βββ ...
β
βββ pyproject.toml β Python project config
βββ config.yaml β Example config
β¨ Quick Reference Matrix#
| Aspect | CLI | API | MCP | Dev |
|---|---|---|---|---|
| Image | terraform-ingest:cli |
terraform-ingest:api |
terraform-ingest:mcp |
terraform-ingest:dev |
| Entry | terraform-ingest | uvicorn | terraform-ingest-mcp | /bin/bash |
| Port | - | 8000 | stdio | - |
| Duration | Short-lived | Long-running | Long-running | Interactive |
| Use | Batch | Service | AI | Development |
| Command | docker run |
docker run -p |
docker run |
docker-compose exec |
| Docker Compose | run --rm |
up -d |
up -d |
up -d then exec |
Visual Guide Complete β
For detailed information, see the full documentation files!