15

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

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

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

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

4

4 回答 4

11

我考虑过在嵌入式设备(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 运行图像。所以决定是成本和功能之间的平衡。

于 2016-04-07T08:00:54.570 回答
6

以下是 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

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

于 2018-09-04T04:09:26.433 回答
1

LinkedIn 上有一篇很棒的文章描述了他对 https://www.linkedin.com/pulse/whale-jar-when-running-docker-embedded-linux-good-thing-fletcher#pulse-comments-urn 的体验:李:文章:7736487387895237975

于 2017-10-24T14:45:25.400 回答
0

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

于 2015-12-01T01:04:05.313 回答