嵌入式系统上的Docker,为什么不呢?

嵌入式系统上的Docker,为什么不呢?,docker,containers,embedded-linux,intel-edison,Docker,Containers,Embedded Linux,Intel Edison,最近我遇到了一个项目,它涉及到几个(支持Linux的)嵌入式设备的编排,向它们部署软件,并允许在git repo中的代码库更新时更新应用程序 最初的想法是为每台设备制作一个标准映像,我开始尝试在UDOO Quad和Intel Edison上安装docker,但到目前为止没有任何成功 我的想法是,在嵌入式设备上安装Docker似乎是个好主意——但如果是这样的话,它肯定已经被移植了。唯一一个做出这些努力的团队是Resin.io 是我遗漏了什么,还是Docker在嵌入式设备上没有意义有一个明确的原因?

最近我遇到了一个项目,它涉及到几个(支持Linux的)嵌入式设备的编排,向它们部署软件,并允许在git repo中的代码库更新时更新应用程序

最初的想法是为每台设备制作一个标准映像,我开始尝试在UDOO Quad和Intel Edison上安装docker,但到目前为止没有任何成功

我的想法是,在嵌入式设备上安装Docker似乎是个好主意——但如果是这样的话,它肯定已经被移植了。唯一一个做出这些努力的团队是Resin.io


是我遗漏了什么,还是Docker在嵌入式设备上没有意义有一个明确的原因?如果没有原因,而且在嵌入式系统上运行Docker是有意义的,那么有没有什么我忽略了的地方:是否有关于移植的讨论来源,或者如何实现的内容涵盖了这一点?

通常嵌入式系统的更改速度非常慢。Docker在最小构建上工作良好,然后在顶部分层。如果你想牺牲在最小的嵌入式系统上运行docker的开销来换取docker拥有构建系统和稳定的变化率的能力,那么你可以对其进行探索。

我考虑过在嵌入式设备(mips系统)上运行docker,但没有这样做。在我看来,它有一些问题:

  • Docker在Golang实现。目前没有可供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,您可以从docker hub获得容器管理、图像管理和许多准备运行的图像。因此,这个决定是成本和功能之间的平衡。

    LinkedIn上有一篇很好的文章描述了他在这方面的经历
    以下是2018年的更新:

    由于Raspbian和Armbian操作系统映像开发的进步,您现在可以很容易地在嵌入式设备(如Raspberry Pi和Orange Pi)上使用Docker。具体来说,这两种类型的设备及其各自的操作系统映像现在都支持内核,这些内核的版本足够高,可以毫无问题地安装Docker(至少是3.10版,不过现在都提供4.x+版本)

    通过使用嵌入式Docker,您对更快变化率的渴望肯定可以实现。根据经验,我可以说,我已经测试并定期运行了您描述的方法。基本上,您从基本操作系统映像(如Raspbian或Armbian)开始,对操作系统进行足够的调整,使其安全并安装了Docker,然后使用Docker处理开发迭代和应用程序更新

    另外,如果您对在嵌入式Linux设备上运行Docker感兴趣,那么我建议您查看一个免费的、开源的、MIT授权的命令行工具,我编写该工具是为了帮助开发人员同时在多个设备上使用嵌入式Docker:


    即使您对该工具本身不感兴趣,该工具的文档也描述了使用多种语言跨多个设备使用停靠应用程序的几种模式:。这些材料应该作为将应用程序移植到Docker,然后将其部署到嵌入式设备的起点。本文档还讨论了一些嵌入式设备的细微之处,如ARMv6和ARMv7之间的差异。希望这能帮助你开始

    缓慢的变化速度正是我们试图避免的,而在顶部构建Docker的最小构建正是我们想要实现的——在这个方向上似乎没有一条清晰的道路。在这种环境下,资源对我们来说是便宜的,特别是当任务足够简单,可以委托给一个简单的控制器时,因此开销甚至不是一个问题。你有没有找到合适的答案?我自己也很好奇。我没有找到docker为什么不支持嵌入式设备的答案,但我确实发现最新的香草内核对docker有更多的内置支持。由于在这方面正在努力,Arch Linux ARM发行版可能是安装Docker的最简单途径,因为Arch的目标是更具前沿性。然后,您只需要运行在ARM架构上的映像。尽管docker hub上只有x86的规则,你可以通过一些简单的搜索找到一些,比如“Ubuntu arm”。只有链接的答案并不好,因为链接可能会断开-你能添加一个摘要吗?