Skip to content

开发环境中间件部署 (Docker Compose)

本文档提供了一份适用于开发环境的 Docker Compose 配置文件,用于快速部署 Redis, Elasticsearch, Kibana, RocketMQ (含 Dashboard)。

服务列表

  • Redis: 6379
  • Elasticsearch (ES): 9200 (REST), 9300 (Transport)
  • Kibana: 5601 (连接 ES)
  • RocketMQ Namesrv: 9876
  • RocketMQ Broker: 10911, 10909, 8081, 8085
    • RocketMQ Dashboard: 8085 (寄生在 Broker 容器上)

docker-compose.yml

以下是具体的配置文件:

yaml
services:
  # --- Redis (不变) ---
  redis:
    image: redis:latest
    container_name: redis
    ports:
      - "6379:6379"
    restart: always

  # --- ES + Kibana (不变) ---
  elasticsearch:
    image: elasticsearch:8.17.0
    container_name: elasticsearch
    environment:
      - "discovery.type=single-node"
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
      - "xpack.security.enabled=false"
    ports:
      - "9200:9200"
      - "9300:9300"
    volumes:
      - es_data:/usr/share/elasticsearch/data

  kibana:
    image: kibana:8.17.0
    container_name: kibana
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
      - I18N_LOCALE=zh-CN
    ports:
      - "5601:5601"
    depends_on:
      - elasticsearch

  # --- RocketMQ Namesrv ---
  rmqnamesrv:
    image: apache/rocketmq:5.4.0
    container_name: rmqnamesrv
    command: sh mqnamesrv
    ports:
      - "9876:9876"

  # --- RocketMQ Broker (关键) ---
  rmqbroker:
    image: apache/rocketmq:5.4.0
    container_name: rmqbroker
    ports:
      - "10911:10911"
      - "10909:10909"
      - "8081:8081"
      - "8085:8085" # <--- 把 Dashboard 的端口也在这里映射
    environment:
      - NAMESRV_ADDR=rmqnamesrv:9876
    # 【关键设置】告诉大家我是 127.0.0.1
    # 1. Windows 连 127.0.0.1 -> 通!
    # 2. Dashboard 连 127.0.0.1 -> 因为和 Broker 在一起,也是通!
    command: sh -c 'printf "brokerIP1=127.0.0.1\nautoCreateTopicEnable=true\nautoCreateSubscriptionGroup=true\n" > /home/rocketmq/rocketmq-5.4.0/conf/broker.conf && sh mqbroker -n rmqnamesrv:9876 -c /home/rocketmq/rocketmq-5.4.0/conf/broker.conf --enable-proxy'
    depends_on:
      - rmqnamesrv

  # --- RocketMQ Dashboard (寄生模式) ---
  rmqdashboard:
    image: apacherocketmq/rocketmq-dashboard:latest
    container_name: rmqdashboard
    # 【核心魔法】完全不使用自己的网络,直接寄生在 rmqbroker 上
    network_mode: "service:rmqbroker"
    environment:
      - JAVA_OPTS=-Drocketmq.namesrv.addr=rmqnamesrv:9876 -Dserver.port=8085
      # 必须把内部端口改成 8085,防止和 Broker 的 8080/8081 冲突
    depends_on:
      - rmqbroker

volumes:
  es_data: