299 lines
12 KiB
Markdown
299 lines
12 KiB
Markdown
# 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 部署中哪些是自身构建的镜像,哪些是依赖的第三方镜像。
|
||
|