跳转到内容

Docker 基础概念

Docker 基础概念

本节介绍 Docker 容器化的核心概念和在 IoT 解决方案中的价值。学习完成后,您将能够:

  • 理解容器化相比传统部署的优势
  • 说明 Docker 在 IoT 架构中的作用
  • 向客户解释容器化的业务价值
  • 快速搭建演示环境

Docker 是一个容器化平台,将应用及其所有依赖项打包到独立的、可移植的容器中。

核心特点

  • 隔离性: 每个容器在独立环境中运行
  • 可移植性: 一次构建, anywhere 运行
  • 轻量级: 直接访问主机内核,资源占用少
  • 一致性: 开发、测试、生产环境完全一致
特性传统安装Docker 容器
依赖管理手动安装配置自动包含在镜像中
环境一致性难以保证完全一致
部署速度慢(小时级)快(秒级)
资源占用较高低(共享内核)
隔离性
回滚能力困难简单
┌─────────────────────────────────────────┐
│ IoT Application Stack │
├─────────────────────────────────────────┤
│ Node-RED │ Mosquitto │ InfluxDB │ ... │ ← 容器层
├─────────────────────────────────────────┤
│ Docker Engine (Container Runtime)│
├─────────────────────────────────────────┤
│ Host OS (Linux) │
├─────────────────────────────────────────┤
│ Hardware (Server/VM) │
└─────────────────────────────────────────┘

场景: 向客户展示 IoT 平台能力

Terminal window
# 一行命令启动完整 IoT 栈
docker-compose up -d
# 包含:
# - Node-RED (自动化引擎)
# - Mosquitto (MQTT 消息代理)
# - InfluxDB (时序数据库)
# - Grafana (数据可视化)

优势:

  • ⏱️ 5 分钟内完成部署
  • 🔧 零配置依赖
  • 📦 可重复使用
  • 💾 易于备份和迁移

问题: 传统安装会污染主机系统

Docker 方案:

  • 每个服务独立容器
  • 停止容器即完全清理
  • 不影响主机系统
  • 可以同时运行多套环境

客户场景:

开发环境 (笔记本) → 测试环境 (服务器) → 生产环境 (云端)

Docker 保证:

  • ✅ 完全相同的镜像
  • ✅ 完全相同的配置
  • ✅ 完全相同的行为
  • ✅ 无环境差异问题

对比虚拟机:

指标虚拟机Docker 容器
启动时间分钟级秒级
磁盘占用GB 级MB 级
内存开销高 (完整 OS)低 (共享内核)
性能损耗5-15%<2%

实际意义:

  • 一台服务器可运行更多服务
  • 降低硬件成本
  • 提高资源利用率
┌──────────────────────────────────────────────────────┐
│ IoT Platform Stack │
├──────────────────────────────────────────────────────┤
│ Grafana │ 数据可视化、监控仪表板 │
├──────────────────────────────────────────────────────┤
│ InfluxDB │ 时序数据存储、分析 │
├──────────────────────────────────────────────────────┤
│ Node-RED │ 业务逻辑、自动化、集成 │
├──────────────────────────────────────────────────────┤
│ Mosquitto │ MQTT 消息代理、设备通信 │
├──────────────────────────────────────────────────────┤
│ Docker Compose (编排管理) │
└──────────────────────────────────────────────────────┘
│ MQTT/HTTP
┌───────────────────────┐
│ ESP32/ESP8266 设备 │
└───────────────────────┘
  1. 设备层: ESP32 传感器采集数据
  2. 通信层: 通过 MQTT 发布到 Mosquitto
  3. 处理层: Node-RED 订阅并处理数据
  4. 存储层: 写入 InfluxDB 时序数据库
  5. 展示层: Grafana 实时可视化
价值点说明量化指标
快速上线减少部署时间从数天 → 数分钟
降低风险环境一致性部署失败率 ↓ 90%
节约成本提高资源利用率服务器成本 ↓ 40%
易于维护一键更新回滚维护时间 ↓ 70%
可扩展性水平扩展简单扩容时间 ↓ 80%

推荐场景:

  • PoC 概念验证
  • 演示环境搭建
  • 开发测试环境
  • 中小型部署
  • 边缘计算节点

⚠️ 需要评估:

  • 超大规模部署(需 Kubernetes)
  • 严格实时性要求
  • 特殊硬件需求
Terminal window
# 1. 安装 Docker (Ubuntu)
curl -fsSL https://get.docker.com | sh
# 2. 创建 docker-compose.yml
cat > docker-compose.yml << EOF
version: '3.8'
services:
mosquitto:
image: eclipse-mosquitto:2
ports:
- "1883:1883"
volumes:
- ./mosquitto/config:/mosquitto/config
nodered:
image: nodered/node-red:latest
ports:
- "1880:1880"
volumes:
- ./nodered/data:/data
influxdb:
image: influxdb:2
ports:
- "8086:8086"
volumes:
- ./influxdb/data:/var/lib/influxdb2
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
volumes:
- ./grafana/data:/var/lib/grafana
EOF
# 3. 启动
docker-compose up -d
# 4. 访问
echo "Node-RED: http://localhost:1880"
echo "Grafana: http://localhost:3000"
echo "InfluxDB: http://localhost:8086"
Terminal window
# 检查容器状态
docker-compose ps
# 预期输出:
# NAME STATUS PORTS
# mosquitto Up 2 minutes 0.0.0.0:1883->1883/tcp
# nodered Up 2 minutes 0.0.0.0:1880->1880/tcp
# influxdb Up 2 minutes 0.0.0.0:8086->8086/tcp
# grafana Up 2 minutes 0.0.0.0:3000->3000/tcp

A:

  • Docker 共享主机内核,更轻量
  • 启动速度:秒级 vs 分钟级
  • 资源占用:MB 级 vs GB 级
  • 适用场景:微服务 vs 完整系统隔离

A:

  • 使用 Volume 持久化数据
  • 容器删除不影响数据
  • 支持自动备份策略
  • 可以迁移到其他主机

A:

  • 性能损耗 < 2%
  • 直接访问主机内核
  • 接近原生性能
  • 大多数场景无感知

A:

  • 容器隔离
  • 可配置资源限制
  • 支持网络安全策略
  • 定期更新镜像

推荐做法:

  • 使用 Docker Compose 管理多容器
  • 配置数据持久化(Volume)
  • 提供一键部署脚本
  • 准备演示用例和 Flow

避免做法:

  • 不要在客户环境手动配置
  • 不要忽略数据持久化
  • 不要使用 latest 标签(生产环境)
  • 不要暴露不必要的端口
  • Docker 和 Docker Compose 已安装
  • docker-compose.yml 配置文件就绪
  • 预设 Node-RED Flows
  • Grafana Dashboard 模板
  • 测试数据或模拟器
  • 演示脚本和话术

核心要点:

  1. Docker 是 IoT 解决方案的理想选择

    • 快速部署、环境一致、资源高效
    • 适合 PoC、演示、中小规模部署
  2. 完整的 IoT 栈可以一键启动

    • Mosquitto + Node-RED + InfluxDB + Grafana
    • 5 分钟内完成部署
  3. 显著的业务价值

    • 减少部署时间 90%
    • 降低服务器成本 40%
    • 提高维护效率 70%
  4. 售前演示利器

    • 快速搭建演示环境
    • 展示完整技术栈
    • 提升客户信心