Apple M1 칩에 x86 이미지 구축

이 기사는 원래 Everything DevOps에 게시되었습니다.

몇 달 전 Amazon Elastic Kubernetes Service(EKS)에서 애플리케이션을 배포하는 동안 포드가 오류standard_init_linux.go:228: exec user process caused: exec format error와 함께 충돌했습니다.

약간의 조사 끝에 이미지가 빌드된 아키텍처가 실행 중인 아키텍처와 다를 때 오류가 발생하는 경향이 있음을 알게 되었습니다. 그런 다음 ARM64 아키텍처를 기반으로 하는 Apple M1 칩이 있는 MacBook에서 이미지를 빌드하고 있었고 내가 배포한 EKS 클러스터의 작업자 노드는 x86 아키텍처를 기반으로 한다는 것을 기억했습니다.

오류를 수정하는 두 가지 옵션이 있었습니다. 새로운 ARM 기반 작업자 노드를 생성하거나 x86 아키텍처에서 이미지를 빌드하는 것입니다. 분명한 이유로 새로운 작업자 노드를 생성할 수 없었기 때문에 Apple M1 칩에서 x86 이미지를 빌드하는 방법을 알아내야 했습니다.

이 기사에서는 Docker Buildx을 사용하여 Apple M1 칩에서 x86 아키텍처로 애플리케이션의 Docker 이미지를 구축한 방법을 안내합니다.

Docker Buildx란 무엇입니까?



Docker Buildx는 docker 명령을 확장하는 CLI 플러그인입니다. Docker Buildx는 Docker가 이미지를 빌드해야 하는 대상 아키텍처를 지정하는 기능과 같은 많은 새로운 기능과 함께 docker build와 동일한 사용자 경험을 제공합니다. 이러한 새 기능은 Moby BuildKit 빌더 툴킷의 도움으로 가능합니다.

Docker Buildx를 사용하여 Apple M1 칩에 x86-64 이미지를 빌드하려면 먼저 Docker Buildx를 설치해야 합니다.

Docker Buildx 설치



Docker Desktop을 사용하거나 Docker 버전 20.x가 있는 경우 Docker Buildx가 이미 포함되어 있으므로 별도의 설치가 필요하지 않습니다. 다음을 사용하여 Docker Buildx가 있는지 확인합니다.

docker buildx version

그러나 다른 도구를 사용하여 Docker 런타임을 얻는 저와 같은 경우 다음 명령을 사용하여 바이너리를 통해 Docker Buildx를 설치하십시오.

$ ARCH=arm64
$ VERSION=v0.8.2 

위의 명령은 다운로드할 Docker Buildx 바이너리의 아키텍처 및 버전에 대한 임시 환경 변수를 설정합니다. 최신 버전은 Docker Buildxreleases page on GitHub를 참조하십시오.

임시 환경 변수를 설정한 후 다음을 사용하여 바이너리를 다운로드합니다.

$ curl -LO https://github.com/docker/buildx/releases/download/${VERSION}/buildx-${VERSION}.darwin-${ARCH}

바이너리를 다운로드한 후 홈 디렉터리에 폴더를 생성하여 다음과 함께 Docker CLI 플러그인을 보관합니다.

$ mkdir -p ~/.docker/cli-plugins

그런 다음 다음을 사용하여 바이너리를 Docker CLI 플러그인 폴더로 이동합니다.

$ mv buildx-${VERSION}.darwin-${ARCH} ~/.docker/cli-plugins/docker-buildx

그런 다음 다음을 사용하여 바이너리를 실행 가능하게 만드십시오.

$ chmod +x ~/.docker/cli-plugins/docker-buildx

설치를 확인하려면 다음을 실행하십시오.

$ docker buildx version 

Docker Buildx를 사용하여 Apple M1 칩에 x86-64 이미지 빌드



Docker Buildx를 설치한 후 이제 다음 명령을 사용하여 Apple M1 칩에서 애플리케이션 이미지를 x86-64로 쉽게 빌드할 수 있습니다.

$ docker buildx build --platform=linux/amd64 -t <image-name> .

위 명령에서:
  • buildx는 BuildKit 엔진을 사용하여 이미지를 빌드하며 빌드를 시작하기 위해 DOCKER_BUILDKIT=1 환경 변수가 필요하지 않습니다.
  • --platform 플래그는 이미지를 빌드할 대상 아키텍처(플랫폼)를 지정합니다. 이 경우 x86 아키텍처인 linux/amd64 입니다.
  • 그리고 <image-name>는 이미지 태그를 넣기 위한 자리 표시자입니다.



  • Docker가 linux/amd64에 이미지를 빌드했는지 확인하려면 위의 주석이 달린 스크린샷에서 볼 수 있듯이 docker image inspect <image_name> 명령을 사용하십시오.

    inspect 명령은 이미지에 대한 자세한 정보를 JSON 형식으로 표시합니다. 아래로 스크롤하면 아래 이미지와 같이 ArchitectureOs 정보가 표시됩니다.



    결론



    이 기사에서는 Docker Buildx를 사용하여 Apple M1 칩에서 x86 아키텍처를 기반으로 이미지를 빌드하는 방법을 살펴보았습니다. Docker Buildx에 대해 더 많은 것을 배울 수 있습니다. 자세히 알아보려면 다음 리소스를 확인하세요.
  • The secret gems behind building container images, Enter: BuildKit & Docker Buildx
  • Building Multi-Architecture Docker Images With Buildx
  • How To Use Docker Buildx in Remote Docker?
  • 좋은 웹페이지 즐겨찾기