thingsboard/summary/17-Docker镜像分类分析.md

12 KiB
Raw Permalink Blame History

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: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-coretb-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.1
  • thingsboard/tb-mqtt-transport:4.2.1
  • thingsboard/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

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. 缓存: Valkey3种模式
  4. 服务发现: ZooKeeper
  5. 监控: Prometheus、Grafana

10.3 关键发现

  1. 镜像复用: tb-coretb-rule-engine 使用同一个镜像 tb-node,通过环境变量区分
  2. 版本统一: 所有 ThingsBoard 镜像使用相同的版本号
  3. 构建位置: 所有 ThingsBoard 镜像的构建配置都在 msa/ 目录下
  4. 第三方依赖: 使用成熟的第三方镜像,减少维护成本

10.4 镜像使用建议

  1. 生产环境: 使用固定版本标签,不要使用 latest
  2. 开发环境: 可以从 Docker Hub 拉取官方镜像,也可以从源码构建
  3. 自定义: 如果需要修改 ThingsBoard 代码,需要从源码构建镜像
  4. 镜像源: 可以配置私有镜像仓库来加速拉取或提供定制镜像

通过这个分析,可以清楚地了解 ThingsBoard Docker 部署中哪些是自身构建的镜像,哪些是依赖的第三方镜像。