Apple Silicon Mac(M1,M2) - 느린 Docker 성능을 처리하는 방법은 무엇입니까?
아마도 이 주제는 이미 여기 저기에서 여러 번 논의되었지만 이에 대한 적절한 답변을 보지 못했습니다. 나는 텍스트를 짧게하려고 노력할 것이므로 나와 함께하십시오.
짧은 역사 - 개발자로서 저는 거의 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에도 사전 빌드된 이미지가 있을 가능성이 높으므로 직접 검색해 보십시오.
여러분 모두에게 도움이 되었기를 바랍니다.
건배.
Reference
이 문제에 관하여(Apple Silicon Mac(M1,M2) - 느린 Docker 성능을 처리하는 방법은 무엇입니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/oben/apple-silicon-mac-m1m2-how-to-deal-with-slow-docker-performance-58n0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)