三、将容器部署到 IoT 设备
本文章共四部分:一、Docker入门基础之使用容器、镜像和注册表;二、Docker入门基础之使用容器维护一致的 IoT开发环境;三、Docker入门基础之将容器部署到 IoT 设备;四、Docker入门基础之集成 IoT 设备与云。
Docker 化的应用程序的吸引力在于,您构建镜像后,可将它们传送到几乎任何地方来运行。如果您的 IoT 设备运行 Linux,您可能能够将容器直接部署在您的设备上。尽管这些 IoT 设备上通常仅有有限的系统资源,但部署 Docker 容器是可行的,因为它们的运行时开销几乎为 0。甚至可在设备上运行多个容器,例如,如果您想要并排运行应用程序的不同版本来进行比较。
Docker 需要一种支持内核命名空间和控制组的现代 Linux 内核,所以可能还没有适合您最喜欢的 IoT 设备的基础镜像。随着合适的 SoS 的价格不断降低(例如 9 美元的 C.H.I.P. 开发板),我们有望看到更多支持 Linux 的 IoT 设备被开发出来;然后将出现更多针对这些平台的 Linux 发行版。
Docker Hub 包含许多基于 ARM 的镜像供流行的 SBC 的爱好者们使用,比如 Raspberry Pi 和 BeagleBone Black。如果直接在您的设备上运行容器,您可避免不断闪存设备或覆盖整个固件。您可构建新镜像,拉入它们来在设备上的主机 OS 中运行,快速设计原型和试验先进的库和固件来充分利用 IoT 设备。
IoT 开发人员面临的难题是,不断更新互联设备的网络并在可能不可靠且低带宽的无线连接上运行它们。另外,他们还必须考虑如何维护许多这样的设备收集的敏感个人数据的安全。IoT 设备可能仅偶尔连网,一些设备设置为按不同的时间表睡眠来节省电量。其他 IoT 设备可能使用一种网状网络拓扑结构来连接,在任何给定时刻仅能访问网络的一部分。在网络连接断开时,基于推送的更新可能失败,而且应用不完整或可能损坏的更新的危险在于,设备可能进入一种不一致的状态或变得无法操作。
Docker 为这种更新问题提供了一个可行的解决方案。发出对其最新应用程序镜像版本的拉入请求的设备,将通过无线连接获取镜像差异,而不是整个镜像。基于差异的更新的完成速度快得多,这会减少连接设备所需的时间量和降低故障概率,进而减轻低带宽网络上的压力。这使更频繁地应用更新成为可能。
一些 IoT 设备允许通过物理按钮或小型触摸屏来进行有限的用户交互,但是对于许多新一代的 IoT 设备,主要的用户交互方式是使用移动应用程序。Docker 容器被越来越多地采用来加速自动化测试、持续集成和移动应用程序的交付,这一点也不足为奇。