最近我遇到了一个项目,该项目涉及几个(支持Linux的)嵌入式设备的协调,向它们部署软件,并允许在git repo中更新代码库时更新应用程序。
最初的想法是为每个设备制作一个标准映像,我开始尝试在UDOO Quad和Intel Edison上安装docker以启动,但到目前为止没有任何成功。
我的想法是,在嵌入式设备上安装Docker似乎是个好主意——但如果是这样的话,现在肯定已经移植了。唯一一个似乎正在做出这些努力的团体是Resin.io.
是我遗漏了什么,还是Docker在嵌入式设备上没有意义有明确的原因?如果没有原因,并且在嵌入式系统上运行Docker是有意义的,那么我是否忽略了一些东西:有关于移植的讨论来源吗,或者如何涵盖这一点?
我曾考虑在嵌入式设备(mips系统)上运行docker,但没有这样做。在我看来,它有一些问题:
-
Docker在果朗实现。目前没有可供mips编译go的工具链。您需要使用gcc-go自己创建工具链。
-
docker的大小大于lxc。在台式电脑中,这不是问题,但嵌入式设备的闪存容量有限。
-
Docker使用了一些linux内核的最新功能。有时嵌入式设备上的内核版本并不是很新,需要反向端口才能使其工作。
-
docker映像必须建立在与运行时环境相同的体系结构上。这意味着,如果你想在Raspberry Pi上运行docker容器,docker镜像必须建立在ARM架构系统上。QEMU可以用于在云中构建docker映像,但它并不支持嵌入式系统中使用的所有CPU架构。(例如,它目前不支持MIPS)
最后,lxc被选择用于在嵌入式设备上运行容器的特定任务。与docker相比,它的功能有限,但目前它符合项目的要求。
截至2019年,我想更新这个答案,因为我用ARM cpu将docker移植到嵌入式系统。考虑到闪存使用和内存使用的价格,通过使用docker,您将拥有容器管理、映像管理,以及许多现成的从Dockerhub运行的映像。因此,这个决定是成本和功能之间的平衡。
以下是2018年的更新:
由于Raspbian和Armbian操作系统映像的开发进步,您现在可以很容易地在Raspberry Pi和Orange Pi等嵌入式设备上使用Docker。具体来说,这两种类型的设备及其各自的操作系统映像现在都支持足够高的内核版本,可以毫无问题地安装Docker(至少是3.10版本,尽管现在两者都提供4.x+版本)。
使用嵌入式Docker肯定可以实现您对更快变化率的渴望。根据经验,我可以说,我已经测试并定期运行您描述的方法。基本上,您从Raspbian或Armbian等基本操作系统映像开始,对该操作系统进行足够的调整,使其安全并安装了Docker,然后使用Docker处理开发迭代和应用程序更新。
顺便说一句,如果你有兴趣在嵌入式Linux设备上运行Docker,那么我建议你看看我写的一个免费的、开源的、麻省理工学院许可的命令行工具,它可以帮助开发人员同时在多个设备上使用嵌入式Docker:https://github.com/ForwardLoopLLC/floopcli。
即使您对该工具本身不感兴趣,该工具的文档也描述了在多种语言的多个设备上使用Dockerized应用程序的几种模式:https://docs.forward-loop.com/floopcli/master/index.html。那里的材料应该作为将应用程序移植到Docker,然后在嵌入式设备上部署的起点。该文档还解决了一些嵌入式设备的细微之处,例如ARMv6和ARMv7之间的差异。希望这能帮助你开始!
LinkedIn上有一篇很棒的文章描述了他使用的经历https://www.linkedin.com/pulse/whale-jar-when-running-docker-embedded-linux-good-thing-fletcher#pulse-评论urn:li:文章:77336487387895237975
通常嵌入式系统的更改速度非常慢。Docker在最小构建时效果良好,然后在顶部分层。如果你想牺牲在最小嵌入式系统上运行docker的开销,以换取docker拥有构建系统和稳定变化率的能力,那么你可以对其进行探索