

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

# Amazon ECR 리포지토리로 마이그레이션할 때 중복 컨테이너 이미지 자동 식별
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository"></a>

*Rishabh Yadav 및 Rishi Singla, Amazon Web Services*

## 요약
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-summary"></a>

이 패턴은 서로 다른 컨테이너 리포지토리에 저장된 이미지가 중복되는지 여부를 식별하는 자동화된 솔루션을 제공합니다. 이 검사는 다른 컨테이너 리포지토리의 이미지를 Amazon Elastic Container Registry(Amazon ECR)로 마이그레이션하려는 경우에 유용합니다.

기본 정보의 경우 패턴은 이미지 다이제스트, 매니페스트 및 태그와 같은 컨테이너 이미지의 구성 요소도 설명합니다. Amazon ECR로의 마이그레이션을 계획할 때 이미지 다이제스트를 비교하여 컨테이너 레지스트리 간에 컨테이너 이미지를 동기화하기로 결정할 수 있습니다. 컨테이너 이미지를 마이그레이션하기 전에 중복을 방지하기 위해 이러한 이미지가 Amazon ECR 리포지토리에 이미 존재하는지 확인해야 합니다. 그러나 이미지 다이제스트를 비교하여 중복을 감지하기 어려울 수 있으며, 이로 인해 초기 마이그레이션 단계에서 문제가 발생할 수 있습니다.  이 패턴은 서로 다른 컨테이너 레지스트리에 저장된 두 개의 유사한 이미지의 다이제스트를 비교하고 다이제스트가 다른 이유를 설명하여 이미지를 정확하게 비교하는 데 도움이 됩니다.

## 사전 조건 및 제한 사항
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-prereqs"></a>
+ 활성 AWS 계정
+ [Amazon ECR 퍼블릭 레지스트리](https://gallery.ecr.aws/)에 대한 액세스
+  AWS 서비스다음에 대한 지식:
  + [AWS CodeCommit](https://aws.amazon.com/codecommit/)
  + [AWS CodePipeline](https://aws.amazon.com/codepipeline/)
  + [AWS CodeBuild](https://aws.amazon.com/codebuild/)
  + [AWS Identity and Access Management (IAM)](https://aws.amazon.com/iam/)
  + [Amazon Simple Storage Service(Amazon S3)](https://aws.amazon.com/s3/)
+ 구성된 CodeCommit 자격 증명([지침](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-gc.html) 참조)

## 아키텍처
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-architecture"></a>

**컨테이너 이미지 구성 요소**

다음 다이어그램은 컨테이너 이미지의 일부 구성 요소를 보여줍니다. 이러한 구성 요소는 다이어그램 뒤에 설명되어 있습니다.

![\[매니페스트, 구성, 파일 시스템 계층 및 다이제스트.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/7db5020c-6f5b-4e91-b91a-5b8ae844be1b/images/71b99c67-a934-4f94-8af8-2a8431fb91f5.png)


**용어 및 정의**

다음 용어는 [Open Container Initiative(OCI) 이미지 사양](https://github.com/opencontainers/image-spec/blob/main/spec.md)에 정의되어 있습니다.
+ **레지스트리:** 이미지 저장 및 관리를 위한 서비스입니다.
+ **클라이언트:** 레지스트리와 통신하고 로컬 이미지와 작동하는 도구입니다.
+ **푸시:** 레지스트리에 이미지를 업로드하는 프로세스입니다.
+ **풀:** 레지스트리에서 이미지를 다운로드하는 프로세스입니다.
+ **Blob:** 레지스트리에 저장되고 다이제스트에 의해 처리될 수 있는 콘텐츠의 이진 형식입니다.
+ **인덱스:** 다양한 컴퓨터 플랫폼(예: x86-64 또는 ARM 64비트) 또는 미디어 유형에 대한 여러 이미지 매니페스트를 식별하는 구문입니다. 자세한 내용은 [OCI 이미지 인덱스 사양](https://github.com/opencontainers/image-spec/blob/main/image-index.md)을 참조하세요.
+ **매니페스트:** 매니페스트의 엔드포인트를 통해 업로드되는 이미지 또는 아티팩트를 정의하는 JSON 문서입니다. 매니페스트는 설명자를 사용하여 리포지토리의 다른 BLOB을 참조할 수 있습니다. 자세한 내용은 [OCI 이미지 매니페스트 사양](https://github.com/opencontainers/image-spec/blob/main/manifest.md)을 참조하세요.
+ **파일 시스템 계층:** 이미지에 대한 시스템 라이브러리 및 기타 종속성입니다.
+ **구성:** 아티팩트 메타데이터를 포함하고 매니페스트에서 참조되는 BLOB입니다. 자세한 내용은 [OCI 이미지 구성 사양](https://github.com/opencontainers/image-spec/blob/main/config.md)을 참조하세요.
+ **객체 또는 아티팩트:** Blob으로 저장되고 구성과 함께 제공되는 매니페스트와 연결된 개념적 콘텐츠 항목입니다.
+ **다이제스트:** 매니페스트 콘텐츠의 암호화 해시에서 생성되는 고유 식별자입니다. 이미지 다이제스트는 변경 불가능한 컨테이너 이미지를 고유하게 식별하는 데 도움이 됩니다. 다이제스트를 사용하여 이미지를 가져오면 모든 운영 체제 또는 아키텍처에서 매번 동일한 이미지를 다운로드합니다. 자세한 내용은 [OCI 이미지 사양](https://github.com/opencontainers/image-spec/blob/main/descriptor.md#digests)을 참조하세요.
+ **태그:** 사람이 읽을 수 있는 매니페스트 식별자입니다. 변경 불가능한 이미지 다이제스트와 비교하여 태그는 동적입니다. 기본 이미지 다이제스트는 동일하게 유지되지만 이미지를 가리키는 태그는 한 이미지에서 다른 이미지로 변경되고 이동할 수 있습니다.

**대상 아키텍처 **

다음 다이어그램은 Amazon ECR과 프라이빗 리포지토리에 저장된 이미지를 비교하여 중복 컨테이너 이미지를 식별하기 위해이 패턴에서 제공하는 솔루션의 상위 수준 아키텍처를 보여줍니다.

![\[CodePipeline 및 CodeBuild를 사용하여 중복을 자동으로 감지합니다.\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/7db5020c-6f5b-4e91-b91a-5b8ae844be1b/images/5ee62bc8-db8d-48a3-9e79-f3392b6e9bf7.png)


## 도구
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-tools"></a>

**AWS 서비스**
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)를 사용하면 AWS 리소스를 설정하고, 빠르고 일관되게 프로비저닝하고, AWS 계정 및 리전의 수명 주기 동안 리소스를 관리할 수 있습니다.
+ [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)는 소스 코드를 컴파일하고 유닛 테스트를 실행하며 배포할 준비가 완료된 아티팩트를 생성하는 완전관리형 빌드 서비스입니다.
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html)은 나만의 소스 제어 시스템을 관리할 필요 없이 Git 리포지토리를 비공개로 저장하고 관리할 수 있는 버전 제어 서비스입니다.
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)은 소프트웨어 릴리스의 여러 단계를 신속하게 모델링하고 구성하고 소프트웨어 변경 내용을 지속적으로 릴리스하는 데 필요한 단계를 자동화합니다.
+ [Amazon Elastic Container Registry(Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)는 안전하고 확장성이 있고 신뢰할 수 있는 관리형 컨테이너 이미지 레지스트리 서비스입니다.

**코드 **

이 패턴의 코드는 GitHub 리포지토리** **[자동 솔루션에서 리포지토리 간에 중복 컨테이너 이미지를 식별할 수 있습니다](https://github.com/aws-samples/automated-solution-to-identify-duplicate-container-images-between-repositories/).

## 모범 사례
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-best-practices"></a>
+ [CloudFormation  ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/best-practices.html) 모범 사례
+ [AWS CodePipeline  ](https://docs.aws.amazon.com/codepipeline/latest/userguide/best-practices.html) 모범 사례

## 에픽
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-epics"></a>

### Amazon ECR 퍼블릭 및 프라이빗 리포지토리에서 컨테이너 이미지를 풀링합니다.
<a name="pull-container-images-from-ecr-public-and-private-repositories"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon ECR 퍼블릭 리포지토리에서 이미지를 풀링합니다. | 터미널에서 다음 명령을 실행하여 Amazon ECR 퍼블릭 리포지토리`amazonlinux`에서 이미지를 가져옵니다.<pre>$~ % docker pull public.ecr.aws/amazonlinux/amazonlinux:2018.03 </pre>이미지를 로컬 시스템으로 가져오면 이미지 인덱스를 나타내는 다음과 같은 풀 다이제스트가 표시됩니다.<pre>2018.03: Pulling from amazonlinux/amazonlinux<br />4ddc0f8d367f: Pull complete <br /><br />Digest: sha256:f972d24199508c52de7ad37a298bda35d8a1bd7df158149b381c03f6c6e363b5<br /><br />Status: Downloaded newer image for public.ecr.aws/amazonlinux/amazonlinux:2018.03<br />public.ecr.aws/amazonlinux/amazonlinux:2018.03</pre> | 앱 개발자, AWS DevOps, AWS 관리자 | 
| Amazon ECR 프라이빗 리포지토리에 이미지를 푸시합니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | AWS 관리자, AWS DevOps, 앱 개발자 | 
| Amazon ECR 프라이빗 리포지토리에서 동일한 이미지를 가져옵니다. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | 앱 개발자, AWS DevOps, AWS 관리자 | 

### 이미지 매니페스트 비교
<a name="compare-the-image-manifests"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Amazon ECR 퍼블릭 리포지토리에 저장된 이미지의 매니페스트를 찾습니다. | 터미널에서 다음 명령을 실행하여 Amazon ECR 퍼블릭 리포지토리`public.ecr.aws/amazonlinux/amazonlinux:2018.03`에서 이미지 매니페스트를 가져옵니다.<pre>$~ % docker manifest inspect public.ecr.aws/amazonlinux/amazonlinux:2018.03<br />{<br />   "schemaVersion": 2,<br />   "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",<br />   "manifests": [<br />      {<br />         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",<br />         "size": 529,<br />         "digest": "sha256:52db9000073d93b9bdee6a7246a68c35a741aaade05a8f4febba0bf795cdac02",<br />         "platform": {<br />            "architecture": "amd64",<br />            "os": "linux"<br />         }<br />      }<br />   ]<br />}</pre> | AWS 관리자, AWS DevOps, 앱 개발자 | 
| Amazon ECR 프라이빗 리포지토리에 저장된 이미지의 매니페스트를 찾습니다. | 터미널에서 다음 명령을 실행하여 Amazon ECR 프라이빗 리포지토리`<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest`에서 이미지 매니페스트를 가져옵니다.<pre>$~ % docker manifest inspect <account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest                                          <br />{<br />	"schemaVersion": 2,<br />	"mediaType": "application/vnd.docker.distribution.manifest.v2+json",<br />	"config": {<br />		"mediaType": "application/vnd.docker.container.image.v1+json",<br />		"size": 1477,<br />		"digest": "sha256:f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68"<br />	},<br />	"layers": [<br />		{<br />			"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",<br />			"size": 62267075,<br />			"digest": "sha256:4ddc0f8d367f424871a060e2067749f32bd36a91085e714dcb159952f2d71453"<br />		}<br />	]<br />}</pre> | AWS DevOps, AWS 시스템 관리자, 앱 개발자 | 
| Docker에서 가져온 다이제스트를 Amazon ECR 프라이빗 리포지토리의 이미지에 대한 매니페스트 다이제스트와 비교합니다. | 또 다른 질문은 **Docker pull** 명령에서 제공하는 다이제스트가 이미지에 대한 매니페스트 다이제스트와 다른 이유입니다`<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest`.**Docker 풀**에 사용되는 다이제스트는 레지스트리에 저장된 이미지 매니페스트의 다이제스트를 나타냅니다. 매니페스트에는 다운로드하여 Docker로 가져올 콘텐츠의 해시가 포함되어 있으므로이 다이제스트는 해시 체인의 루트로 간주됩니다.Docker 내에서 사용되는 이미지 ID는이 매니페스트에서 로 찾을 수 있습니다`config.digest`. 이는 Docker가 사용하는 이미지 구성을 나타냅니다. 따라서 매니페스트가 봉투이고 이미지가 봉투의 내용이라고 말할 수 있습니다. 매니페스트 다이제스트는 항상 이미지 ID와 다릅니다. 그러나 특정 매니페스트는 항상 동일한 이미지 ID를 생성해야 합니다. 매니페스트 다이제스트는 해시 체인이므로 지정된 이미지 ID에 대해 항상 동일하다고 보장할 수 없습니다. Docker는 이를 보장할 수 없지만 대부분의 경우 동일한 다이제스트를 생성합니다. 매니페스트 다이제스트의 가능한 차이는 Docker가 로컬에 gzip으로 압축된 blob을 저장하지 않기 때문입니다. 따라서 계층을 내보내면 압축되지 않은 콘텐츠는 동일하게 유지되지만 다른 다이제스트가 생성될 수 있습니다. 이미지 ID는 압축되지 않은 콘텐츠가 동일한지 확인합니다. 즉, 이미지 ID는 이제 콘텐츠 주소 지정 식별자()입니다`chainID`.이 정보를 확인하려면 Amazon ECR 퍼블릭 및 프라이빗 리포지토리에서 **docker inspect** 명령의 출력을 비교할 수 있습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html)결과는 두 이미지의 이미지 ID 다이제스트와 계층 다이제스트가 동일한지 확인합니다.ID: `f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68`계층: `d5655967c2c4e8d68f8ec7cf753218938669e6c16ac1324303c073c736a2e2a2`또한 다이제스트는 로컬에서 관리되는 객체의 바이트(로컬 파일은 컨테이너 이미지 계층의 tar) 또는 레지스트리 서버로 푸시되는 blob을 기반으로 합니다. 그러나 Blob을 레지스트리로 푸시하면 tar가 압축되고 다이제스트는 압축된 tar 파일에서 계산됩니다. 따라서 **Docker pull** 다이제스트 값의 차이는 레지스트리(Amazon ECR 프라이빗 또는 퍼블릭) 수준에서 적용되는 압축으로 인해 발생합니다.이 설명은 Docker 클라이언트 사용에 고유합니다. **nerdctl** 또는 **Finch**와 같은 다른 클라이언트에서는 푸시 및 풀 작업 중에 이미지를 자동으로 압축하지 않으므로 이러한 동작이 표시되지 않습니다. | AWS DevOps, AWS 시스템 관리자, 앱 개발자 | 

### Amazon ECR 퍼블릭 리포지토리와 프라이빗 리포지토리 간의 중복 이미지 자동 식별
<a name="automatically-identify-duplicate-images-between-ecr-public-and-private-repositories"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 리포지토리를 복제합니다. | 이 패턴의 Github 리포지토리를 로컬 폴더로 복제합니다.<pre>$git clone https://github.com/aws-samples/automated-solution-to-identify-duplicate-container-images-between-repositories</pre> | AWS 관리자, AWS DevOps | 
| CI/CD 파이프라인을 설정합니다. | GitHub 리포지토리에는 파이프라인을 설정할 CloudFormation 스택을 생성하는 `.yaml` 파일이 포함되어 있습니다 AWS CodePipeline.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html)파이프라인은 퍼블릭 리포지토리에도 존재하는 프라이빗 리포지토리의 이미지를 식별하기 위해 두 단계( 아키텍처 다이어그램에 표시된 대로 CodeCommit 및 CodeBuild)로 설정됩니다. 파이프라인은 다음 리소스로 구성됩니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | AWS 관리자, AWS DevOps | 
| CodeCommit 리포지토리를 채웁니다. | CodeCommit 리포지토리를 채우려면 다음 단계를 수행합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | AWS 관리자, AWS DevOps | 
| 정리 | 향후 요금이 발생하지 않도록 하려면 다음 단계에 따라 리소스를 삭제합니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | 관리자 | 

## 문제 해결
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-troubleshooting"></a>


| 문제 | Solution | 
| --- | --- | 
| 터미널이나 명령줄에서 CodeCommit 리포지토리에 대해 푸시하거나 풀하거나 상호 작용하려 할 때, 사용자 이름과 암호를 입력하라는 메시지가 표시되며 IAM 사용자의 Git 보안 인증 정보를 제공해야 합니다. | 이 오류의 가장 일반적인 원인은 다음과 같습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html)운영 체제 및 로컬 환경에 따라 사용자는 보안 인증 정보 관리자를 설치하거나, 운영 체제에 포함된 보안 인증 정보 관리자를 구성하거나, 보안 인증 정보 스토리지를 사용하도록 로컬 환경을 사용자 지정해야 할 수 있습니다. 예를 들어, 컴퓨터에서 macOS를 실행하는 경우에는 Keychain Access 유틸리티를 사용하여 보안 인증 정보를 저장할 수 있습니다. 컴퓨터에서 Windows를 실행하는 경우에는 Windows용 Git과 함께 설치된 Git 보안 인증 정보 관리자를 사용할 수 있습니다. 자세한 내용은 CodeCommit 설명서의 [Git 자격 증명을 사용한 HTTPS 사용자 설정](https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-gc.html) 및 Git 설명서의 [자격 증명 스토리지](https://git-scm.com/book/en/v2/Git-Tools-Credential-Storage)를 참조하세요. | 
| 이미지를 Amazon ECR 리포지토리로 푸시할 때 HTTP 403 또는 "기본 인증 자격 증명 없음" 오류가 발생합니다. | **aws ecr get-login-password** 명령을 사용하여 Docker에 성공적으로 인증한 경우에도 **docker push** 또는 **docker pull** 명령에서 이러한 오류 메시지가 발생할 수 있습니다. 알려진 원인은 다음과 같습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository.html) | 

## 관련 리소스
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-resources"></a>
+ [리포지토리 간 중복 컨테이너 이미지를 식별하는 자동화된 솔루션](https://github.com/aws-samples/automated-solution-to-identify-duplicate-container-images-between-repositories/)(GitHub 리포지토리)
+ [Amazon ECR 퍼블릭 갤러리](https://gallery.ecr.aws/)
+ [Amazon ECR의 프라이빗 이미지](https://docs.aws.amazon.com/AmazonECR/latest/userguide/images.html)(Amazon ECR 설명서)
+ [AWS::CodePipeline::Pipeline 리소스](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codepipeline-pipeline.html)(CloudFormation 문서)
+ [OCI 이미지 형식 사양](https://github.com/opencontainers/image-spec/blob/main/spec.md)

## 추가 정보
<a name="identify-duplicate-container-images-automatically-when-migrating-to-ecr-repository-additional"></a>

**Amazon ECR 퍼블릭 리포지토리의 이미지에 대한 Docker 검사 출력**

```
[
    {
        "Id": "sha256:f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68",
        "RepoTags": [
            "<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest",
            "public.ecr.aws/amazonlinux/amazonlinux:2018.03"
        ],
        "RepoDigests": [
            "<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository@sha256:52db9000073d93b9bdee6a7246a68c35a741aaade05a8f4febba0bf795cdac02",
            "public.ecr.aws/amazonlinux/amazonlinux@sha256:f972d24199508c52de7ad37a298bda35d8a1bd7df158149b381c03f6c6e363b5"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2023-02-23T06:20:11.575053226Z",
        "Container": "ec7f2fc7d2b6a382384061247ef603e7d647d65f5cd4fa397a3ccbba9278367c",
        "ContainerConfig": {
            "Hostname": "ec7f2fc7d2b6",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"/bin/bash\"]"
            ],
            "Image": "sha256:c1bced1b5a65681e1e0e52d0a6ad17aaf76606149492ca0bf519a466ecb21e51",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "DockerVersion": "20.10.17",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "Image": "sha256:c1bced1b5a65681e1e0e52d0a6ad17aaf76606149492ca0bf519a466ecb21e51",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 167436755,
        "VirtualSize": 167436755,
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/merged",
                "UpperDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/diff",
                "WorkDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:d5655967c2c4e8d68f8ec7cf753218938669e6c16ac1324303c073c736a2e2a2"
            ]
        },
        "Metadata": {
            "LastTagTime": "2023-03-02T10:28:47.142155987Z"
        }
    }
]
```

**Amazon ECR 프라이빗 리포지토리의 이미지에 대한 Docker 검사 출력**

```
[
    {
        "Id": "sha256:f7cee5e1af28ad4e147589c474d399b12d9b551ef4c3e11e02d982fce5eebc68",
        "RepoTags": [
            "<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository:latest",
            "public.ecr.aws/amazonlinux/amazonlinux:2018.03"
        ],
        "RepoDigests": [
            "<account-id>.dkr.ecr.us-east-1.amazonaws.com/test_ecr_repository@sha256:52db9000073d93b9bdee6a7246a68c35a741aaade05a8f4febba0bf795cdac02",
            "public.ecr.aws/amazonlinux/amazonlinux@sha256:f972d24199508c52de7ad37a298bda35d8a1bd7df158149b381c03f6c6e363b5"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2023-02-23T06:20:11.575053226Z",
        "Container": "ec7f2fc7d2b6a382384061247ef603e7d647d65f5cd4fa397a3ccbba9278367c",
        "ContainerConfig": {
            "Hostname": "ec7f2fc7d2b6",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"/bin/bash\"]"
            ],
            "Image": "sha256:c1bced1b5a65681e1e0e52d0a6ad17aaf76606149492ca0bf519a466ecb21e51",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "DockerVersion": "20.10.17",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "Image": "sha256:c1bced1b5a65681e1e0e52d0a6ad17aaf76606149492ca0bf519a466ecb21e51",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 167436755,
        "VirtualSize": 167436755,
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/merged",
                "UpperDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/diff",
                "WorkDir": "/var/lib/docker/overlay2/c2c2351a82b26cbdf7782507500e5adb5c2b3a2875bdbba79788a4b27cd6a913/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:d5655967c2c4e8d68f8ec7cf753218938669e6c16ac1324303c073c736a2e2a2"
            ]
        },
        "Metadata": {
            "LastTagTime": "2023-03-02T10:28:47.142155987Z"
        }
    }
]
```