Apple Silicon Mac(M1,M2) - 느린 Docker 성능을 처리하는 방법은 무엇입니까?

3142 단어 dockerapplewebdevnode
안녕하세요 여러분,

아마도 이 주제는 이미 여기 저기에서 여러 번 논의되었지만 이에 대한 적절한 답변을 보지 못했습니다. 나는 텍스트를 짧게하려고 노력할 것이므로 나와 함께하십시오.

짧은 역사 - 개발자로서 저는 거의 1년 동안 M1 MBA의 성능에 매우 만족해 왔지만 항상 저를 괴롭히는 한 가지가 있었습니다. 바로 Docker였습니다.

Mac의 Docker 엔진은 항상 느린 주자였습니다. Mac용 Docker 성능을 일반 저사양 Linux 시스템(또는 WSL2 인스턴스)의 대응 제품과 비교하면 Docker가 높은 사양의 최신 M1/M2 Mac에서도 얼마나 느린지 놀랄 것입니다.

자, 문제는 분명합니다. 솔루션은 어떻습니까? 쉽습니다. 기본 x86/amd64 대신 Arm Docker 이미지를 사용하세요 :)

Dockerfile(또는 docker-compose)을 사용하여 시작하는 이전 코드베이스가 있는 경우 기본 x86/amd64 이미지를 처리할 가능성이 매우 높습니다. 암 CPU 온보드.

예를 들어 나처럼 NodeJS를 사용하는 경우 Dockerfile에 비슷한 항목이 있을 수 있습니다.

FROM node:16.17.1


또는 docker-compose.yml:

api:
    image: 'node:16.17.1'
    ...


M1/M2 Mac에서는 느리게 수행되지만 x86 아키텍처(이전에 사용했을 가능성이 높은 아키텍처)에서는 잘 작동하는 공식 도커 허브의 기본 이미지입니다.
즉, 동일한 NodeJS 도커 구성에 대해 기본 이미지를 arm64v8/node:16.17.1 로 변경했습니다. 동일한 NodeJS Dockerfile은 다음과 같습니다.

FROM arm64v8/node:16.17.1


또는 docker-compose.yml:

api:
    image: 'arm64v8/node:16.17.1'
    ...


데이터베이스의 경우 Postgres를 사용했기 때문에 docker-compose.yml은 다음과 같습니다.

postgresql:
    image: 'postgres:10.6'
    ...


이것은 M1에서 어리석게도 느리게 작동했습니다. 예를 들어 2Gb 덤프 파일을 도커 컨테이너 내부에서 복원하는 데 1시간 이상 걸렸습니다.
기본 이미지를 팔 기반( arm64v8/postgres )으로 변경하면 성능이 최소 2-3배 향상되었습니다.
docker-compose.yml을 다음으로 변경하면 트릭을 수행했습니다.

postgresql:
    image: 'arm64v8/postgres'
    ...


이 모든 것을 읽은 후에 가질 논리적 질문 - 이 팔 이미지를 어디서 얻을 수 있는지. 대답은 공식 Docker Hub 페이지입니다.
예제를 위해 논의된 NodeJS 이미지 구성(위 참조)을 살펴보겠습니다. official Docker Hub NodeJS page 을 방문하여 지원되는 아키텍처 섹션으로 스크롤하고 arm64v8을 선택합니다(기본적으로 arm64를 검색합니다).



NodeJS arm64v8 image page로 이동하면 Dockerfiles 또는 docker-compose.yml 내에서 사용할 수 있는 사용 가능한 도커 이미지 태그가 표시됩니다.



뿐만 아니라 "이 이미지를 사용하는 방법"지침:

.

설명 텍스트에서 템플릿이 arm64v8/node:<version>임을 알 수 있으므로 제 경우에는 arm64v8/node:16.17.1가 됩니다(16.17.1 태그는 지원되는 태그에 나열됨).

다른 도커 이미지(NodeJS 또는 Postgres 외)를 사용하는 경우 DockerHub에도 사전 빌드된 이미지가 있을 가능성이 높으므로 직접 검색해 보십시오.

여러분 모두에게 도움이 되었기를 바랍니다.
건배.

좋은 웹페이지 즐겨찾기