12 KiB
12 KiB
ThingsBoard Docker 镜像分类分析
1. 概述
本文档分析 docker/ 目录下所有 Docker Compose 配置文件中使用的镜像,区分哪些是 ThingsBoard 自身构建的镜像,哪些是第三方镜像。
2. 镜像识别方法
2.1 ThingsBoard 自身镜像的特征
ThingsBoard 自身构建的镜像都使用环境变量的形式定义:
image: "${DOCKER_REPO}/${XXX_DOCKER_NAME}:${TB_VERSION}"
其中:
DOCKER_REPO: 默认值为thingsboard(定义在msa/pom.xml)TB_VERSION: ThingsBoard 版本号(如4.2.1)XXX_DOCKER_NAME: 具体服务的镜像名称变量
2.2 第三方镜像的特征
第三方镜像直接使用固定的镜像名称,如:
postgres:16zookeeper:3.8.1cassandra:5.0
3. ThingsBoard 自身镜像列表
3.1 核心服务镜像
| 服务名称 | 镜像变量 | 实际镜像名称 | 用途 | 配置文件位置 |
|---|---|---|---|---|
| tb-core1/tb-core2 | ${DOCKER_REPO}/${TB_NODE_DOCKER_NAME} |
thingsboard/tb-node |
核心服务(设备管理、用户管理、API) | docker-compose.yml |
| tb-rule-engine1/tb-rule-engine2 | ${DOCKER_REPO}/${TB_NODE_DOCKER_NAME} |
thingsboard/tb-node |
规则引擎服务 | docker-compose.yml |
说明:
tb-core和tb-rule-engine使用同一个镜像thingsboard/tb-node- 通过环境变量
TB_SERVICE_TYPE区分服务类型:TB_SERVICE_TYPE=tb-core→ 核心服务TB_SERVICE_TYPE=tb-rule-engine→ 规则引擎服务
3.2 传输服务镜像
| 服务名称 | 镜像变量 | 实际镜像名称 | 用途 | 配置文件位置 |
|---|---|---|---|---|
| tb-mqtt-transport1/2 | ${DOCKER_REPO}/${MQTT_TRANSPORT_DOCKER_NAME} |
thingsboard/tb-mqtt-transport |
MQTT 传输服务 | docker-compose.yml |
| tb-http-transport1/2 | ${DOCKER_REPO}/${HTTP_TRANSPORT_DOCKER_NAME} |
thingsboard/tb-http-transport |
HTTP 传输服务 | docker-compose.yml |
| tb-coap-transport | ${DOCKER_REPO}/${COAP_TRANSPORT_DOCKER_NAME} |
thingsboard/tb-coap-transport |
CoAP 传输服务 | docker-compose.yml |
| tb-lwm2m-transport | ${DOCKER_REPO}/${LWM2M_TRANSPORT_DOCKER_NAME} |
thingsboard/tb-lwm2m-transport |
LWM2M 传输服务 | docker-compose.yml |
| tb-snmp-transport | ${DOCKER_REPO}/${SNMP_TRANSPORT_DOCKER_NAME} |
thingsboard/tb-snmp-transport |
SNMP 传输服务 | docker-compose.yml |
3.3 前端服务镜像
| 服务名称 | 镜像变量 | 实际镜像名称 | 用途 | 配置文件位置 |
|---|---|---|---|---|
| tb-web-ui1/2 | ${DOCKER_REPO}/${WEB_UI_DOCKER_NAME} |
thingsboard/tb-web-ui |
Web UI 前端服务 | docker-compose.yml |
3.4 辅助服务镜像
| 服务名称 | 镜像变量 | 实际镜像名称 | 用途 | 配置文件位置 |
|---|---|---|---|---|
| tb-js-executor | ${DOCKER_REPO}/${JS_EXECUTOR_DOCKER_NAME} |
thingsboard/tb-js-executor |
JavaScript 执行器(10个副本) | docker-compose.yml |
| tb-vc-executor1/2 | ${DOCKER_REPO}/${TB_VC_EXECUTOR_DOCKER_NAME} |
thingsboard/tb-vc-executor |
版本控制执行器 | docker-compose.yml |
| tb-edqs1/2 | ${DOCKER_REPO}/${EDQS_DOCKER_NAME} |
thingsboard/tb-edqs |
事件驱动查询服务 | docker-compose.edqs.yml |
3.5 ThingsBoard 维护的第三方工具镜像
| 服务名称 | 镜像名称 | 用途 | 说明 | 配置文件位置 |
|---|---|---|---|---|
| haproxy | thingsboard/haproxy-certbot:2.2.33-alpine |
负载均衡器 + SSL 证书管理 | ThingsBoard 维护的 HAProxy 镜像,集成 Certbot | docker-compose.yml |
说明:
- 虽然这个镜像在
thingsboard/命名空间下,但它不是 ThingsBoard 应用服务本身 - 它是 ThingsBoard 团队维护的 HAProxy 镜像,添加了 Certbot 支持
4. 第三方镜像列表
4.1 数据库镜像
| 服务名称 | 镜像名称 | 版本 | 用途 | 配置文件位置 |
|---|---|---|---|---|
| postgres | postgres:16 |
16 | PostgreSQL 数据库(实体数据) | docker-compose.postgres.yml, docker-compose.hybrid.yml |
| cassandra | cassandra:5.0 |
5.0 | Apache Cassandra(时序数据) | docker-compose.hybrid.yml |
4.2 消息队列镜像
| 服务名称 | 镜像名称 | 版本 | 用途 | 配置文件位置 |
|---|---|---|---|---|
| kafka | bitnamilegacy/kafka:4.0 |
4.0 | Apache Kafka 消息队列 | docker-compose.kafka.yml |
说明:
- 使用 Bitnami 的 Kafka 镜像(legacy 版本)
- 使用 KRaft 模式,不需要 ZooKeeper
4.3 缓存镜像
| 服务名称 | 镜像名称 | 版本 | 用途 | 配置文件位置 |
|---|---|---|---|---|
| valkey | bitnamilegacy/valkey:8.0 |
8.0 | Valkey 单节点缓存 | docker-compose.valkey.yml |
| valkey-sentinel | bitnamilegacy/valkey-sentinel:8.0 |
8.0 | Valkey 哨兵模式缓存 | docker-compose.valkey-sentinel.yml |
| valkey-cluster | bitnamilegacy/valkey-cluster:8.0 |
8.0 | Valkey 集群模式缓存 | docker-compose.valkey-cluster.yml |
说明:
- Valkey 是 Redis 的分支项目
- 使用 Bitnami 的 Valkey 镜像
4.4 服务发现镜像
| 服务名称 | 镜像名称 | 版本 | 用途 | 配置文件位置 |
|---|---|---|---|---|
| zookeeper | zookeeper:3.8.1 |
3.8.1 | Apache ZooKeeper 服务发现 | docker-compose.yml |
说明:
- 虽然 Kafka 使用 KRaft 模式不需要 ZooKeeper,但 ThingsBoard 微服务架构仍需要 ZooKeeper 进行服务发现
4.5 监控镜像
| 服务名称 | 镜像名称 | 版本 | 用途 | 配置文件位置 |
|---|---|---|---|---|
| prometheus | prom/prometheus:v3.1.0 |
v3.1.0 | Prometheus 监控系统 | docker-compose.prometheus-grafana.yml |
| grafana | grafana/grafana |
latest | Grafana 可视化平台 | docker-compose.prometheus-grafana.yml |
说明:
- 监控服务是可选的,通过
MONITORING_ENABLED=true启用
5. 镜像分类统计
5.1 ThingsBoard 自身镜像统计
| 类别 | 数量 | 镜像列表 |
|---|---|---|
| 核心服务 | 1 | thingsboard/tb-node |
| 传输服务 | 5 | tb-mqtt-transport, tb-http-transport, tb-coap-transport, tb-lwm2m-transport, tb-snmp-transport |
| 前端服务 | 1 | thingsboard/tb-web-ui |
| 辅助服务 | 3 | tb-js-executor, tb-vc-executor, tb-edqs |
| 工具镜像 | 1 | thingsboard/haproxy-certbot |
| 总计 | 11 | - |
5.2 第三方镜像统计
| 类别 | 数量 | 镜像列表 |
|---|---|---|
| 数据库 | 2 | postgres, cassandra |
| 消息队列 | 1 | bitnamilegacy/kafka |
| 缓存 | 3 | bitnamilegacy/valkey, bitnamilegacy/valkey-sentinel, bitnamilegacy/valkey-cluster |
| 服务发现 | 1 | zookeeper |
| 监控 | 2 | prom/prometheus, grafana/grafana |
| 总计 | 9 | - |
6. 镜像构建位置
6.1 ThingsBoard 自身镜像的构建位置
| 镜像名称 | 源码位置 | Docker 构建位置 | 说明 |
|---|---|---|---|
thingsboard/tb-node |
application/ |
msa/tb-node/ |
核心服务和规则引擎 |
thingsboard/tb-mqtt-transport |
transport/mqtt/ |
msa/transport/mqtt/ |
MQTT 传输服务 |
thingsboard/tb-http-transport |
transport/http/ |
msa/transport/http/ |
HTTP 传输服务 |
thingsboard/tb-coap-transport |
transport/coap/ |
msa/transport/coap/ |
CoAP 传输服务 |
thingsboard/tb-lwm2m-transport |
transport/lwm2m/ |
msa/transport/lwm2m/ |
LWM2M 传输服务 |
thingsboard/tb-snmp-transport |
transport/snmp/ |
msa/transport/snmp/ |
SNMP 传输服务 |
thingsboard/tb-web-ui |
ui-ngx/ |
msa/web-ui/ |
Web UI 前端 |
thingsboard/tb-js-executor |
msa/js-executor/src/ |
msa/js-executor/ |
JavaScript 执行器 |
thingsboard/tb-vc-executor |
msa/vc-executor/ |
msa/vc-executor/ |
版本控制执行器 |
thingsboard/tb-edqs |
edqs/ |
msa/edqs/ |
事件驱动查询服务 |
6.2 构建方式
所有 ThingsBoard 镜像都通过 Maven 构建:
# 构建所有镜像
mvn clean install -DskipTests -Ddockerfile.skip=false
# 构建特定镜像
mvn clean install -DskipTests -Ddockerfile.skip=false --projects msa/tb-node
7. 镜像使用模式
7.1 镜像命名规律
ThingsBoard 自身镜像遵循以下命名规律:
thingsboard/{service-name}:{version}
例如:
thingsboard/tb-node:4.2.1thingsboard/tb-mqtt-transport:4.2.1thingsboard/tb-web-ui:4.2.1
7.2 环境变量映射
在 .env 文件中(需要用户创建),可以设置:
DOCKER_REPO=thingsboard
TB_VERSION=4.2.1
TB_NODE_DOCKER_NAME=tb-node
JS_EXECUTOR_DOCKER_NAME=tb-js-executor
MQTT_TRANSPORT_DOCKER_NAME=tb-mqtt-transport
HTTP_TRANSPORT_DOCKER_NAME=tb-http-transport
COAP_TRANSPORT_DOCKER_NAME=tb-coap-transport
LWM2M_TRANSPORT_DOCKER_NAME=tb-lwm2m-transport
SNMP_TRANSPORT_DOCKER_NAME=tb-snmp-transport
WEB_UI_DOCKER_NAME=tb-web-ui
TB_VC_EXECUTOR_DOCKER_NAME=tb-vc-executor
EDQS_DOCKER_NAME=tb-edqs
8. 镜像来源
8.1 ThingsBoard 官方镜像
所有 ThingsBoard 自身镜像都发布在 Docker Hub:
- 组织: https://hub.docker.com/u/thingsboard
- 镜像列表:
- https://hub.docker.com/r/thingsboard/tb-node
- https://hub.docker.com/r/thingsboard/tb-mqtt-transport
- https://hub.docker.com/r/thingsboard/tb-http-transport
- https://hub.docker.com/r/thingsboard/tb-coap-transport
- https://hub.docker.com/r/thingsboard/tb-lwm2m-transport
- https://hub.docker.com/r/thingsboard/tb-snmp-transport
- https://hub.docker.com/r/thingsboard/tb-web-ui
- https://hub.docker.com/r/thingsboard/tb-js-executor
- https://hub.docker.com/r/thingsboard/tb-vc-executor
- https://hub.docker.com/r/thingsboard/tb-edqs
8.2 第三方镜像来源
| 镜像 | 来源 | 说明 |
|---|---|---|
postgres:16 |
Docker Hub Official | PostgreSQL 官方镜像 |
cassandra:5.0 |
Docker Hub Official | Apache Cassandra 官方镜像 |
zookeeper:3.8.1 |
Docker Hub Official | Apache ZooKeeper 官方镜像 |
bitnamilegacy/kafka:4.0 |
Bitnami | Bitnami 维护的 Kafka 镜像 |
bitnamilegacy/valkey:8.0 |
Bitnami | Bitnami 维护的 Valkey 镜像 |
prom/prometheus:v3.1.0 |
Prometheus | Prometheus 官方镜像 |
grafana/grafana |
Grafana | Grafana 官方镜像 |
9. 镜像版本管理
9.1 ThingsBoard 镜像版本
- 版本标签: 使用
TB_VERSION环境变量(如4.2.1) - 最新标签: 构建时会同时创建
latest标签 - 版本同步: 所有 ThingsBoard 镜像使用相同的版本号
9.2 第三方镜像版本
第三方镜像版本固定,不随 ThingsBoard 版本变化:
- PostgreSQL:
16 - Cassandra:
5.0 - ZooKeeper:
3.8.1 - Kafka:
4.0 - Valkey:
8.0 - Prometheus:
v3.1.0 - Grafana:
latest
10. 总结
10.1 ThingsBoard 自身镜像(11个)
- 核心服务:
thingsboard/tb-node(用于 core 和 rule-engine) - 传输服务: 5个(MQTT、HTTP、CoAP、LWM2M、SNMP)
- 前端服务:
thingsboard/tb-web-ui - 辅助服务: 3个(JS Executor、VC Executor、EDQS)
- 工具镜像:
thingsboard/haproxy-certbot
10.2 第三方镜像(9个)
- 数据库: PostgreSQL、Cassandra
- 消息队列: Kafka
- 缓存: Valkey(3种模式)
- 服务发现: ZooKeeper
- 监控: Prometheus、Grafana
10.3 关键发现
- 镜像复用:
tb-core和tb-rule-engine使用同一个镜像tb-node,通过环境变量区分 - 版本统一: 所有 ThingsBoard 镜像使用相同的版本号
- 构建位置: 所有 ThingsBoard 镜像的构建配置都在
msa/目录下 - 第三方依赖: 使用成熟的第三方镜像,减少维护成本
10.4 镜像使用建议
- 生产环境: 使用固定版本标签,不要使用
latest - 开发环境: 可以从 Docker Hub 拉取官方镜像,也可以从源码构建
- 自定义: 如果需要修改 ThingsBoard 代码,需要从源码构建镜像
- 镜像源: 可以配置私有镜像仓库来加速拉取或提供定制镜像
通过这个分析,可以清楚地了解 ThingsBoard Docker 部署中哪些是自身构建的镜像,哪些是依赖的第三方镜像。