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

299 lines
12 KiB
Markdown
Raw Permalink Normal View History

2026-01-19 11:50:37 +08:00
# 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. **缓存**: Valkey3种模式
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 部署中哪些是自身构建的镜像,哪些是依赖的第三方镜像。