尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Docker Compose 模块化多环境配置规范指南:示例搭建SkyWalking 11.0.0-java21

Docker Compose 模块化多环境配置规范指南:示例搭建SkyWalking 11.0.0-java21 Docker Compose 模块化多环境配置规范指南示例搭建SkyWalking 11.0.0-java21Docker Compose 模块化多环境配置规范指南示例skywalking_V11.0.0-java21目录结构规范配置文件详解与完整注释1. 全局公共环境配置dev/.env2. 服务私有环境配置dev/skywalking_V11.0.0-java21/.env3. 服务编排配置dev/skywalking_V11.0.0-java21/docker-compose.yml4. SkyWalking Horizon UI 核心配置horizon.yaml5. 服务启动6. 浏览器访问Docker Compose 模块化多环境配置规范指南服务的版本、端口、密码以及项目的环境网络这些要怎么放置标准的规范做法是双层配置隔离根目录公共.env仅保留全局通用变量ENV、COMPOSE_PROJECT_NAME、NETWORK_NAME等。服务私有.env与服务的docker-compose.yml同级放置仅维护该服务独有的参数如版本、密码、端口、JVM 配置等。示例skywalking_V11.0.0-java21目录结构规范以下为标准的工程目录结构。不同环境如dev/test/prod通过顶层文件夹进行物理隔离.env按照双层变量隔离的方式dev/ ├── .env # 全局公共环境配置文件仅定义共享基础设施变量 └── skywalking_V11.0.0-java21/ # 独立服务单元 ├── .env # 服务私有环境配置文件仅定义服务专属变量 ├── docker-compose.yml # Docker Compose 编排文件 └── volumes/ # 持久化数据与日志挂载目录 └── horizon/ # Horizon UI 挂载目录 └── horizon.yaml # SkyWalking Horizon UI 核心配置文件配置文件详解与完整注释1. 全局公共环境配置dev/.env位于环境根目录下仅保留跨服务共享的基础网络与项目标识参数。# # Docker Compose 全局公共环境配置文件# 作用管理跨服务的全局基础设施配置如网络、环境标识等# ############################################################# 环境基础配置############################################################# 当前运行环境标识# 可选值dev开发、test测试、prod生产ENVdev# Docker Compose 全局项目名称影响容器默认命名前缀COMPOSE_PROJECT_NAMEdev############################################################# Docker 公共网络配置############################################################# 跨服务通信的 Docker 共享网络名称NETWORK_NAMEnetwork-${ENV}# 自定义 Docker bridge 网络子网掩码确保网段不与宿主机冲突NETWORK_SUBNET10.10.0.0/242. 服务私有环境配置dev/skywalking_V11.0.0-java21/.env位于服务目录下包含与 Elasticsearch 强绑定的个性化参数。# # SkyWalking 服务专属环境配置文件# 作用管理 SkyWalking OAP 和 UI 独享的版本、存储凭证及暴露端口# 位置与服务自身的 docker-compose.yml 同级# ############################################################# SkyWalking 配置############################################################# SkyWalking OAP 镜像版本带 JDK 21 运行时环境SW_VERSION11.0.0-java21# SkyWalking Horizon UI 镜像版本SW_UI_VERSIONhorizon-1.0.0# SkyWalking OAP 连接 Elasticsearch 使用的账号与密码SW_ES_USERelasticSW_ES_PASSWORDPass8520# OAP gRPC 服务端口Agent 上报数据使用容器内部默认端口11800SW_OAP_PORT_GRPC11800# OAP REST API 端口内部 REST 服务及 GraphQL 查询容器内部默认端口12800SW_OAP_PORT_REST12800# OAP Admin 服务端口Horizon UI 写操作交互容器内部默认端口17128SW_OAP_PORT_ADMIN17128# OAP Zipkin 服务端口Zipkin v2 接收与查询端口容器内部默认端口9412SW_OAP_PORT_ZIPKIN9412# SkyWalking UI Web 访问端口宿主机访问端口容器内部默认端口8081SW_UI_PORT80813. 服务编排配置dev/skywalking_V11.0.0-java21/docker-compose.yml# # SkyWalking Docker Compose 配置## 目录结构# dev/# ├── .env# └── skywalking_V11.0.0-java21/# ├── .env# ├── docker-compose.yml# └── volumes/# └── horizon/# └── horizon.yaml # Horizon UI 专属挂载文件## 说明## 1. 环境配置# 全局基础参数ENV、NETWORK等由根目录公共 .env 管理# SkyWalking 专属参数版本、ES账号密码、端口等由服务同级 .env 管理。## 2. 存储与依赖# SkyWalking OAP 依赖 Elasticsearch 作为持久化存储组件# 在同一 Docker 网络中通过服务名 elasticsearch:9200 进行通信。## 3. 路径规则# 所有宿主机挂载目录均采用相对路径# 相对路径以当前 docker-compose.yml 所在目录为基准。## 4. 环境隔离# 挂载路径不使用 ${ENV} 拼接。# 不同环境通过上层目录进行隔离例如# dev/skywalking_V11.0.0-java21、test/skywalking_V11.0.0-java21。## 5. 数据迁移# skywalking_V11.0.0-java21/ 目录包含 Compose 配置# 可作为当前环境 SkyWalking 链路追踪服务的整体备份和迁移单元。## ############################################################# 网络配置############################################################networks:# Compose 内部网络名称。env_network:# 使用 Docker Bridge 网络。driver: bridge# Docker 实际网络名称由上层公共 .env 管理。name:${NETWORK_NAME}# 自定义网络地址范围。ipam: config: - subnet:${NETWORK_SUBNET}############################################################# 服务配置############################################################services:########################################################### SkyWalking OAP Server##########################################################skywalking-oap:# SkyWalking OAP 镜像及版本。# 版本由私有 .env 中的 SW_VERSION (11.0.0-java21) 管理。image: apache/skywalking-oap-server:${SW_VERSION}# 容器名称自动拼接环境与版本号。# 例如skywalking-oap_dev_V11.0.0-java21container_name: skywalking-oap_${ENV}_V${SW_VERSION}# 加入当前环境的 Docker 网络。networks: - env_network# 端口映射。## gRPC# 宿主机 ${SW_OAP_PORT_GRPC} - 容器 11800Agent 上报数据## REST# 宿主机 ${SW_OAP_PORT_REST} - 容器 12800内部 API / UI 查询## Admin# 宿主机 ${SW_OAP_PORT_ADMIN} - 容器 17128Horizon UI 管理接口## Zipkin# 宿主机 ${SW_OAP_PORT_ZIPKIN} - 容器 9412Zipkin Trace 接收与 API 查询ports: -${SW_OAP_PORT_GRPC}:11800-${SW_OAP_PORT_REST}:12800-${SW_OAP_PORT_ADMIN}:17128-${SW_OAP_PORT_ZIPKIN}:9412# SkyWalking OAP 运行参数。environment:# 存储类型指定为 Elasticsearch。SW_STORAGE: elasticsearch# ES HTTP 协议。SW_STORAGE_ES_HTTP_PROTOCOL: http# 内部访问 ES 使用 Elasticsearch 服务名。SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200# ES 身份验证凭证。SW_ES_USER:${SW_ES_USER}SW_ES_PASSWORD:${SW_ES_PASSWORD}# 数据保留 TTL 设置天。SW_CORE_RECORD_DATA_TTL:7SW_CORE_METRICS_DATA_TTL:15SW_CORE_LOG_DATA_TTL:7# 刷新间隔。SW_STORAGE_FLUSH_INTERVAL:10# 启动 Zipkin 插件SW_RECEIVER_ZIPKIN: default SW_QUERY_ZIPKIN: default######################################################### 健康检查########################################################healthcheck:# 检查 OAP 内部 REST 端口健康状态使用 Bash 内置网络设备进行 TCP 探测适配无 curl 镜像。test:[CMD-SHELL,bash -c cat /dev/null /dev/tcp/127.0.0.1/12800 || exit 1]# 每 10 秒检查一次。interval: 10s# 单次健康检查最大执行时间。timeout: 5s# 连续失败 10 次后标记为 unhealthy。retries:10# 启动阶段给予 120 秒宽限时间等待 ES 初始化索引与 Schema。start_period: 120s# 容器异常退出后自动重启。restart: unless-stopped######################################################### 容器标签########################################################labels:# 当前环境。env:${ENV}# SkyWalking OAP 版本。version:${SW_VERSION}# 服务名称自动拼接环境与版本号。service: skywalking-oap_${ENV:-dev}_V${SW_VERSION}########################################################### SkyWalking Horizon UI##########################################################skywalking-ui:# SkyWalking Horizon UI 镜像及版本。# 版本由私有 .env 中的 SW_UI_VERSION (horizon-1.0.0) 管理。image: apache/skywalking-ui:${SW_UI_VERSION}# 容器名称自动拼接环境与 UI 版本号。# 例如skywalking-ui_dev_Vhorizon-1.0.0container_name: skywalking-ui_${ENV}_V${SW_UI_VERSION}# 加入当前环境的 Docker 网络。networks: - env_network# 依赖服务关系确保 OAP 完全就绪后再启动 UI。depends_on: skywalking-oap: condition: service_healthy# 端口映射。## HTTP Web UI# 宿主机 ${SW_UI_PORT} - 容器 8081Horizon UI 容器内默认监听端口ports: -${SW_UI_PORT}:8081# 目录挂载。# 挂载 Horizon UI 核心配置文件指定只读权限。volumes: - ./volumes/horizon/horizon.yaml:/app/horizon.yaml:ro######################################################### 健康检查########################################################healthcheck:# 检查 UI Web 端口连通性使用 Bash 内置网络设备探测容器内 8081 端口。test:[CMD-SHELL,bash -c cat /dev/null /dev/tcp/127.0.0.1/8081 || exit 1]# 每 10 秒检查一次。interval: 10s# 单次健康检查最大执行时间。timeout: 5s# 连续失败 5 次后标记为 unhealthy。retries:5# 启动阶段给予 15 秒宽限时间。start_period: 15s# 容器异常退出后自动重启。restart: unless-stopped######################################################### 容器标签########################################################labels:# 当前环境。env:${ENV}# SkyWalking UI 版本。version:${SW_UI_VERSION}# 服务名称自动拼接环境与版本号。service: skywalking-ui_${ENV:-dev}_V${SW_UI_VERSION}4. SkyWalking Horizon UI 核心配置horizon.yaml在skywalking_V11.0.0-java21/volumes目录下新建horizon.yaml# # SkyWalking Horizon UI 核心配置文件# 作用管理 UI 监听地址、后端 OAP 连接与本地认证用户# 位置与服务自身的 docker-compose.yml 同级 volumes/horizon 目录下# server:# 必须绑定 0.0.0.0否则容器内默认绑定 127.0.0.1 会导致宿主机访问报 503host:0.0.0.0port:8081oap:# 指向 Docker 网络内部的 OAP 服务名queryUrl:http://skywalking-oap:12800adminUrl:http://skywalking-oap:17128zipkinUrl:http://skywalking-oap:9412/zipkinauth:backend:locallocal:users:-username:skywalking_adminpasswordHash:$argon2i$v19$m16,t2,p1$MGhreFV3M1U1bWpIUVJHSw$82Qu0Zpwq2wDCs6sjnrGWgroles:[admin]Horizon UI 的登录密码用Argon2id单向哈希算法存储可以使用在线 Argon2id 工具https://argon2.online/5. 服务启动在skywalking_V11.0.0-java21/目录下执行命令时显式同时加载父级和当前目录的.env文件dockercompose --env-file../.env --env-file .env up-d注意必须同时写上--env-file ../.env和--env-file .env这样 Compose 才能在语法解析阶段同时获取到父级的ENV、NETWORK_NAME以及子级的ES_VERSION。出现这个警告是因为 Docker Compose 在同一个项目名称Project Name下检测到了不属于当前docker-compose.yml文件定义的其他容器。警告原因分析出现该警告的核心原因在于多个子服务共享了同一个 Docker Compose 项目名称Project Name项目名称统一由于公共配置文件中统一指定了固定的COMPOSE_PROJECT_NAME例如devDocker Compose 会将该项目下的所有服务如容器 A、容器 B 等归入同一个逻辑项目集中管理。局部文件读取当在某个独立的服务子目录下执行部署命令时Docker Compose 仅会加载当前目录下的docker-compose.yml配置文件。识别为孤儿容器Compose 在检查全局项目状态时发现该项目下存在其他已经在运行、但未定义在当前docker-compose.yml文件中的容器因此将其标记为“孤儿容器orphan containers”并发出提醒。影响说明无负面影响这仅是 Docker Compose 的正常提示信息不会影响当前服务的启动与运行也不会自动删除或干预其他正在运行的容器。符合预期将多个组件放在同一个大项目名下属于合理的管理方式只要已运行的其他服务仍需继续提供服务完全忽略此警告即可。6. 浏览器访问
返回列表