【问题标题】:Docker on embedded systems, why not?嵌入式系统上的 Docker,为什么不呢?
【发布时间】:2015-12-01 00:58:35
【问题描述】:

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

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

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

我是否遗漏了什么,或者是否有明确的原因说明 Docker 在嵌入式设备上没有意义?如果没有理由,并且 确实 在嵌入式系统上运行 Docker 是有意义的,那么我是否忽略了一些事情:是否有任何关于移植或操作方法的讨论来源覆盖这个?

【问题讨论】:

  • 你有没有找到合适的答案?我自己也很好奇。
  • 我没有找到关于为什么 docker 不支持嵌入式设备的答案,但我确实发现最新的 vanilla 内核对 docker 有更多的内置支持。由于正在这方面做出努力,Arch Linux ARM 发行版可能是安装 Docker 的最简单途径,因为 Arch 的目标是更前沿。那么您所需要的只是在 ARM 架构上运行的映像。尽管 docker hub 上只有 x86 规则,但您可以通过一些简单的搜索来找到一些规则,例如“Ubuntu arm”。

标签: docker containers embedded-linux intel-edison


【解决方案1】:

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

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

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

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

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

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

截至 2019 年,我想更新这个答案,因为我使用 ARM cpu 将 docker 移植到嵌入式系统。随着闪存使用量和内存使用量的增加,通过使用 docker,您将拥有容器管理、图像管理以及许多准备好从 docker hub 运行图像。所以决定是成本和功能之间的平衡。

【讨论】:

    【解决方案2】:

    这是 2018 年的更新:

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

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

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

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

    【讨论】:

      【解决方案3】:

      【讨论】:

      • 仅链接的答案不是很好,因为链接可能会中断 - 你能添加一个概要吗?
      【解决方案4】:

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

      【讨论】:

      • 缓慢的变化速度正是我们想要避免的,而在上面构建 Docker 的最小构建正是我们想要实现的——只是似乎没有在那个方向上是一条清晰的道路。在这种环境下,资源对我们来说很便宜,尤其是当任务足够简单以至于可以委托给简单的控制器时,因此开销甚至都不是问题。
      猜你喜欢
      • 2014-04-20
      • 1970-01-01
      • 2011-02-02
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 2012-07-10
      • 2021-01-13
      • 1970-01-01
      相关资源
      最近更新 更多