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