😽
CircleCIでマルチアーキテクチャ対応のDockerイメージをビルドする
結論
いきなりですが以下のように書きます。
.circleci/config.yml
version: 2.1
orbs:
docker: circleci/docker@2.0.2
executors:
amd64:
machine:
image: ubuntu-2004:202111-02
docker_layer_caching: true
resource_class: medium
environment:
DOCKER_BUILDKIT: 1
arm64:
machine:
image: ubuntu-2004:202101-01
docker_layer_caching: true
resource_class: arm.medium
environment:
DOCKER_BUILDKIT: 1
commands:
build:
parameters:
arch:
type: string
steps:
- checkout
- docker/check
- docker/build:
image: shojikai/alpine
tag: << parameters.arch >>-${CIRCLE_SHA1}
- docker/push:
image: shojikai/alpine
tag: << parameters.arch >>-${CIRCLE_SHA1}
jobs:
build_amd64:
executor: amd64
steps:
- build:
arch: amd64
build_arm64:
executor: arm64
steps:
- build:
arch: arm64
deploy:
executor: amd64
steps:
- docker/check
- run:
name: "Create manifest"
command: |
docker manifest create shojikai/alpine:latest \
--amend shojikai/alpine:amd64-${CIRCLE_SHA1} \
--amend shojikai/alpine:arm64-${CIRCLE_SHA1}
- run:
name: "Push manifest"
command: |
docker manifest push shojikai/alpine:latest
workflows:
version: 2
build_and_deploy:
jobs:
- build_amd64
- build_arm64
- deploy:
requires:
- build_amd64
- build_arm64
ポイントとしては、
- amd64, arm64それぞれのmachineを使ってビルドする
- 最後にマニフェストを作成してプッシュする
といったことくらいです。
あと、今回のDockerfileはalpineをFROMしているだけです。
Dockerfile
FROM alpine
確認
arm64
% arch
arm64
% docker run shojikai/alpine arch
aarch64
x86_64/amd64
% arch
x86_64
% docker run shojikai/alpine arch
x86_64
Discussion