我有一个GitHub操作,它几乎和下面的一样。这个操作的目的是建立一个Dockerfile并将其推送到DockerHub。
name: DockerHub Run
on:
push:
branches:
- "master"
schedule:
- cron: "0 0 * * 0"
env:
DOCKERHUB_USERNAME: MyUser
OFFICIAL_TAG: MyUser/MyImage:latest
MAIN_REPO_NAME: MyUser/MyImage
DOCKERFILE_PATH: /
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ env.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKER_ACCESS_TOKEN }}
- name: Build and push image to DockerHub
uses: docker/build-push-action@v3
with:
platforms: linux/amd64,linux/arm64
file: ${{ env.GITHUB_WORKSPACE }}/Dockerfile
push: true
tags: ${{ env.OFFICIAL_TAG }}
- name: Update repo description
uses: peter-evans/dockerhub-description@v2
with:
username: ${{ env.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKER_ACCESS_TOKEN }}
repository: ${{ env.MAIN_REPO_NAME }}
readme-filepath: ./readme.md
根据DockerHub,该体系结构被列为x1c 0d1x
不过,我对这一行有个疑问:
uses: docker/build-push-action@v3
with:
platforms: linux/amd64,linux/arm64
我不确定这里列出的平台是否真的编译到这些平台上。请记住,GitHub使用的是ubuntu-latest
,即x86-x64,我没有ARM 64设备要测试。
我的设置是否正确,可以构建到ARM设备?
1条答案
按热度按时间polhcujo1#
tldr
我不确定这里列出的平台是否真的编译到这些平台。
确实如此(假设您在Dockerfile中定义的命令是平台感知的)
我的设置是否正确,可以构建到ARM设备?
您的配置看起来是正确的,应该是针对amd 64和arm 64构建的。您可以通过在推送后添加一个步骤并检查输出来进行测试:
长回答
它之所以能“工作”,是因为qemu的仿真器适用于一系列不同的平台(aka
docker/setup-qemu-action@v2
),然后使用docker buildx实现multi-platform images。问题是,即使一切似乎建立良好的CI这种方式,工件从来没有真正得到测试,在各自的本地平台,所以回答你的问题'我设置正确,以建立到ARM设备?'..🤷 ♂️
我发现它类似于python及其universal 2 wheels,其中构建了交叉编译,但从未真正进行过测试(所有这些都是python和macos特有的,但对话指出了为这些多平台工件运行集成/e2 e测试的挑战):
这个github/社区讨论还提供了更多关于多平台构建的深度信息https://github.com/community/community/discussions/38728#discussioncomment-4106829