# ThingsBoard Docker 镜像分类分析 ## 1. 概述 本文档分析 `docker/` 目录下所有 Docker Compose 配置文件中使用的镜像,区分哪些是 ThingsBoard 自身构建的镜像,哪些是第三方镜像。 ## 2. 镜像识别方法 ### 2.1 ThingsBoard 自身镜像的特征 ThingsBoard 自身构建的镜像都使用**环境变量**的形式定义: ```yaml 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:16` - `zookeeper:3.8.1` - `cassandra: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 构建: ```bash # 构建所有镜像 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.1` - `thingsboard/tb-mqtt-transport:4.2.1` - `thingsboard/tb-web-ui:4.2.1` ### 7.2 环境变量映射 在 `.env` 文件中(需要用户创建),可以设置: ```bash 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个) 1. **核心服务**: `thingsboard/tb-node`(用于 core 和 rule-engine) 2. **传输服务**: 5个(MQTT、HTTP、CoAP、LWM2M、SNMP) 3. **前端服务**: `thingsboard/tb-web-ui` 4. **辅助服务**: 3个(JS Executor、VC Executor、EDQS) 5. **工具镜像**: `thingsboard/haproxy-certbot` ### 10.2 第三方镜像(9个) 1. **数据库**: PostgreSQL、Cassandra 2. **消息队列**: Kafka 3. **缓存**: Valkey(3种模式) 4. **服务发现**: ZooKeeper 5. **监控**: Prometheus、Grafana ### 10.3 关键发现 1. **镜像复用**: `tb-core` 和 `tb-rule-engine` 使用同一个镜像 `tb-node`,通过环境变量区分 2. **版本统一**: 所有 ThingsBoard 镜像使用相同的版本号 3. **构建位置**: 所有 ThingsBoard 镜像的构建配置都在 `msa/` 目录下 4. **第三方依赖**: 使用成熟的第三方镜像,减少维护成本 ### 10.4 镜像使用建议 1. **生产环境**: 使用固定版本标签,不要使用 `latest` 2. **开发环境**: 可以从 Docker Hub 拉取官方镜像,也可以从源码构建 3. **自定义**: 如果需要修改 ThingsBoard 代码,需要从源码构建镜像 4. **镜像源**: 可以配置私有镜像仓库来加速拉取或提供定制镜像 通过这个分析,可以清楚地了解 ThingsBoard Docker 部署中哪些是自身构建的镜像,哪些是依赖的第三方镜像。