Docker - 在 Mac 上构建 rpi 镜像

问题描述 投票:0回答:3

这可能更通用,可以使用机器架构 A 为架构 B 构建一个映像。我目前想创建一个具有大量 Python 依赖项的映像。在树莓派上需要一些时间,但在 Mac 上速度更快。当我最后遇到错误时,我们需要重建。有没有办法在 Mac 上构建此映像,然后将其拉到我的树莓派上?

architecture docker arm raspberry-pi
3个回答
10
投票

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

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

首先获取 VirtualBox获取 Vagrant 并安装。 (或者使用 Docker Toolbox

 中的 
docker-machine

设置您的虚拟机

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
docker import
移动图像。您还可以使用 集线器设置注册表 来使用
push
/
pull

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


0
投票
您可以分叉 RPI 的发行版构建器并根据您的需求进行定制:

https://github.com/RPi-Distro/pi-gen 它在 Docker 上使用 qemu-debootstrap,类似于 Matt 的答案。

如果您还计划为arm架构构建Docker镜像,qemu-debootstrap不会有帮助。在这种情况下,您可以直接在 ARM 服务器上运行 Docker 构建,例如 Scaleway 提供的服务器。

我的 CI 服务器运行上述的组合,以持续构建带有预加载的 armh docker 映像的操作系统映像。然后,

device-init负责将 docker 导出加载为 docker 镜像。 缺点是首次启动后,device-init 可能需要几个小时来预加载 docker 映像。


0
投票
使用 docker cli 的

buildx 插件,从具有不同架构的主机创建特定架构的映像(或多架构映像)要简单得多。例如,可以使用以下命令从 linux/arm64

笔记本电脑(Intel Mac、PC 等)构建 
linux/amd64
 映像(配备 Apple M 系列处理器、AWS graviton 实例等的 Mac 所需):

docker buildx create --name custombuilder \ --driver docker-container --use --bootstrap docker buildx build --platform linux/arm64 \ --push -t example:latest .
    
© www.soinside.com 2019 - 2024. All rights reserved.