用Docker快速部署全链路追踪系统需封装OAP、存储、UI为容器,通过Docker Compose编排依赖顺序与网络,选用官方es7/hbase2镜像避免版本冲突,调优宿主机参数并配置Agent JVM参数接入。

用 Docker 实现全链路追踪系统的快速部署,核心在于把监控组件(如 OAP 服务、存储后端、UI 界面)封装为标准化容器,通过统一网络、版本控制和启动顺序,消除环境差异带来的部署障碍。关键不是堆砌命令,而是理清依赖关系和配置逻辑。
选对组件组合,避免版本踩坑
SkyWalking、Jaeger、Pinpoint 都支持 Docker 部署,但版本兼容性极敏感。例如 SkyWalking 8.6.0+ 才支持日志追踪,且必须搭配 Elasticsearch 7.x(如 7.12.1),不能直接用 8.x;而 Pinpoint 依赖 HBase 2.2.6,镜像需自行构建或使用社区验证过的 tag。建议优先选用官方 Docker Hub 标记为 es7、hbase2 的镜像,跳过“最新版”陷阱。
用 Docker Compose 统一编排,省去手动启停
单靠 docker run 容易遗漏依赖顺序(比如 OAP 必须等 Elasticsearch 启动完成才能连上)。Docker Compose 能自动处理:
- 服务启动顺序(通过
depends_on+ healthcheck) - 内部网络互通(默认 bridge 网络,服务名可直接当 host 使用)
- 卷挂载与配置注入(如 ES 数据目录、OAP 的
application.yml环境变量)
示例关键片段:
services:
elasticsearch:
image: elasticsearch:7.12.1
environment:
- discovery.type=single-node
- ES_JAVA_OPTS=-Xms512m -Xmx512m
volumes:
- ./es-data:/usr/share/elasticsearch/data
oap:
image: apache/skywalking-oap-server:8.8.0-es7
depends_on:
- elasticsearch
environment:
- SW_STORAGE=elasticsearch7
- SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200
ports:
- "11800:11800"
- "12800:12800"
ui:
image: apache/skywalking-ui:8.8.0
depends_on:
- oap
environment:
- SW_OAP_ADDRESS=oap:12800
ports:
- "8080:8080"
提前调优宿主机与存储配置
Docker 容器本身轻量,但底层存储和内核参数不调,ES 或 BanyanDB 很容易启动失败:
- Elasticsearch 要求
vm.max_map_count ≥ 262144,需在宿主机执行sysctl -w vm.max_map_count=262144 - 持久化目录(如
/data/elasticsearch)要设为chmod 777或用非 root 用户运行容器,否则 ES 因权限拒绝写入 - 内存不足时,OAP 会频繁 GC,建议宿主机至少 8GB RAM,ES 和 OAP 各分配 2GB 堆内存(通过
ES_JAVA_OPTS和SW_CORE_JVM_OPTS控制)
Agent 接入只需一行 JVM 参数
服务端部署完,被监控应用只需加 -javaagent 参数即可上报数据,完全无代码修改:
java -javaagent:/path/to/skywalking-agent.jar \
-Dskywalking.agent.service_name=order-service \
-Dskywalking.collector.backend_service=skywalking-oap:11800 \
-jar order-service.jar
注意路径需挂载进容器,或使用镜像内置 agent;服务名必须唯一,backend_service 填 Compose 中 OAP 服务名 + 端口。
不复杂但容易忽略。











