docker/build-push-action으로 멀티플랫폼 이미지에 태그 지정

개시하다


나는 연간 또는 월 단위로 GiitHub의 contribution 수를 누적하는 도구Docker 이미지로 공개가 하나 있다.
M1Mac을 사용하여 ARM에 대응합니다.
  • linux/amd64
  • linux/arm64
  • 의 다중 플랫폼 이미지입니다.간단히docker tagdocker pushlinux/amd64linux/arm64한 쪽만 라벨을 달았다.
    이용docker/build-push-action으로 해결됐으니 소개해드릴게요.

    해결의 과제

    docker pulldocker run의 운영 환경에 따라 적합한 이미지를 다운로드할 수 있다.Docker Hub에서 다음OS/ARCH을 선택할 수 있습니다.
    multi-platform-image-on-docker-hub

    GiitHub Action 솔루션


    Docker 공식 GiitHub Actions를 사용하면 간단합니다.

  • 실행docker/setup-qemu-action

  • 실행docker/setup-buildx-action
  • platformtag를 지정하여 실행docker/build-push-action
  • main 분지의push를 촉발점docker push [options] $REPOSITORY:latest으로 하는 샘플이 여기 있습니다.
    https://github.com/oke-py/contributions/blob/855aa37938dd92bb87485bb32c6b0b7de2546f7d/.github/workflows/docker.yml
    GiitHub 창고에서 라벨을 만들 때docker push [options] $REPOSITORY:$TAG도 가능하다.
    https://github.com/oke-py/contributions/blob/855aa37938dd92bb87485bb32c6b0b7de2546f7d/.github/workflows/docker-tag.yml

    재현 실행 명령


    하고 싶은 일이 있지만 더 쫓아가겠습니다.어떤 명령을 실행했는지 원본 코드를 읽은 후에 설명하세요.
    읽기docker 알 수 있는 main.ts 명령의 매개 변수에 docker 변수가 지정되어 있습니다.
    https://github.com/docker/build-push-action/blob/ba317382dcde9f7deb318467fc6cd7230d8b1714/src/main.ts#L25-L34
    이것argsargscontext.ts 함수의 반환값이다.
    https://github.com/docker/build-push-action/blob/ba317382dcde9f7deb318467fc6cd7230d8b1714/src/context.ts#L101-L109 getArgs 함수와 getBuildArgs 함수는 설정값에 따라 옵션을 추가합니다.길어서 발췌한 거예요.
    https://github.com/docker/build-push-action/blob/ba317382dcde9f7deb318467fc6cd7230d8b1714/src/context.ts#L111-L115
    상술한 샘플에 따르면 지령의 재현 결과는 여기에 있다.가독성 때문에 줄을 적당히 바꾸다.
    docker buildx build \
      --platform linux/amd64,linux/arm64 \
      --tag okepy/contribution:latest \
      --push \
      .
    
    오, 그렇군요.몰라요.

    M1Mac에서 재생성 명령 실행하기


    [+] Building 0.0s (0/0)                                                                                                                                       
    error: multiple platforms feature is currently not supported for docker driver. Please switch to a different driver (eg. "docker buildx create --use")
    
    네, 오류가 발생했습니다.해결 방법은 다음과 같습니다.
  • getBuildArgs
  • docker/setup-qemu-action
  • (나는 이곳에서 만족해서 시도하지 않았다).
    https://github.com/docker/build-push-action/issues/302

    끝말


    Docker 공식 깃허브 액션을 활용해 멀티플랫폼 이미지를 간단하게 제작했다.
    멀티플랫폼 이미지에 대해 말하자면 Cybozu Productivity News #2 - 2022.04.28에서 고속화를 구축하는 방법을 소개했다.docker/setup-buildx-action 몰라요.또한 본고에서 다구조가 대응하는 이미지가 나타난다.
    https://poyo.hatenablog.jp/entry/2021/09/25/225329

    참고 자료


    https://github.com/docker/build-push-action

    좋은 웹페이지 즐겨찾기