二、Docker入门基础之使用容器维护一致的 IoT开发环境
本文章共四部分:一、Docker入门基础之使用容器、镜像和注册表;二、Docker入门基础之使用容器维护一致的 IoT开发环境;三、Docker入门基础之将容器部署到 IoT 设备;四、Docker入门基础之集成 IoT 设备与云。
IoT 应用程序适用于各种各样的设备平台。在原型设计和早期开发阶段,IoT 项目常常使用基于通用微控制器的开发板或单板计算机 (SBC)(比如 Raspberry Pi)来开发。为这些设备开发的嵌入式应用程序可在以后升级来在自定义的原型开发板上运行,最终在生产设备上运行。您可评估许多潜在的微控制器和单芯片系统 (SoC) 设备,它们具有不同且有时不兼容的设备驱动程序需求。每个设备或设备修订版可能还需要开发工具包的不同版本和配置,用于闪存、监视设备和与其通信。
容器可用来捕获一个已知适用于每个设备修订版的开发环境,以及在一个开发团队中共享此环境。例如,如果您的团队使用多种类型的兼容 Arduino 的开发板,您可创建一个包含 Arduino 命令行工具包和用于串行通信的哑终端 (dumb-terminal) 模拟程序的镜像,用作您的基准开发镜像。然后可使用这个基础 Arduino 开发镜像来为每个需要特定的自定义驱动程序的开发板创建新的镜像变体。
Docker 的分层文件系统能在此情形下高效地使用空间,因为在创建新镜像时仅存储惟一的层。docker history 命令显示组成一个镜像的各种层的列表,包括创建每个层的指令和层大小,比如:
IMAGE CREATED CREATED BY SIZE 3ca43a9a4095 20 hours ago apt-get install -y git 37.64 MB
层会被缓存,所以您可快速地尝试镜像的新变体。例如,您可能希望向驱动程序或开发工具应用更新。层还使您能够轻松地回滚到镜像的早期版本,在某处出错时尝试一种不同的方法。
如果对开发环境的更改取得成功,可将新镜像推送到您的私有团队注册表,以快速将更改传播给团队的其余成员。每个团队成员拉入更新的镜像时,他们已缓存了大部分层,所以 Docker 通常只需几秒到几分钟时间运行创建新层的指令,即可让新镜像正常运行。与推送和拉入 VM 镜像快照或为每个变体从头构建完整镜像相比,层节省了存储空间,而且更重要的是节省了开发人员的时间。