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

时间:2015-12-01 00:58:35

标签: docker containers embedded-linux intel-edison

最近有一个项目引发了我的方式,涉及几个(支持Linux的)嵌入式设备的编排,部署软件,以及允许在git repo中更新代码库时更新应用程序。

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

我的想法是,在嵌入式设备上安装Docker似乎是一个好主意 - 但如果是这样的话,那么它肯定会被移植到现在。 Resin.io是唯一一个似乎在做这些努力的团体。

我是否遗漏了某些东西,或者说Docker对嵌入式设备没有意义的明确原因是什么?如果没有理由,并且确实在嵌入式系统上运行Docker是有意义的,那么我有什么东西可以忽略:有没有关于移植的讨论来源,或者如何解决这个问题?

4 个答案:

答案 0 :(得分:8)

我曾考虑在嵌入式设备(mips系统)上运行docker,但没有采用这种方式。在我的拙见中,它存在一些问题:

  1. Docker在Golang中实现。目前还没有可供mips编译的工具链。您需要使用gcc-go自己创建工具链。

  2. docker的大小大于lxc。在台式计算机中,这不是问题,但嵌入式设备的闪存存储有限。

  3. Docker使用了一些最新的linux内核功能。有时嵌入式设备上的内核版本不是那么新,需要后端才能使其工作。

  4. docker镜像必须构建在与运行时环境相同的架构上。这意味着如果要在Raspberry Pi上运行docker容器,则必须在ARM体系结构系统上构建docker镜像。 QEMU可用于在云中构建docker镜像,但它不支持嵌入式系统中使用的所有CPU架构。 (例如,它目前不支持MIPS)

  5. 最后,选择lxc用于在嵌入式设备上运行容器的特定任务。与docker相比,它的功能有限,但目前它符合项目的要求。

    截至2019年,我想更新这个答案,因为我使用ARM cpu将端口码头移植到嵌入式系统。通过闪存使用,内存使用的价格,通过使用docker,您将拥有容器管理,映像管理以及许多可以从docker hub运行的映像。所以决定是成本和功能之间的平衡。

答案 1 :(得分:3)

这是2018年的更新:

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

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

顺便说一句,如果您有兴趣在嵌入式Linux设备上运行Docker,那么建议您查看我编写的免费,开放源代码,MIT许可的命令行工具,该工具旨在帮助开发人员在多个设备上使用嵌入式Docker。一次:https://github.com/ForwardLoopLLC/floopcli

即使您对该工具本身不感兴趣,该工具的文档也描述了几种在多种设备上以多种语言使用Dockerized应用程序的模式:https://docs.forward-loop.com/floopcli/master/index.html。那里的材料应该作为将应用程序移植到Docker并将其部署到嵌入式设备上的起点。该文档还解决了嵌入式设备的一些细微问题,例如ARMv6和ARMv7之间的差异。希望这可以帮助您入门!

答案 2 :(得分:0)

嵌入式系统通常具有非常缓慢的变化率。 Docker在最小构建上运行良好,然后在顶层进行分层。如果你想牺牲在最小的嵌入式系统上运行docker的开销,以便docker能够拥有一个构建系统和稳定的变化率,那么你可以探索它。

答案 3 :(得分:0)