linux/amd64; linux/arm64

19.03+ 版本开始可以使用 docker buildx build 命令利用 BuildKit 构建镜像

# build x64
docker build -t ubuntu .

# crossbuild arm64
docker buildx build --platform linux/arm64 -t ubuntu-arm64 .


yum install docker-buildx
sudo systemctl start docker
sudo usermod -aG docker $USER

$ sudo docker version
Client:
 Version:           27.3.1

$ docker buildx version
github.com/docker/buildx 0.17.1 1.fc41

$ sudo docker buildx ls
NAME/NODE     DRIVER/ENDPOINT   STATUS    BUILDKIT   PLATFORMS
default*      docker                                 
 \_ default    \_ default       running   v0.16.0    linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/arm64, linux/riscv64, linux/ppc64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/mips64, linux/loong64, linux/arm/v7, linux/arm/v6

Github Actions

## 其他默认,只修改jobs部分

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v3
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
      - name: Login to Quay.io
        uses: docker/login-action@v3
        with:
          registry: quay.io
          username: ${{ secrets.QUAY_USERNAME }}
          password: ${{ secrets.QUAY_PASSWORD }}
      - name: Build and push
        uses: docker/build-push-action@v5
        with:
          context: .
          platforms: linux/amd64,linux/arm64
          push: true
          tags: quay.io/slackman/osarch:latest,quay.io/slackman/osarch:${{ github.ref_name }}
          outputs: type=image,name=target

Anolis

FROM scratch
LABEL \
    org.opencontainers.image.title="Anolis OS Base Image" \
    org.opencontainers.image.vendor="Anolis OS 8.9" \
    org.opencontainers.image.licenses="Mulan PSL v2" \
    org.opencontainers.image.created="2024-04-25" \
    maintainer="OpenAnolis Cloud Native SIG"

ADD AnolisOS8.9-base-amd64-20240425.tar.xz  /
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone
ENV TZ=Asia/Shanghai

CMD ["/bin/bash"]

Ubuntu

http://cdimage.ubuntu.com/ubuntu-base/releases/22.04/release/

FROM scratch
LABEL \
    org.opencontainers.image.title="Ubuntu 22.04 LTS (Jammy Jellyfish)" \
    org.opencontainers.image.release="jammy" \
    org.opencontainers.image.architecture="amd64" \
    org.opencontainers.image.variant="default" \
    org.opencontainers.image.created="20250320" \
    maintainer="localhost"

ENV DEBIAN_FRONTEND=noninteractive

ADD ubuntu-base-22.04-base-amd64.tar.gz /
RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list; \
    sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list; \
    apt-get -q update; \
    apt-get install -qy --no-install-recommends ca-certificates curl tzdata libssl-dev zlib1g-dev; \
    ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime; \
    echo "Asia/Shanghai" > /etc/timezone; \
    rm -rf /var/lib/apt/lists/*

CMD ["/bin/bash"]

linux/arm64

FROM scratch
LABEL \
    org.opencontainers.image.title="Ubuntu 22.04 LTS (Jammy Jellyfish)" \
    org.opencontainers.image.release="jammy" \
    org.opencontainers.image.architecture="arm64" \
    org.opencontainers.image.variant="default" \
    org.opencontainers.image.created="20250320" \
    maintainer="localhost"

ENV DEBIAN_FRONTEND=noninteractive

ADD ubuntu-base-22.04-base-arm64.tar.gz /
RUN sed -i s@/ports.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list; \
    apt-get -q update; \
    apt-get install -qy --no-install-recommends ca-certificates curl tzdata libssl-dev zlib1g-dev; \
    ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime; \
    echo "Asia/Shanghai" > /etc/timezone; \
    rm -rf /var/lib/apt/lists/*

CMD ["/bin/bash"]

FROM Ubuntu

FROM ubuntu:22.04
LABEL \
    org.opencontainers.image.title="OpenNebula 6.10" \
    org.opencontainers.image.vendor="Ubuntu22 build system" \
    org.opencontainers.image.licenses="Apache" \
    org.opencontainers.image.created="2025-04-09" \
    maintainer="localhost"

ENV DEBIAN_FRONTEND=noninteractive \
    TZ=Asia/Shanghai \
    LANG=en_US.UTF8 \
    LC_ALL=en_US.UTF8 \
    LANGUAGE=enUS:en

ADD sources.list /etc/apt/sources.list
RUN apt-get update && apt-get install -y --no-install-recommends tzdata \
    && ln -snf /usr/share/zoneinfo/$TZ /etc/localtime  \
    && echo $TZ > /etc/timezone \
    && dpkg-reconfigure -f noninteractive tzdata 

# Install build base
RUN apt-get install --no-install-recommends --yes \
    language-pack-en build-essential vim less git wget curl \
    && apt-get clean && rm -rf /var/lib/apt/lists/*

CMD ["/bin/bash"]
FROM ubuntu:22.04
LABEL \
    org.opencontainers.image.title="OpenNebula 6.10" \
    org.opencontainers.image.vendor="Ubuntu22 build system" \
    org.opencontainers.image.licenses="Apache" \
    org.opencontainers.image.created="2025-04-09" \
    maintainer="localhost"

ENV DEBIAN_FRONTEND=noninteractive \
    TZ=Asia/Shanghai \
    LANG=en_US.UTF8 \
    LC_ALL=en_US.UTF8 \
    LANGUAGE=enUS:en

ADD sources.list /etc/apt/sources.list
RUN apt-get update && apt-get install -y --no-install-recommends tzdata \
    && ln -snf /usr/share/zoneinfo/$TZ /etc/localtime  \
    && echo $TZ > /etc/timezone \
    && dpkg-reconfigure -f noninteractive tzdata 

# Install build base
RUN apt-get install -y language-pack-en \
    build-essential less wget curl file vim \
    bc binutils bison dwarves flex gcc git gnupg2 gzip \
    libelf-dev libncurses5-dev libssl-dev make openssl pahole perl-base rsync tar xz-utils \
    && apt-get clean && rm -rf /var/lib/apt/lists/*

CMD ["/bin/bash"]

About Links

https://www.cnblogs.com/dazhoushuoceshi/p/7066041.html

https://docs.docker.net.cn/build/buildkit/