ten*_*ive 5
你是对的。在没有 Docker Buildx 的情况下,您的 arm64 构建环境中的 Docker 无法构建 arm32v7 映像。你可以通过使用buildx Github Action和qemu action来解决这个问题,它们可以让你的环境准备好构建多架构镜像。
Buildx 是 Docker 为与主机不匹配的目标架构构建镜像的技术(在这种情况下,主机架构是arm64
)。您可以在此处阅读有关其工作原理的信息。
QEMU是 Docker buildx 使用的模拟器。这是我在编写多架构工作流时艰难地学到的依赖项。
如需更多参考,请查看此文档:https ://github./docker/build-push-action/blob/master/docs/advanced/multi-platform.md
您应该能够使用以下工作流程构建图像:
name: ci
on:
push:
branches:
- 'master'
jobs:
docker:
runs-on: ubuntu-latest
steps:
-
name: Checkout
uses: actions/checkout@v2
-
name: Set up QEMU dependency
uses: docker/setup-qemu-action@v1
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Build controller image
if: steps.changed-files-plantcontroller.outputs.any_changed == 'true'
uses: docker/build-push-action@v2
with:
context: ${{ env.context }}
tags: ${{ env.image_name_controller }}
platforms: linux/arm/v7
push: true
env:
context: ./controller
注意:使用您Build controller image
编写步骤的方式更新了最后一个构建命令。它只是将 Docker 命令转换为 Docker build-push-action 的构建方式。
您可以使用替代命令代替build-push-action@v2
:
docker buildx build -t ${{ env.image_name_controller }} --platform linux/arm/v7 --push ${{ env.context }}
该命令假定您要使用该标签推送到 GitHub 存储库。
不相关,但有机会简化您的 Dockerfile。
当你使用 buildx 时,当你拉取的镜像有多个版本时,Docker 可以处理拉取镜像的正确 arm32v7 版本。查看节点图像标签,您会看到linux/arm/v7
列为 OS/Arch 标签之一。这意味着如果您认为您想在某个时候为不同的架构构建,您可以简化您的FROM arm32v7/node AS appbuild
生产线。FROM node AS appbuild
例如:
amd64
为和构建的Github 工作流arm64
根据TARGETPLATFORM拉取相关amd64
或arm64
图像的 Dockerfile
更多推荐
不为,图像,操作,环境,Github
发布评论