go-micro Docker & Self-Hosted Deployment

GitHub

A Go agent harness and service framework

23,009 stars Go Go 1 file ยท ~7,630 tokens #ai#ai-agents#distributed-systems#go#golang#mcp#micro#microservices
RAW Compose
1. Pull Image (DOCKERHUB) docker pull library/consul
2. Docker Run (1-Click Launch) docker run -d --name go-micro -p 8500:8500 --restart always consul:1.15
3. Podman Run podman run -d --name go-micro -p 8500:8500 --restart always consul:1.15
4. Skopeo Inspect (Zero-Pull Manifest) skopeo inspect docker://docker.io/library/consul:1.15
5. ORAS Pull (OCI Artifact) oras pull consul:1.15
6. Compose Deployment docker compose up -d
examples/deployment/docker-compose.yml
Download .yml
# Go Micro + MCP Gateway deployment with Docker Compose
#
# This runs:
#   1. Consul     โ€” service registry (discovery)
#   2. App        โ€” your go-micro service(s)
#   3. MCP Gateway โ€” standalone MCP gateway connected to Consul
#   4. Jaeger     โ€” distributed tracing UI
#
# Usage:
#   docker-compose up
#
# Endpoints:
#   MCP Tools:  http://localhost:3001/mcp/tools
#   Consul UI:  http://localhost:8500
#   Jaeger UI:  http://localhost:16686
#   Service:    http://localhost:9090 (RPC)

services:
  # --- Service Registry ---
  consul:
    image: consul:1.15
    ports:
      - "8500:8500"
    command: agent -server -bootstrap-expect=1 -ui -client=0.0.0.0

  # --- Your Go Micro Service ---
  app:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "9090:9090"
    environment:
      MICRO_REGISTRY: consul
      MICRO_REGISTRY_ADDRESS: consul:8500
      MICRO_SERVER_ADDRESS: :9090
    depends_on:
      - consul
    restart: unless-stopped

  # --- MCP Gateway (standalone) ---
  mcp-gateway:
    build:
      context: .
      dockerfile: Dockerfile.gateway
    ports:
      - "3001:3001"
    environment:
      MICRO_REGISTRY: consul
      MICRO_REGISTRY_ADDRESS: consul:8500
      MCP_ADDRESS: :3001
      OTEL_EXPORTER_OTLP_ENDPOINT: http://jaeger:4318
    depends_on:
      - consul
      - app
    restart: unless-stopped

  # --- Tracing ---
  jaeger:
    image: jaegertracing/all-in-one:1.53
    ports:
      - "16686:16686"   # UI
      - "4318:4318"     # OTLP HTTP
    environment:
      COLLECTOR_OTLP_ENABLED: "true"