Docker 部署#

本指南描述如何使用 Docker 部署 Cloud Native MCP Server。

前提条件#

  • Docker 20.10+ 已安装
  • 适当的 Docker 权限

快速启动#

基本运行#

1
2
3
4
5
docker run -d \
  --name cloud-native-mcp-server \
  -p 8080:8080 \
  -v ~/.kube:/root/.kube:ro \
  mahmutabi/cloud-native-mcp-server:latest

自定义配置#

1
2
3
4
5
6
7
8
9
docker run -d \
  --name cloud-native-mcp-server \
  -p 8080:8080 \
  -v ~/.kube:/root/.kube:ro \
  -v $(pwd)/config.yaml:/app/config.yaml:ro \
  -e MCP_MODE=sse \
  -e MCP_ADDR=0.0.0.0:8080 \
  -e MCP_LOG_LEVEL=info \
  mahmutabi/cloud-native-mcp-server:latest

Docker Compose#

创建 docker-compose.yml#

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
version: '3.8'

services:
  cloud-native-mcp-server:
    image: mahmutabi/cloud-native-mcp-server:latest
    container_name: cloud-native-mcp-server
    ports:
      - "8080:8080"
    volumes:
      - ~/.kube:/root/.kube:ro
      - ./config.yaml:/app/config.yaml:ro
    environment:
      - MCP_MODE=sse
      - MCP_ADDR=0.0.0.0:8080
      - MCP_LOG_LEVEL=info
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "wget", "--spider", "http://localhost:8080/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
    networks:
      - monitoring

networks:
  monitoring:
    external: true

使用 Docker Compose#

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 启动
docker-compose up -d

# 查看日志
docker-compose logs -f

# 停止
docker-compose down

# 重启
docker-compose restart

配置文件#

config.yaml#

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
server:
  mode: "sse"
  addr: "0.0.0.0:8080"

logging:
  level: "info"
  json: false

kubernetes:
  kubeconfig: ""

grafana:
  enabled: true
  url: "http://grafana:3000"
  apiKey: "${GRAFANA_API_KEY}"

prometheus:
  enabled: true
  address: "http://prometheus:9090"

auth:
  enabled: true
  mode: "apikey"
  apiKey: "${MCP_AUTH_API_KEY}"

环境变量#

支持的环境变量#

1
2
3
4
5
6
MCP_MODE=sse
MCP_ADDR=0.0.0.0:8080
MCP_LOG_LEVEL=info
MCP_AUTH_ENABLED=true
MCP_AUTH_MODE=apikey
MCP_AUTH_API_KEY=your-key

使用 .env 文件#

创建 .env 文件:

1
2
3
4
5
MCP_MODE=sse
MCP_ADDR=0.0.0.0:8080
MCP_LOG_LEVEL=info
MCP_AUTH_API_KEY=your-secret-key
GRAFANA_API_KEY=your-grafana-key

更新 docker-compose.yml:

1
2
3
4
5
services:
  cloud-native-mcp-server:
    # ... 其他配置
    env_file:
      - .env

卷挂载#

挂载 kubeconfig#

1
-v ~/.kube:/root/.kube:ro

挂载配置文件#

1
-v $(pwd)/config.yaml:/app/config.yaml:ro

挂载日志目录#

1
-v $(pwd)/logs:/var/log/cloud-native-mcp-server

网络配置#

使用自定义网络#

1
2
3
networks:
  mcp-network:
    driver: bridge

连接到外部网络#

1
2
3
4
5
6
7
8
9
networks:
  - external_network
  - mcp-network

networks:
  external_network:
    external: true
  mcp-network:
    driver: bridge

资源限制#

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
services:
  cloud-native-mcp-server:
    # ... 其他配置
    deploy:
      resources:
        limits:
          cpus: '1.0'
          memory: 512M
        reservations:
          cpus: '0.5'
          memory: 256M

健康检查#

内置健康检查#

1
2
3
4
5
6
healthcheck:
  test: ["CMD", "wget", "--spider", "http://localhost:8080/health"]
  interval: 30s
  timeout: 10s
  retries: 3
  start_period: 40s

自定义健康检查#

1
2
3
4
5
healthcheck:
  test: ["CMD-SHELL", "curl -f http://localhost:8080/health || exit 1"]
  interval: 30s
  timeout: 10s
  retries: 3

自定义镜像#

Dockerfile#

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
FROM golang:1.25-alpine AS builder

WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download

COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o cloud-native-mcp-server ./cmd/server

FROM alpine:latest

RUN apk --no-cache add ca-certificates wget
WORKDIR /root/

COPY --from=builder /app/cloud-native-mcp-server .

EXPOSE 8080

HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
  CMD wget --spider -q http://localhost:8080/health || exit 1

CMD ["./cloud-native-mcp-server"]

构建镜像#

1
docker build -t your-registry/cloud-native-mcp-server:latest .

推送镜像#

1
docker push your-registry/cloud-native-mcp-server:latest

多容器部署#

完整栈示例#

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
version: '3.8'

services:
  cloud-native-mcp-server:
    image: mahmutabi/cloud-native-mcp-server:latest
    ports:
      - "8080:8080"
    volumes:
      - ~/.kube:/root/.kube:ro
      - ./config.yaml:/app/config.yaml:ro
    env_file:
      - .env
    depends_on:
      - grafana
      - prometheus
    networks:
      - monitoring

  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    volumes:
      - grafana-data:/var/lib/grafana
    networks:
      - monitoring

  prometheus:
    image: prom/prometheus:latest
    ports:
      - "9090:9090"
    volumes:
      - prometheus-data:/prometheus
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    networks:
      - monitoring

volumes:
  grafana-data:
  prometheus-data:

networks:
  monitoring:
    driver: bridge

日志管理#

查看日志#

1
2
3
4
5
6
7
8
# 实时日志
docker-compose logs -f

# 最近 100 行
docker-compose logs --tail=100

# 特定服务
docker-compose logs -f cloud-native-mcp-server

日志驱动#

1
2
3
4
5
6
7
services:
  cloud-native-mcp-server:
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

故障排查#

检查容器状态#

1
2
3
docker ps -a
docker logs cloud-native-mcp-server
docker inspect cloud-native-mcp-server

进入容器#

1
docker exec -it cloud-native-mcp-server sh

重新构建#

1
2
3
docker-compose down
docker-compose build
docker-compose up -d

相关文档#