Back to Go Micro

Docker Compose Deployment Example

examples/deployment/README.md

5.19.12.9 KB
Original Source

Docker Compose Deployment Example

Run a go-micro service with MCP gateway, service registry, and distributed tracing in one command.

Architecture

┌─────────┐     discover     ┌──────────┐     RPC      ┌─────────┐
│  Agent   │ ─────────────→  │   MCP    │ ──────────→  │  Your   │
│ (Claude) │    MCP :3001    │ Gateway  │              │ Service │
└─────────┘                  └──────────┘              └─────────┘
                                  │                        │
                                  ▼                        ▼
                             ┌──────────┐           ┌──────────┐
                             │  Consul  │           │  Jaeger  │
                             │ Registry │           │ Tracing  │
                             │   :8500  │           │  :16686  │
                             └──────────┘           └──────────┘

Quick Start

bash
docker-compose up

Endpoints

ServiceURL
MCP Toolshttp://localhost:3001/mcp/tools
Consul UIhttp://localhost:8500
Jaeger UIhttp://localhost:16686
Service RPChttp://localhost:9090

Test

bash
# List MCP tools
curl http://localhost:3001/mcp/tools | jq

# Call a tool
curl -X POST http://localhost:3001/mcp/call \
  -H 'Content-Type: application/json' \
  -d '{"tool": "myservice.Handler.Method", "arguments": {"key": "value"}}'

# View traces in Jaeger
open http://localhost:16686

Connect Claude Code

bash
# Claude Code can connect to the running MCP gateway
# Add to your Claude Code MCP settings:
json
{
  "mcpServers": {
    "my-services": {
      "url": "http://localhost:3001/mcp"
    }
  }
}

Customizing

Add Your Service

Replace the app service's build context with your service directory:

yaml
app:
  build:
    context: ../path/to/your/service
    dockerfile: Dockerfile

Add More Services

yaml
users:
  build: ./users
  environment:
    MICRO_REGISTRY: consul
    MICRO_REGISTRY_ADDRESS: consul:8500

orders:
  build: ./orders
  environment:
    MICRO_REGISTRY: consul
    MICRO_REGISTRY_ADDRESS: consul:8500

All services register with Consul. The MCP gateway discovers them automatically.

Add Redis Cache

yaml
redis:
  image: redis:7-alpine
  ports:
    - "6379:6379"

Then set MICRO_CACHE_ADDRESS=redis:6379 on your service.

Production Considerations

  • Add health checks to each service
  • Use named volumes for Consul data persistence
  • Configure rate limiting on the MCP gateway
  • Set up TLS between services
  • Use secrets management for API keys