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