我已经为 CLI 实用程序创建了一个 Dockerfile,它在我的 Linux 笔记本电脑上运行得很好。我尝试在安装了 Docker 的 Raspberry Pi 上运行容器,但它不起作用。
我知道无数公司创建镜像来支持多种架构,他们是如何做到这一点的?
我想知道,因为我希望 CLI 的容器能够部署到 Raspberry Pi 以及我的 Linux 笔记本电脑上。
最佳答案
I know other companies create images to support multiple architectures, how are they doing this?
简单的回答是,不可能创建支持多种架构的单个镜像。然而,看起来好像一张图像可以满足多种架构,因为您实际上正在与 a manifest file 交互。 。 list 文件充当基于请求图像的 Docker 客户端的正确图像的指针。
例如,您可以在 x86_64
平台(例如 Linux 笔记本电脑) 上运行 docker build
,然后在 armv7l
平台(例如 Raspberry Pi) 上运行 docker build
,将会创建两个完全不同的镜像。生成的镜像应指定平台特定名称,并推送到您的 Docker 镜像存储库(例如 hub.docker.com
)。
完成后,您将需要enable experimental mode在 Docker CLI 中,以及 create and upload a manifest file具有指向相应平台特定图像的平台中性名称。
TL;DR 这三个命令就可以解决问题(假设您在 x86_64
机器上工作)
docker manifest create <new-list-ref-name> <image-ref> [<image-ref>...]
docker manifest annotate <new-list-ref-name> <image-ref> --os linux --arch arm
docker manifest push <new-list-ref-name> [--purge]
注意:根据您是否使用多架构基础镜像,您可能不需要 docker list 注释
步骤。
注意:推送 list 文件时(即docker Manifest Push ...
),请务必使用--purge
选项;链接的文章中没有讨论它。如果您打算使用稍后重用的标签(例如 latest
),不使用 --purge
会导致您心痛。
关于linux - 如何制作多架构 Docker 镜像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59613303/