Amazon ECR의 성능 최적화 - Amazon ECR

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon ECR의 성능 최적화

Amazon ECR을 사용할 때 성능을 최적화하기 위한 설정 및 전략에 대한 다음 권장 사항을 사용할 수 있습니다.

Docker 1.10 이상을 사용하여 동시 계층 업로드 활용

도커 이미지는 계층으로 구성되어 있으며, 계층은 이미지의 중간 빌드 단계입니다. Dockerfile의 각 행은 새로운 계층을 생성합니다. Docker 1.10 이상을 사용하는 경우 Docker는 기본적으로 Amazon ECR에 동시 업로드를 수행하면서 가능한 많은 계층을 푸시하여 업로드 시간이 단축되도록 설정됩니다.

작은 크기의 기본 이미지 사용

Docker Hub를 통해 제공되는 기본 이미지에는 사용자의 애플리케이션에서는 필요하지 않은 많은 종속 프로그램이 포함되어 있을 수 있습니다. Docker 커뮤니티에서 다른 사람이 생성하고 유지 관리하는 작은 크기의 이미지를 사용하는 것을 고려하거나, 아니면 Docker의 최소 scratch 이미지를 사용하여 사용자 고유의 기본 이미지를 빌드하십시오. 자세한 내용은 Docker 설명서에서 기본 이미지 생성을 참조하십시오.

Dockerfile에서 가장 최근에 변경된 종속 프로그램 찾기

Docker는 계층을 캐시하여 빌드 시간을 줄입니다. 마지막 빌드 이후 계층에 변경된 사항이 없으면 Docker는 계층을 다시 빌드하는 대신 캐시된 버전을 사용합니다. 그러나, 각 계층은 이전 빌드의 계층에 종속되어 있습니다. 계층이 변경되면 Docker는 해당 계층뿐만 아니라 해당 계층 이후의 계층도 다시 컴파일합니다.

Docker 파일을 다시 빌드하고 계층을 다시 업로드하는 데 필요한 시간을 최소화하려면, Dockerfile의 앞쪽에는 가장 적은 횟수로 변경되는 종속 프로그램을 넣습니다. 자주 변경되는 종속 프로그램(애플리케이션의 소스 코드 등)은 스택의 뒤쪽에 넣으십시오.

불필요한 파일 저장을 방지하는 체인 명령

계층에 생성된 중간 파일은 후속 계층에서 삭제되더라도 해당 계층의 일부로 남습니다. 다음 예제를 검토하십시오.

WORKDIR /tmp RUN wget http://example.com/software.tar.gz RUN wget tar -xvf software.tar.gz RUN mv software/binary /opt/bin/myapp RUN rm software.tar.gz

이 예에서는, 첫 번째 및 두 번째 RUN 명령에 의해 생성된 계층에 원본 .tar.gz 파일 및 이 파일의 압축되지 않은 콘텐츠가 모두 들어 있습니다. 이는 네 번째 RUN 명령에 의해 .tar.gz 파일이 삭제되는 경우에도 그렇습니다. 불필요한 파일이 최종 도커 이미지에 포함되지 않도록 하기 위해 이러한 명령은 다음과 같이 단일 RUN 문에 함께 묶여 있을 수 있습니다.

WORKDIR /tmp RUN wget http://example.com/software.tar.gz &&\ wget tar -xvf software.tar.gz &&\ mv software/binary /opt/bin/myapp &&\ rm software.tar.gz
가장 가까운 리전의 엔드포인트 사용

애플리케이션을 실행하고 있는 위치에서 가장 가까운 리전의 엔드포인트를 사용함으로써 Amazon ECR에서 이미지를 가져올 때 발생하는 지연 시간을 줄일 수 있습니다. 애플리케이션을 Amazon EC2 인스턴스에서 실행하고 있는 경우, 다음 셸 코드를 사용하여 인스턴스의 가용 영역에서 리전을 가져올 수 있습니다.

REGION=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone |\ sed -n 's/\(\d*\)[a-zA-Z]*$/\1/p')

--region파라미터를 사용하여 지역을 AWS CLI 명령에 전달하거나 aws configure 명령을 사용하여 프로필의 기본 지역으로 설정할 수 있습니다. AWS SDK를 사용하여 전화를 걸 때 지역을 설정할 수도 있습니다. 자세한 내용은 해당 프로그래밍 언어의 SDK 설명서를 참조하십시오.