Docker - 在 Mac 上构建 rpi 映像

Docker - Build rpi image on Mac

这可能更通用,并且正在为具有机器架构 A 的架构 B 构建映像。我目前想要创建一个具有很多 Python 依赖项的映像。这在 raspberry-pi 上需要时间,但在 Mac 上更快。当我最后遇到错误时,我们需要重建。有没有办法在 Mac 上构建此图像,然后将其拉到我的 raspberry pi 上?

模拟一个完整的替代架构通常很慢。 QEMU 允许您在 Linux 上执行此操作,并且可以集成到 Docker 容器中。

对于构建,您可以使用 QEMU User Emulation,这比完全仿真要快得多。这允许您的硬件直接执行 ARM 二进制文件,并用于简化交叉编译和交叉调试。

第一个get VirtualBox and get Vagrant and install. (Or use docker-machine from the Docker Toolbox)

设置您的虚拟机

mkdir raspbian-docker
cd raspbian-docker
vagrant init debian/jessie64
vagrant up
vagrant ssh

现在你在 Debian Linux VM 上,设置 Docker 主机

sudo su -
apt-get install qemu-user-static
curl https://get.docker.com/ | sh

运行一个raspbian环境

docker run -ti \
  --volume /usr/bin/qemu-arm-static:/usr/bin/qemu-arm-static \
  philipz/rpi-raspbian \
  bash

并做你需要做的。

然后你可以docker export and docker import to move images around. You can also use the hub or setup a registry使用push/pull

Docker Toolbox 还可以让您通过 mac 上的 VirtualBox VM 轻松 运行 Docker,但我 运行 遇到的麻烦比这是值得的(当你有 vagrant 设置时)。

您可以派生 RPI 的发行版构建器并根据您的需要进行自定义:https://github.com/RPi-Distro/pi-gen 它在 Docker 上使用 qemu-debootstrap,类似于 Matt 的回答。

如果您还计划为 arm 架构构建 Docker 图像,qemu-debootstrap 将无济于事。在这种情况下,您可以 运行 Docker 直接在 ARM 服务器上构建,例如 Scaleway 提供的服务器。

我的 CI 服务器 运行 是上述的组合,使用预加载的 armh docker 图像不断构建 OS 图像。然后,device-init 负责加载 docker 导出为 docker 图像。 缺点是 device-init 可能需要数小时才能在首次启动后预加载 docker 图像。