docker-compose-env.yaml

502 阅读6分钟
version: '3'

services:
  jaeger:
  #使用jaegertracing/all-in-one:1.42.0 镜像
    image: jaegertracing/all-in-one:1.42.0
    #容器名称为 jaeger
    container_name: jaeger
    #表示容器始终重启
    restart: always
    #对外暴露的端口
    ports:
      #Jaeger agent 的 compact 协议端口
      - "5775:5775/udp"
      #Jaeger agent 的 binary 协议端口
      - "6831:6831/udp"
      #Jaeger agent 的配置端口
      - "6832:6832/udp"
      #Jaeger collector 接收 trace 数据的端口
      - "5778:5778"
      #Jaeger query 服务的端口,用于访问 UI
      - "16686:16686"
      #Jaeger collector 健康检查端口
      - "14268:14268"
      #Zipkin 兼容端口
      - "9411:9411"
      #配置环境变量
    environment:
        #指定存储为elasticsearch
      - SPAN_STORAGE_TYPE=elasticsearch
      #Elasticsearch的地址
      - ES_SERVER_URLS=http://elasticsearch:9200
      #日志级别为debug
      - LOG_LEVEL=debug
      #加入looklook_net网络
    networks:
      - looklook_net

  #prometheus监控 — Prometheus for monitoring
  prometheus:
    #使用 prom/prometheus:v2.28.1 镜像
    image: prom/prometheus:v2.28.1
    #容器名称为 prometheus
    container_name: prometheus
    #设置时区为亚洲/上海
    environment:
      # 时区上海 - Time zone Shanghai (Change if needed)
      TZ: Asia/Shanghai
    volumes:
      #把主机的配置文件目录 ./deploy/prometheus/server/prometheus.yml 挂载到容器的 /etc/prometheus/prometheus.yml
      - ./deploy/prometheus/server/prometheus.yml:/etc/prometheus/prometheus.yml
      #把主机的数据目录 ./data/prometheus/data 挂载到容器的 /prometheus
      - ./data/prometheus/data:/prometheus
    command:
        #加载配置文件 /etc/prometheus/prometheus.yml
      - '--config.file=/etc/prometheus/prometheus.yml'
        #指定存储路径为 /prometheus
      - '--storage.tsdb.path=/prometheus'
    #always 表示始终重启
    restart: always
    #root 用户运行
    user: root
    #对外暴露 9090 端口
    ports:
      - 9090:9090
    #加入 looklook_net 网络
    networks:
      - looklook_net

  #查看prometheus监控数据 - Grafana to view Prometheus monitoring data
  grafana:
    #使用 grafana/grafana:8.0.6 镜像
    image: grafana/grafana:8.0.6
    #容器名称为 grafana
    container_name: grafana
    #设置主机名为 grafana
    hostname: grafana
    #root 用户运行
    user: root
    #设置时区为亚洲/上海
    environment:
      # 时区上海 - Time zone Shanghai (Change if needed)
      TZ: Asia/Shanghai
    #always 永远重启
    restart: always
    #把主机的 ./data/grafana/data 目录挂载到容器的 /var/lib/grafana,用于保存 Grafana 数据
    volumes:
        - ./data/grafana/data:/var/lib/grafana
    #对外暴露 3001 端口,映射到内部的 3000 端口
    ports:
        - "3001:3000"
    #加入 looklook_net 网络
    networks:
        - looklook_net

  #搜集kafka业务日志、存储prometheus监控数据 - Kafka for collecting business logs and storing Prometheus monitoring data
  elasticsearch:
    #使用 docker.elastic.co/elasticsearch/elasticsearch:7.13.4 镜像
    image: docker.elastic.co/elasticsearch/elasticsearch:7.13.4
    #容器名称为 elasticsearch
    container_name: elasticsearch
    #root 用户运行
    user: root
    environment:
        #以单节点模式运行
      - discovery.type=single-node
         #设置JVM初始堆内存和最大堆内存为512MB
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
        #设置时区为亚洲/上海
      - TZ=Asia/Shanghai
    volumes:
        #把主机的./data/elasticsearch/data目录挂载到容器的/usr/share/elasticsearch/data,用于保存索引数据
      - ./data/elasticsearch/data:/usr/share/elasticsearch/data
    #always 永远重启
    restart: always
    ports:
    #对外暴露9200端口:RESTful API访问端口
    - 9200:9200
    #对外暴露9300端口:节点间通信端口
    - 9300:9300
    加入looklook_net网络
    networks:
      - looklook_net

  #查看elasticsearch数据 - Kibana to view Elasticsearch data
  kibana:
    #使用 docker.elastic.co/kibana/kibana:7.13.4 镜像
    image: docker.elastic.co/kibana/kibana:7.13.4
    #容器名称为 kibana
    container_name: kibana
    environment:
      #设置 Elasticsearch 地址为 http://elasticsearch:9200
      - elasticsearch.hosts=http://elasticsearch:9200
      #设置时区为亚洲/上海
      - TZ=Asia/Shanghai
    #always 永远重启
    restart: always
    #加入 looklook_net 网络
    networks:
      - looklook_net
    #对外暴露 5601 端口
    ports:
      - "5601:5601"
    #依赖 Elasticsearch 服务
    depends_on:
      - elasticsearch

  #消费kafka中filebeat收集的数据输出到es - The data output collected by FileBeat in Kafka is output to ES
  go-stash:
    #使用 kevinwan/go-stash 镜像,根据 CPU 架构选择相应的 tag
    image: kevinwan/go-stash:1.0 # if you "macOs intel" or "linux amd"
#    image: kevinwan/go-stash:1.0-arm64 #  if you "macOs m1" or "linux arm"
    #容器名称为 go-stash
    container_name: go-stash
    #设置时区为亚洲/上海
    environment:
      # 时区上海 - Time zone Shanghai (Change if needed)
      TZ: Asia/Shanghai
    #root 用户运行  
    user: root
    #always 永远重启
    restart: always
    #挂载主机的配置文件目录 ./deploy/go-stash/etc 到容器的 /app/etc
    volumes:
      - ./deploy/go-stash/etc:/app/etc
    #加入 looklook_net 网络
    networks:
      - looklook_net
    #依赖 elasticsearch 和 kafka 服务
    depends_on:
      - elasticsearch
      - kafka

  #收集业务数据 - Collect business data
  filebeat:
    #使用 elastic/filebeat:7.13.4 镜像
    image: elastic/filebeat:7.13.4
    #容器名称为 filebeat
    container_name: filebeat
    environment:
      #设置时区为亚洲/上海
      # 时区上海 - Time zone Shanghai (Change if needed)
      TZ: Asia/Shanghai
    #root 用户运行
    user: root
    #always 永远重启
    restart: always
    entrypoint: "filebeat -e -strict.perms=false"  #解决配置文件权限问题 - Solving the configuration file permissions
    volumes:
          #挂载主机的配置文件 ./deploy/filebeat/conf/filebeat.yml 到容器的 /usr/share/filebeat/filebeat.yml
      - ./deploy/filebeat/conf/filebeat.yml:/usr/share/filebeat/filebeat.yml
      # 此处需指定docker的containers目录,取决于你docker的配置 - The containers directory of docker needs to be specified here, depending on your docker configuration
      # 如snap安装的docker,则为/var/snap/docker/common/var-lib-docker/containers - Example if docker is installed by Snap /var/snap/docker/common/var-lib-docker/containers
      # - /var/snap/docker/common/var-lib-docker/containers:/var/lib/docker/containers
      #挂载 Docker 内部容器日志目录 /var/lib/docker/containers,用于收集容器日志
      - /var/lib/docker/containers:/var/lib/docker/containers
    #加入 looklook_net 网络
    networks:
      - looklook_net
    #依赖 kafka 服务
    depends_on:
      - kafka


  #zookeeper是kafka的依赖 - Zookeeper is the dependencies of Kafka
  zookeeper:
    #使用 wurstmeister/zookeeper 镜像
    image: wurstmeister/zookeeper
    #容器名称为 zookeeper
    container_name: zookeeper
    #设置时区为亚洲/上海
    environment:
      # 时区上海 - Time zone Shanghai (Change if needed)
      TZ: Asia/Shanghai
    #always 永远重启
    restart: always
    #对外暴露 2181 端口
    ports:
      - 2181:2181
    #加入 looklook_net 网络
    networks:
      - looklook_net

  #消息队列 - Message queue
  kafka:
    #使用 wurstmeister/kafka 镜像
    image: wurstmeister/kafka
    #容器名称为 kafka
    container_name: kafka
    #对外暴露 9092 端口
    ports:
      - 9092:9092
    environment:
      #将本机主机名暴露为 kafka
      - KAFKA_ADVERTISED_HOST_NAME=kafka
      #设置 Zookeeper 地址
      - KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
      #禁止自动创建 topics
      - KAFKA_AUTO_CREATE_TOPICS_ENABLE=false
      #设置时区
      - TZ=Asia/Shanghai
    #always 永远重启
    restart: always
    #挂载 Docker socket 文件用于获取容器信息
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    #加入 looklook_net 网络
    networks:
      - looklook_net
    #依赖 Zookeeper 服务
    depends_on:
      - zookeeper

  #asynqmon asynq延迟队列、定时队列的webui - Asynqmon asynq delay queue, timing queue's webUI
  asynqmon:
    #使用 hibiken/asynqmon 镜像
    image: hibiken/asynqmon:latest
    #容器名称为 asynqmon
    container_name: asynqmon
    #对外暴露 8980 端口,映射到内部的 8080 端口
    ports:
      - 8980:8080
    command:
      #设置 Redis 地址和密码
      - '--redis-addr=redis:6379'
      - '--redis-password=G62m50oigInC30sf'
    #always 永远重启
    restart: always
    #加入 looklook_net 网络
    networks:
      - looklook_net
    #依赖 redis 服务
    depends_on:
      - redis

  mysql:
    #使用 mysql/mysql-server:8.0.28 镜像
    image: mysql/mysql-server:8.0.28
    #容器名称为 mysql
    container_name: mysql
    #设置时区和 root 用户密码
    environment:
      # 时区上海 - Time zone Shanghai (Change if needed)
      TZ: Asia/Shanghai
      # root 密码 - root password
      MYSQL_ROOT_PASSWORD: PXDN93VRKUm8TeE7
    #对外暴露 33069 端口,映射到内部的 3306 端口
    ports:
      - 33069:3306
    #挂载数据目录用于持久化存储数据
    volumes:
      # 数据挂载 - Data mounting
      - ./data/mysql/data:/var/lib/mysql
      # 日志
    #覆盖命令,修改密码策略及字符集等配置
    command:
      # 将mysql8.0默认密码策略 修改为 原先 策略 (mysql8.0对其默认策略做了更改 会导致密码无法匹配) 
      # Modify the Mysql 8.0 default password strategy to the original strategy (MySQL8.0 to change its default strategy will cause the password to be unable to match)
      #将密码认证插件设置为 mysql_native_password
      --default-authentication-plugin=mysql_native_password
      #设置默认字符集为 utf8mb4
      --character-set-server=utf8mb4
      #设置默认校对规则为 utf8mb4_general_ci
      --collation-server=utf8mb4_general_ci
      #设置TIMESTAMP类型字段默认不为空值
      --explicit_defaults_for_timestamp=true
      #设置表名大小写不敏感
      --lower_case_table_names=1
    #给予特权用于挂载卷
    privileged: true
    #always 永远重启
    restart: always
    #加入 looklook_net 网络
    networks:
      - looklook_net

  #redis容器 - Redis container
  redis:
    #使用 redis:6.2.5 镜像
    image: redis:6.2.5
    #容器名称为 redis
    container_name: redis
    #对外暴露 36379 端口,映射到内部的 6379 端口
    ports:
      - 36379:6379
    #设置时区为亚洲/上海
    environment:
      # 时区上海 - Time zone Shanghai (Change if needed)
      TZ: Asia/Shanghai
    #挂载数据目录用于持久化存储数据
    volumes:
      # 数据文件 - data files
      - ./data/redis/data:/data:rw
    #设置密码并开启 AOF 持久化
    command: "redis-server --requirepass G62m50oigInC30sf  --appendonly yes"
    #true 获得特权用于挂载卷
    privileged: true
    #always 永远重启
    restart: always
    #加入 looklook_net 网络
    networks:
      - looklook_net


networks:
  #networks 节点下面创建了一个名为 looklook_net 的网络
  looklook_net:
    #bridge 表示这是一个桥接模式的网络
    driver: bridge
    #用于配置网络的 IP 地址分配
    ipam:
      config:
        #172.16.0.0/16 表示该网络的子网地址范围
        - subnet: 172.16.0.0/16