Apple M1 Pro에 적합한 Docker 이미지 선택

3485 단어 dockermacosarm
Apple MacBook M1 Pro 노트북에서 다음 MySQL Docker 이미지를 가져오려고 하면 어떻게 됩니까?

 docker pull mysql:8.0.23


다음과 같은 오류 메시지가 나타날 수 있습니다.

8.0.23: Pulling from library/mysql
no matching manifest for linux/arm64/v8 in the manifest list entries


동일한 명령이 클라우드 인스턴스나 동료의 노트북에서 작동할 수 있습니다. 이상하지 않나요?

더 깊이 잠수하자



mquery 도구를 사용하면 미디어 유형(표준 OCIv1 또는 Docker v2.2 이미지), 다이제스트 및 플랫폼 지원(OCI 인덱스 또는 Docker v2.2 매니페스트 목록인 경우)과 관련하여 공용 컨테이너 리포지토리의 모든 공용 이미지를 쿼리할 수 있습니다. . 이 이미지는 공개 GitHub 리포지토리estesp/mquery에서 릴리스가 발생할 때 GitHub 작업에 의해 생성 및 푸시됩니다.
mysql:8.0.23에 대해 mquery 도구를 실행하고 결과를 확인하겠습니다.

docker run --rm mplatform/mquery mysql:8.0.23                 
Unable to find image 'mplatform/mquery:latest' locally
latest: Pulling from mplatform/mquery
894bcacb16df: Pull complete 
a0c6ee298a93: Pull complete 
Digest: sha256:d0989420b6f0d2b929fd9355f15c767f62d0e9a72cdf999d1eb16e6073782c71
Status: Downloaded newer image for mplatform/mquery:latest
Image: mysql:8.0.23 (digest: sha256:6e0014cdd88092545557dee5e9eb7e1a3c84c9a14ad2418d5f2231e930967a38)
 * Manifest List: Yes (Image type: application/vnd.docker.distribution.manifest.list.v2+json)
 * Supported platforms:
   - linux/amd64



위에서 볼 수 있듯이 Docker 이미지는 x86 플랫폼에 대한 지원이 제한적입니다(Arm 아치 지원 누락).

CPU는 기본 아키텍처에 대한 바이너리만 실행할 수 있습니다. 예를 들어 x86 시스템용으로 빌드된 Docker 이미지는 Arm 기반 시스템에서 실행할 수 없습니다. Apple이 맞춤형 Arm 기반 실리콘으로 완전히 전환함에 따라 x86(Intel 또는 AMD) Docker 이미지가 Apple의 최신 M 시리즈 칩에서 작동하지 않을 가능성이 있습니다. 결과적으로 우리는 항상 다중 아키텍처 컨테이너 이미지를 구축할 것을 권장했습니다. 다음은 모든 공용 레지스트리에서 모든 공용 이미지의 다중 플랫폼 상태를 쿼리할 수 있는 mplatform/mquery Docker 이미지입니다.

docker run --rm mplatform/mquery eclipse-temurin:17-jre-alpine
Image: eclipse-temurin:17-jre-alpine (digest: sha256:ac423a0315c490d3bc1444901d96eea7013e838bcf7cc09978cf84332d7afc76)
 * Manifest List: Yes (Image type: application/vnd.docker.distribution.manifest.list.v2+json)
 * Supported platforms:
   - linux/amd64


Docker는 다중 아키텍처 이미지를 빌드하는 데 도움이 되는 docker buildx 명령을 도입했습니다. Buildx는 친숙한 Docker 사용자 경험으로 많은 강력한 빌드 기능을 지원하는 Docker 구성 요소입니다. Buildx를 통해 실행되는 모든 빌드는 Moby BuildKit 빌더 엔진을 통해 실행됩니다. BuildKit은 다중 플랫폼 빌드 또는 사용자의 로컬 플랫폼만을 대상으로 하지 않는 빌드에서 탁월하도록 설계되었습니다. 빌드를 호출할 때 --platform 플래그를 설정하여 빌드 출력의 대상 플랫폼(예: linux/amd64, linux/arm64 또는 darwin/amd64)을 지정할 수 있습니다.

docker buildx build --platform linux/amd64, linux/arm64 -t mysql:8.0.23 .


다중 CPU 아키텍처 지원 활용



Docker 이미지는 여러 아키텍처를 지원할 수 있습니다. 즉, 단일 이미지에 다양한 아키텍처, 경우에 따라 Windows와 같은 다양한 운영 체제에 대한 변형이 포함될 수 있습니다.

다중 아키텍처 지원으로 이미지를 실행할 때 docker는 OS 및 아키텍처와 일치하는 이미지 변형을 자동으로 선택합니다.

Docker Hub에 있는 대부분의 Docker 공식 이미지는 variety of architectures . 예를 들어, busybox 이미지는 amd64, arm32v5, arm32v6, arm32v7, arm64v8, i386, ppc64le 및 s390x를 지원합니다. x86_64/amd64 머신에서 이 이미지를 실행할 때 amd64 변형이 풀링되어 실행됩니다.

이제 Mac M1용 Docker Desktop을 사용하여 Apple M1 Mac에서 ARM 또는 Intel Docker 컨테이너를 실행할 수도 있습니다. 물론 기본값은 ARM 버전을 실행하는 것이지만 --platform linux/amd64 매개변수를 사용하면 Docker가 Intel 버전을 실행합니다.

흥미롭지 않나요?

좋은 웹페이지 즐겨찾기