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

标签 docker containers embedded-linux intel-edison

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

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

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

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

最佳答案

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

关于嵌入式系统上的 Docker,为什么不呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34010832/

相关文章:

java - 如何使用 Dockerfile 安装特定版本的 Java 8

docker - 如何在 hyperledger fabric 中使用 openldap 和 fabric-ca?

linux - Bash 脚本命令等待 docker-compose 进程完成后再继续

node.js - docker提升用户权限

docker - 无法使用 docker-compose 在 Docker 容器中运行 Traefik

c++ - 传递迭代器而不是容器

Docker:如何获取现有容器的完整容器 ID?

linux-kernel - 具有平台驱动程序和字符设备接口(interface)的设备特定数据结构

linux - I2C 设备驱动程序错误 [TCA6408 I/O 扩展器]

c++ - 在嵌入式 Linux/ARM 上的不同应用程序/进程之间共享 EGLImage