를 사용한 Amazon ECR 예제 AWS CLI - AWS SDK 코드 예제

AWS Doc SDK ExamplesWord AWS SDK 리포지토리에는 더 많은 GitHub 예제가 있습니다.

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

를 사용한 Amazon ECR 예제 AWS CLI

다음 코드 예제에서는 Amazon ECR AWS Command Line Interface 와 함께를 사용하여 작업을 수행하고 일반적인 시나리오를 구현하는 방법을 보여줍니다.

작업은 대규모 프로그램에서 발췌한 코드이며 컨텍스트에 맞춰 실행해야 합니다. 작업은 개별 서비스 함수를 직접적으로 호출하는 방법을 보여주며 관련 시나리오의 컨텍스트에 맞는 작업을 볼 수 있습니다.

각 예제에는 컨텍스트에서 코드를 설정하고 실행하는 방법에 대한 지침을 찾을 수 있는 전체 소스 코드에 대한 링크가 포함되어 있습니다.

주제

작업

다음 코드 예시에서는 batch-check-layer-availability을 사용하는 방법을 보여 줍니다.

AWS CLI

계층의 가용성을 확인하려면

다음 batch-check-layer-availability 예제에서는 cluster-autoscaler리포지토리에 다이제스트가 있는 계층의 가용성sha256:6171c7451a50945f8ddd72f7732cc04d7a0d1f48138a426b2e64387fdeb834ed을 확인합니다.

aws ecr batch-check-layer-availability \ --repository-name cluster-autoscaler \ --layer-digests sha256:6171c7451a50945f8ddd72f7732cc04d7a0d1f48138a426b2e64387fdeb834ed

출력:

{ "layers": [ { "layerDigest": "sha256:6171c7451a50945f8ddd72f7732cc04d7a0d1f48138a426b2e64387fdeb834ed", "layerAvailability": "AVAILABLE", "layerSize": 2777, "mediaType": "application/vnd.docker.container.image.v1+json" } ], "failures": [] }

다음 코드 예시에서는 batch-delete-image을 사용하는 방법을 보여 줍니다.

AWS CLI

예제 1: 이미지 삭제

다음 batch-delete-image 예제에서는 계정의 기본 레지스트리precise에 지정된 리포지토리에 태그가 있는 이미지를 삭제합니다.

aws ecr batch-delete-image \ --repository-name ubuntu \ --image-ids imageTag=precise

출력:

{ "failures": [], "imageIds": [ { "imageTag": "precise", "imageDigest": "sha256:19665f1e6d1e504117a1743c0a3d3753086354a38375961f2e665416ef4b1b2f" } ] }

예제 2: 여러 이미지를 삭제하려면

다음 batch-delete-image 예제에서는 지정된 리포지토리team1에서 prod 및 로 태그가 지정된 모든 이미지를 삭제합니다.

aws ecr batch-delete-image \ --repository-name MyRepository \ --image-ids imageTag=prod imageTag=team1

출력:

{ "imageIds": [ { "imageDigest": "sha256:123456789012", "imageTag": "prod" }, { "imageDigest": "sha256:567890121234", "imageTag": "team1" } ], "failures": [] }

자세한 내용은 Amazon ECR 사용 설명서이미지 삭제를 참조하세요.

  • API 세부 정보는 AWS CLI 명령 참조BatchDeleteImage를 참조하세요.

다음 코드 예시에서는 batch-get-image을 사용하는 방법을 보여 줍니다.

AWS CLI

예제 1: 이미지 가져오기

다음 batch-get-image 예제에서는 계정의 기본 레지스트리cluster-autoscaler에서 라는 리포지토리v1.13.6에 태그가 있는 이미지를 가져옵니다.

aws ecr batch-get-image \ --repository-name cluster-autoscaler \ --image-ids imageTag=v1.13.6

출력:

{ "images": [ { "registryId": "012345678910", "repositoryName": "cluster-autoscaler", "imageId": { "imageDigest": "sha256:4a1c6567c38904384ebc64e35b7eeddd8451110c299e3368d2210066487d97e5", "imageTag": "v1.13.6" }, "imageManifest": "{\n \"schemaVersion\": 2,\n \"mediaType\": \"application/vnd.docker.distribution.manifest.v2+json\",\n \"config\": {\n \"mediaType\": \"application/vnd.docker.container.image.v1+json\",\n \"size\": 2777,\n \"digest\": \"sha256:6171c7451a50945f8ddd72f7732cc04d7a0d1f48138a426b2e64387fdeb834ed\"\n },\n \"layers\": [\n {\n \"mediaType\": \"application/vnd.docker.image.rootfs.diff.tar.gzip\",\n \"size\": 17743696,\n \"digest\": \"sha256:39fafc05754f195f134ca11ecdb1c9a691ab0848c697fffeb5a85f900caaf6e1\"\n },\n {\n \"mediaType\": \"application/vnd.docker.image.rootfs.diff.tar.gzip\",\n \"size\": 2565026,\n \"digest\": \"sha256:8c8a779d3a537b767ae1091fe6e00c2590afd16767aa6096d1b318d75494819f\"\n },\n {\n \"mediaType\": \"application/vnd.docker.image.rootfs.diff.tar.gzip\",\n \"size\": 28005981,\n \"digest\": \"sha256:c44ba47496991c9982ee493b47fd25c252caabf2b4ae7dd679c9a27b6a3c8fb7\"\n },\n {\n \"mediaType\": \"application/vnd.docker.image.rootfs.diff.tar.gzip\",\n \"size\": 775,\n \"digest\": \"sha256:e2c388b44226544363ca007be7b896bcce1baebea04da23cbd165eac30be650f\"\n }\n ]\n}" } ], "failures": [] }

예제 2: 여러 이미지를 가져오는 방법

다음 batch-get-image 예제에서는 지정된 리포지토리team1prod 및 로 태그가 지정된 모든 이미지의 세부 정보를 표시합니다.

aws ecr batch-get-image \ --repository-name MyRepository \ --image-ids imageTag=prod imageTag=team1

출력:

{ "images": [ { "registryId": "123456789012", "repositoryName": "MyRepository", "imageId": { "imageDigest": "sha256:123456789012", "imageTag": "prod" }, "imageManifest": "manifestExample1" }, { "registryId": "567890121234", "repositoryName": "MyRepository", "imageId": { "imageDigest": "sha256:123456789012", "imageTag": "team1" }, "imageManifest": "manifestExample2" } ], "failures": [] }

자세한 내용은 Amazon ECR 사용 설명서이미지를 참조하세요.

  • API 세부 정보는 AWS CLI 명령 참조BatchGetImage를 참조하세요.

다음 코드 예시에서는 complete-layer-upload을 사용하는 방법을 보여 줍니다.

AWS CLI

이미지 계층 업로드를 완료하려면

다음 complete-layer-upload 예제에서는 layer-test리포지토리에 이미지 계층 업로드를 완료합니다.

aws ecr complete-layer-upload \ --repository-name layer-test \ --upload-id 6cb64b8a-9378-0e33-2ab1-b780fab8a9e9 \ --layer-digests 6cb64b8a-9378-0e33-2ab1-b780fab8a9e9:48074e6d3a68b39aad8ccc002cdad912d4148c0f92b3729323e

출력:

{ "uploadId": "6cb64b8a-9378-0e33-2ab1-b780fab8a9e9", "layerDigest": "sha256:9a77f85878aa1906f2020a0ecdf7a7e962d57e882250acd773383224b3fe9a02", "repositoryName": "layer-test", "registryId": "130757420319" }

다음 코드 예시에서는 create-repository을 사용하는 방법을 보여 줍니다.

AWS CLI

예제 1: 리포지토리 생성

다음 create-repository 예제에서는 계정의 기본 레지스트리에서 지정된 네임스페이스 내에 리포지토리를 생성합니다.

aws ecr create-repository \ --repository-name project-a/sample-repo

출력:

{ "repository": { "registryId": "123456789012", "repositoryName": "project-a/sample-repo", "repositoryArn": "arn:aws:ecr:us-west-2:123456789012:repository/project-a/sample-repo" } }

자세한 내용은 Amazon ECR 사용 설명서리포지토리 생성을 참조하세요.

예제 2: 이미지 태그 불변성이 구성된 리포지토리 생성

다음 create-repository 예제에서는 계정의 기본 레지스트리에서 태그 불변성이 구성된 리포지토리를 생성합니다.

aws ecr create-repository \ --repository-name project-a/sample-repo \ --image-tag-mutability IMMUTABLE

출력:

{ "repository": { "registryId": "123456789012", "repositoryName": "project-a/sample-repo", "repositoryArn": "arn:aws:ecr:us-west-2:123456789012:repository/project-a/sample-repo", "imageTagMutability": "IMMUTABLE" } }

자세한 내용은 Amazon ECR 사용 설명서이미지 태그 이동성을 참조하세요.

예제 3: 스캔 구성이 구성된 리포지토리 생성

다음 create-repository 예제에서는 계정의 기본 레지스트리에서 이미지 푸시에 대한 취약성 스캔을 수행하도록 구성된 리포지토리를 생성합니다.

aws ecr create-repository \ --repository-name project-a/sample-repo \ --image-scanning-configuration scanOnPush=true

출력:

{ "repository": { "registryId": "123456789012", "repositoryName": "project-a/sample-repo", "repositoryArn": "arn:aws:ecr:us-west-2:123456789012:repository/project-a/sample-repo", "imageScanningConfiguration": { "scanOnPush": true } } }

자세한 내용은 Amazon ECR 사용 설명서이미지 스캔을 참조하세요.

  • API 세부 정보는 AWS CLI 명령 참조CreateRepository를 참조하세요.

다음 코드 예시에서는 delete-lifecycle-policy을 사용하는 방법을 보여 줍니다.

AWS CLI

리포지토리의 수명 주기 정책을 삭제하려면

다음 delete-lifecycle-policy 예제에서는 hello-world리포지토리의 수명 주기 정책을 삭제합니다.

aws ecr delete-lifecycle-policy \ --repository-name hello-world

출력:

{ "registryId": "012345678910", "repositoryName": "hello-world", "lifecyclePolicyText": "{\"rules\":[{\"rulePriority\":1,\"description\":\"Remove untagged images.\",\"selection\":{\"tagStatus\":\"untagged\",\"countType\":\"sinceImagePushed\",\"countUnit\":\"days\",\"countNumber\":10},\"action\":{\"type\":\"expire\"}}]}", "lastEvaluatedAt": 0.0 }

다음 코드 예시에서는 delete-repository-policy을 사용하는 방법을 보여 줍니다.

AWS CLI

리포지토리에 대한 리포지토리 정책을 삭제하려면

다음 delete-repository-policy 예제에서는 리포지토리에 대한 cluster-autoscaler리포지토리 정책을 삭제합니다.

aws ecr delete-repository-policy \ --repository-name cluster-autoscaler

출력:

{ "registryId": "012345678910", "repositoryName": "cluster-autoscaler", "policyText": "{\n \"Version\" : \"2008-10-17\",\n \"Statement\" : [ {\n \"Sid\" : \"allow public pull\",\n \"Effect\" : \"Allow\",\n \"Principal\" : \"*\",\n \"Action\" : [ \"ecr:BatchCheckLayerAvailability\", \"ecr:BatchGetImage\", \"ecr:GetDownloadUrlForLayer\" ]\n } ]\n}" }

다음 코드 예시에서는 delete-repository을 사용하는 방법을 보여 줍니다.

AWS CLI

리포지토리를 삭제하려면

다음 delete-repository 예제 명령에서는 계정의 기본 레지스트리에서 지정된 리포지토리를 강제 삭제합니다. 리포지토리에 이미지가 포함된 경우 --force 플래그가 필요합니다.

aws ecr delete-repository \ --repository-name ubuntu \ --force

출력:

{ "repository": { "registryId": "123456789012", "repositoryName": "ubuntu", "repositoryArn": "arn:aws:ecr:us-west-2:123456789012:repository/ubuntu" } }

자세한 내용은 Amazon ECR 사용 설명서리포지토리 삭제를 참조하세요.

  • API 세부 정보는 AWS CLI 명령 참조DeleteRepository를 참조하세요.

다음 코드 예시에서는 describe-image-scan-findings을 사용하는 방법을 보여 줍니다.

AWS CLI

이미지의 스캔 결과를 설명하려면

다음 describe-image-scan-findings 예제에서는 계정의 기본 레지스트리에 지정된 리포지토리에서 이미지 다이제스트를 사용하여 이미지에 대한 이미지 스캔 결과를 반환합니다.

aws ecr describe-image-scan-findings \ --repository-name sample-repo \ --image-id imageDigest=sha256:74b2c688c700ec95a93e478cdb959737c148df3fbf5ea706abe0318726e885e6

출력:

{ "imageScanFindings": { "findings": [ { "name": "CVE-2019-5188", "description": "A code execution vulnerability exists in the directory rehashing functionality of E2fsprogs e2fsck 1.45.4. A specially crafted ext4 directory can cause an out-of-bounds write on the stack, resulting in code execution. An attacker can corrupt a partition to trigger this vulnerability.", "uri": "http://people.ubuntu.com/~ubuntu-security/cve/CVE-2019-5188", "severity": "MEDIUM", "attributes": [ { "key": "package_version", "value": "1.44.1-1ubuntu1.1" }, { "key": "package_name", "value": "e2fsprogs" }, { "key": "CVSS2_VECTOR", "value": "AV:L/AC:L/Au:N/C:P/I:P/A:P" }, { "key": "CVSS2_SCORE", "value": "4.6" } ] } ], "imageScanCompletedAt": 1579839105.0, "vulnerabilitySourceUpdatedAt": 1579811117.0, "findingSeverityCounts": { "MEDIUM": 1 } }, "registryId": "123456789012", "repositoryName": "sample-repo", "imageId": { "imageDigest": "sha256:74b2c688c700ec95a93e478cdb959737c148df3fbf5ea706abe0318726e885e6" }, "imageScanStatus": { "status": "COMPLETE", "description": "The scan was completed successfully." } }

자세한 내용은 Amazon ECR 사용 설명서이미지 스캔을 참조하세요.

다음 코드 예시에서는 describe-images을 사용하는 방법을 보여 줍니다.

AWS CLI

리포지토리의 이미지를 설명하려면

다음 describe-images 예제에서는 cluster-autoscaler 리포지토리에서 v1.13.6 태그가 있는 이미지에 대한 세부 정보를 표시합니다.

aws ecr describe-images \ --repository-name cluster-autoscaler \ --image-ids imageTag=v1.13.6

출력:

{ "imageDetails": [ { "registryId": "012345678910", "repositoryName": "cluster-autoscaler", "imageDigest": "sha256:4a1c6567c38904384ebc64e35b7eeddd8451110c299e3368d2210066487d97e5", "imageTags": [ "v1.13.6" ], "imageSizeInBytes": 48318255, "imagePushedAt": 1565128275.0 } ] }
  • API 세부 정보는 AWS CLI 명령 참조DescribeImages를 참조하세요.

다음 코드 예시에서는 describe-repositories을 사용하는 방법을 보여 줍니다.

AWS CLI

레지스트리의 리포지토리를 설명하는 방법

이 예시에서는 계정의 기본 레지스트리에 있는 리포지토리를 설명합니다.

명령:

aws ecr describe-repositories

출력:

{ "repositories": [ { "registryId": "012345678910", "repositoryName": "ubuntu", "repositoryArn": "arn:aws:ecr:us-west-2:012345678910:repository/ubuntu" }, { "registryId": "012345678910", "repositoryName": "test", "repositoryArn": "arn:aws:ecr:us-west-2:012345678910:repository/test" } ] }

다음 코드 예시에서는 get-authorization-token을 사용하는 방법을 보여 줍니다.

AWS CLI

기본 레지스트리에 대한 권한 부여 토큰을 가져오려면

다음 get-authorization-token 예제 명령은 기본 레지스트리에 대한 권한 부여 토큰을 가져옵니다.

aws ecr get-authorization-token

출력:

{ "authorizationData": [ { "authorizationToken": "QVdTOkN...", "expiresAt": 1448875853.241, "proxyEndpoint": "https://123456789012.dkr.ecr.us-west-2.amazonaws.com" } ] }

다음 코드 예시에서는 get-download-url-for-layer을 사용하는 방법을 보여 줍니다.

AWS CLI

계층의 다운로드 URL를 가져오려면

다음 get-download-url-for-layer 예제에서는 cluster-autoscaler리포지토리에 다이제스트가 있는 계층URL의 다운로드 Wordsha256:6171c7451a50945f8ddd72f7732cc04d7a0d1f48138a426b2e64387fdeb834ed를 표시합니다.

aws ecr get-download-url-for-layer \ --repository-name cluster-autoscaler \ --layer-digest sha256:6171c7451a50945f8ddd72f7732cc04d7a0d1f48138a426b2e64387fdeb834ed

출력:

{ "downloadUrl": "https://prod-us-west-2-starport-layer-bucket.s3.us-west-2.amazonaws.com/e501-012345678910-9cb60dc0-7284-5643-3987-da6dac0465f0/04620aac-66a5-4167-8232-55ee7ef6d565?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20190814T220617Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Credential=AKIA32P3D2JDNMVAJLGF%2F20190814%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Signature=9161345894947a1672467a0da7a1550f2f7157318312fe4941b59976239c3337", "layerDigest": "sha256:6171c7451a50945f8ddd72f7732cc04d7a0d1f48138a426b2e64387fdeb834ed" }

다음 코드 예시에서는 get-lifecycle-policy-preview을 사용하는 방법을 보여 줍니다.

AWS CLI

수명 주기 정책 미리 보기에 대한 세부 정보를 검색하려면

다음 get-lifecycle-policy-preview 예제에서는 계정의 기본 레지스트리에 지정된 리포지토리에 대한 수명 주기 정책 미리 보기 결과를 검색합니다.

명령:

aws ecr get-lifecycle-policy-preview \ --repository-name "project-a/amazon-ecs-sample"

출력:

{ "registryId": "012345678910", "repositoryName": "project-a/amazon-ecs-sample", "lifecyclePolicyText": "{\n \"rules\": [\n {\n \"rulePriority\": 1,\n \"description\": \"Expire images older than 14 days\",\n \"selection\": {\n \"tagStatus\": \"untagged\",\n \"countType\": \"sinceImagePushed\",\n \"countUnit\": \"days\",\n \"countNumber\": 14\n },\n \"action\": {\n \"type\": \"expire\"\n }\n }\n ]\n}\n", "status": "COMPLETE", "previewResults": [], "summary": { "expiringImageTotalCount": 0 } }

자세한 내용은 Amazon ECR 사용 설명서수명 주기 정책을 참조하세요.

다음 코드 예시에서는 get-lifecycle-policy을 사용하는 방법을 보여 줍니다.

AWS CLI

수명 주기 정책을 검색하려면

다음 get-lifecycle-policy 예제에서는 계정의 기본 레지스트리에 지정된 리포지토리의 수명 주기 정책에 대한 세부 정보를 표시합니다.

aws ecr get-lifecycle-policy \ --repository-name "project-a/amazon-ecs-sample"

출력:

{ "registryId": "123456789012", "repositoryName": "project-a/amazon-ecs-sample", "lifecyclePolicyText": "{\"rules\":[{\"rulePriority\":1,\"description\":\"Expire images older than 14 days\",\"selection\":{\"tagStatus\":\"untagged\",\"countType\":\"sinceImagePushed\",\"countUnit\":\"days\",\"countNumber\":14},\"action\":{\"type\":\"expire\"}}]}", "lastEvaluatedAt": 1504295007.0 }

자세한 내용은 Amazon ECR 사용 설명서수명 주기 정책을 참조하세요.

다음 코드 예시에서는 get-login-password을 사용하는 방법을 보여 줍니다.

AWS CLI

레지스트리에 인증할 암호를 검색하려면

다음은 IAM 보안 주체가 액세스할 수 있는 Amazon ECR 레지스트리에 인증하는 데 선택한 컨테이너 클라이언트와 함께 사용할 수 있는 암호를 get-login-password 표시합니다.

aws ecr get-login-password

출력:

<password>

Docker CLI와 함께 사용하려면 get-login-password 명령의 출력을 docker login 명령에 파이프로 연결합니다. 암호를 검색할 때 Amazon ECR 레지스트리가 있는 리전과 동일한 리전을 지정해야 합니다.

aws ecr get-login-password \ --region <region> \ | docker login \ --username AWS \ --password-stdin <aws_account_id>.dkr.ecr.<region>.amazonaws.com

자세한 내용은 Amazon ECR 사용 설명서레지스트리 인증을 참조하세요.

  • API 세부 정보는 AWS CLI 명령 참조GetLoginPassword를 참조하세요.

다음 코드 예시에서는 get-login을 사용하는 방법을 보여 줍니다.

AWS CLI

기본 레지스트리에 대한 Docker 로그인 명령을 검색하려면

이 예제에서는 기본 Amazon ECR 레지스트리에 로그인하는 데 사용할 수 있는 명령을 인쇄합니다.

명령:

aws ecr get-login

출력:

docker login -u AWS -p <password> -e none https://<aws_account_id>.dkr.ecr.<region>.amazonaws.com

다른 계정의 레지스트리에 로그인하려면

이 예제에서는 다른 계정과 연결된 Amazon ECR 레지스트리에 로그인하는 데 사용할 수 있는 명령을 하나 이상 인쇄합니다.

명령:

aws ecr get-login --registry-ids 012345678910 023456789012

출력:

docker login -u <username> -p <token-1> -e none <endpoint-1> docker login -u <username> -p <token-2> -e none <endpoint-2>
  • API 세부 정보는 AWS CLI 명령 참조GetLogin를 참조하세요.

다음 코드 예시에서는 get-repository-policy을 사용하는 방법을 보여 줍니다.

AWS CLI

리포지토리에 대한 리포지토리 정책을 검색하려면

다음 get-repository-policy 예제에서는 cluster-autoscaler 리포지토리에 대한 리포지토리 정책의 세부 정보를 표시합니다.

aws ecr get-repository-policy \ --repository-name cluster-autoscaler

출력:

{ "registryId": "012345678910", "repositoryName": "cluster-autoscaler", "policyText": "{\n \"Version\" : \"2008-10-17\",\n \"Statement\" : [ {\n \"Sid\" : \"allow public pull\",\n \"Effect\" : \"Allow\",\n \"Principal\" : \"*\",\n \"Action\" : [ \"ecr:BatchCheckLayerAvailability\", \"ecr:BatchGetImage\", \"ecr:GetDownloadUrlForLayer\" ]\n } ]\n}" }

다음 코드 예시에서는 initiate-layer-upload을 사용하는 방법을 보여 줍니다.

AWS CLI

이미지 계층 업로드를 시작하려면

다음 initiate-layer-upload 예제에서는 layer-test리포지토리에 이미지 계층 업로드를 시작합니다.

aws ecr initiate-layer-upload \ --repository-name layer-test

출력:

{ "partSize": 10485760, "uploadId": "6cb64b8a-9378-0e33-2ab1-b780fab8a9e9" }

다음 코드 예시에서는 list-images을 사용하는 방법을 보여 줍니다.

AWS CLI

리포지토리의 이미지를 나열하는 방법

다음 list-images 예시에서는 cluster-autoscaler 리포지토리의 이미지 목록을 표시합니다.

aws ecr list-images \ --repository-name cluster-autoscaler

출력:

{ "imageIds": [ { "imageDigest": "sha256:99c6fb4377e9a420a1eb3b410a951c9f464eff3b7dbc76c65e434e39b94b6570", "imageTag": "v1.13.8" }, { "imageDigest": "sha256:99c6fb4377e9a420a1eb3b410a951c9f464eff3b7dbc76c65e434e39b94b6570", "imageTag": "v1.13.7" }, { "imageDigest": "sha256:4a1c6567c38904384ebc64e35b7eeddd8451110c299e3368d2210066487d97e5", "imageTag": "v1.13.6" } ] }
  • API 세부 정보는 AWS CLI 명령 참조ListImages를 참조하세요.

다음 코드 예시에서는 list-tags-for-resource을 사용하는 방법을 보여 줍니다.

AWS CLI

리포지토리 태그를 나열하려면

다음 list-tags-for-resource 예제에서는 hello-world리포지토리와 연결된 태그 목록을 표시합니다.

aws ecr list-tags-for-resource \ --resource-arn arn:aws:ecr:us-west-2:012345678910:repository/hello-world

출력:

{ "tags": [ { "Key": "Stage", "Value": "Integ" } ] }

다음 코드 예시에서는 put-image-scanning-configuration을 사용하는 방법을 보여 줍니다.

AWS CLI

리포지토리의 이미지 스캔 구성을 업데이트하려면

다음 put-image-scanning-configuration 예제에서는 지정된 리포지토리의 이미지 스캔 구성을 업데이트합니다.

aws ecr put-image-scanning-configuration \ --repository-name sample-repo \ --image-scanning-configuration scanOnPush=true

출력:

{ "registryId": "012345678910", "repositoryName": "sample-repo", "imageScanningConfiguration": { "scanOnPush": true } }

자세한 내용은 Amazon ECR 사용 설명서이미지 스캔을 참조하세요.

다음 코드 예시에서는 put-image-tag-mutability을 사용하는 방법을 보여 줍니다.

AWS CLI

리포지토리의 이미지 태그 변경 가능성 설정을 업데이트하려면

다음 put-image-tag-mutability 예제에서는 태그 불변성을 위해 지정된 리포지토리를 구성합니다. 이렇게 하면 리포지토리 내의 모든 이미지 태그가 덮어쓰이지 않습니다.

aws ecr put-image-tag-mutability \ --repository-name hello-repository \ --image-tag-mutability IMMUTABLE

출력:

{ "registryId": "012345678910", "repositoryName": "sample-repo", "imageTagMutability": "IMMUTABLE" }

자세한 내용은 Amazon ECR 사용 설명서이미지 태그 이동성을 참조하세요.

다음 코드 예시에서는 put-image을 사용하는 방법을 보여 줍니다.

AWS CLI

매니페스트를 사용하여 이미지에 다시 태그를 지정하려면

다음 put-image 예제에서는 기존 이미지 매니페스트를 사용하여 hello-world리포지토리에 새 태그를 생성합니다.

aws ecr put-image \ --repository-name hello-world \ --image-tag 2019.08 \ --image-manifest file://hello-world.manifest.json

hello-world.manifest.json의 콘텐츠:

{ "schemaVersion": 2, "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "config": { "mediaType": "application/vnd.docker.container.image.v1+json", "size": 5695, "digest": "sha256:cea5fe7701b7db3dd1c372f3cea6f43cdda444fcc488f530829145e426d8b980" }, "layers": [ { "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", "size": 39096921, "digest": "sha256:d8868e50ac4c7104d2200d42f432b661b2da8c1e417ccfae217e6a1e04bb9295" }, { "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", "size": 57938, "digest": "sha256:83251ac64627fc331584f6c498b3aba5badc01574e2c70b2499af3af16630eed" }, { "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", "size": 423, "digest": "sha256:589bba2f1b36ae56f0152c246e2541c5aa604b058febfcf2be32e9a304fec610" }, { "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", "size": 680, "digest": "sha256:d62ecaceda3964b735cdd2af613d6bb136a52c1da0838b2ff4b4dab4212bcb1c" }, { "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", "size": 162, "digest": "sha256:6d93b41cfc6bf0d2522b7cf61588de4cd045065b36c52bd3aec2ba0622b2b22b" }, { "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", "size": 28268840, "digest": "sha256:6986b4d4c07932c680b3587f2eac8b0e013568c003cc23b04044628a5c5e599f" }, { "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", "size": 35369152, "digest": "sha256:8c5ec60f10102dc8da0649d866c7c2f706e459d0bdc25c83ad2de86f4996c276" }, { "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", "size": 155, "digest": "sha256:cde50b1c594539c5f67cbede9aef95c9ae321ccfb857f7b251b45b84198adc85" }, { "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", "size": 28737, "digest": "sha256:2e102807ab72a73fc9abf53e8c50e421bdc337a0a8afcb242176edeec65977e4" }, { "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", "size": 190, "digest": "sha256:fc379bbd5ed37808772bef016553a297356c59b8f134659e6ee4ecb563c2f5a7" }, { "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip", "size": 28748, "digest": "sha256:021db240dfccf5a1aff19507d17c0177e5888e518acf295b52204b1825e8b7ee" } ] }

출력:

{ "image": { "registryId": "130757420319", "repositoryName": "hello-world", "imageId": { "imageDigest": "sha256:8ece96b74f87652876199d83bd107d0435a196133af383ac54cb82b6cc5283ae", "imageTag": "2019.08" }, "imageManifest": "{\n \"schemaVersion\": 2,\n \"mediaType\": \"application/vnd.docker.distribution.manifest.v2+json\",\n \"config\": {\n \"mediaType\": \"application/vnd.docker.container.image.v1+json\",\n \"size\": 5695,\n \"digest\": \"sha256:cea5fe7701b7db3dd1c372f3cea6f43cdda444fcc488f530829145e426d8b980\"\n },\n \"layers\": [\n {\n \"mediaType\": \"application/vnd.docker.image.rootfs.diff.tar.gzip\",\n \"size\": 39096921,\n \"digest\": \"sha256:d8868e50ac4c7104d2200d42f432b661b2da8c1e417ccfae217e6a1e04bb9295\"\n },\n {\n \"mediaType\": \"application/vnd.docker.image.rootfs.diff.tar.gzip\",\n \"size\": 57938,\n \"digest\": \"sha256:83251ac64627fc331584f6c498b3aba5badc01574e2c70b2499af3af16630eed\"\n },\n {\n \"mediaType\": \"application/vnd.docker.image.rootfs.diff.tar.gzip\",\n \"size\": 423,\n \"digest\": \"sha256:589bba2f1b36ae56f0152c246e2541c5aa604b058febfcf2be32e9a304fec610\"\n },\n {\n \"mediaType\": \"application/vnd.docker.image.rootfs.diff.tar.gzip\",\n \"size\": 680,\n \"digest\": \"sha256:d62ecaceda3964b735cdd2af613d6bb136a52c1da0838b2ff4b4dab4212bcb1c\"\n },\n {\n \"mediaType\": \"application/vnd.docker.image.rootfs.diff.tar.gzip\",\n \"size\": 162,\n \"digest\": \"sha256:6d93b41cfc6bf0d2522b7cf61588de4cd045065b36c52bd3aec2ba0622b2b22b\"\n },\n {\n \"mediaType\": \"application/vnd.docker.image.rootfs.diff.tar.gzip\",\n \"size\": 28268840,\n \"digest\": \"sha256:6986b4d4c07932c680b3587f2eac8b0e013568c003cc23b04044628a5c5e599f\"\n },\n {\n \"mediaType\": \"application/vnd.docker.image.rootfs.diff.tar.gzip\",\n \"size\": 35369152,\n \"digest\": \"sha256:8c5ec60f10102dc8da0649d866c7c2f706e459d0bdc25c83ad2de86f4996c276\"\n },\n {\n \"mediaType\": \"application/vnd.docker.image.rootfs.diff.tar.gzip\",\n \"size\": 155,\n \"digest\": \"sha256:cde50b1c594539c5f67cbede9aef95c9ae321ccfb857f7b251b45b84198adc85\"\n },\n {\n \"mediaType\": \"application/vnd.docker.image.rootfs.diff.tar.gzip\",\n \"size\": 28737,\n \"digest\": \"sha256:2e102807ab72a73fc9abf53e8c50e421bdc337a0a8afcb242176edeec65977e4\"\n },\n {\n \"mediaType\": \"application/vnd.docker.image.rootfs.diff.tar.gzip\",\n \"size\": 190,\n \"digest\": \"sha256:fc379bbd5ed37808772bef016553a297356c59b8f134659e6ee4ecb563c2f5a7\"\n },\n {\n \"mediaType\": \"application/vnd.docker.image.rootfs.diff.tar.gzip\",\n \"size\": 28748,\n \"digest\": \"sha256:021db240dfccf5a1aff19507d17c0177e5888e518acf295b52204b1825e8b7ee\"\n }\n ]\n}\n" } }
  • API 세부 정보는 AWS CLI 명령 참조PutImage를 참조하세요.

다음 코드 예시에서는 put-lifecycle-policy을 사용하는 방법을 보여 줍니다.

AWS CLI

수명 주기 정책을 생성하려면

다음 put-lifecycle-policy 예제에서는 계정의 기본 레지스트리에 지정된 리포지토리에 대한 수명 주기 정책을 생성합니다.

aws ecr put-lifecycle-policy \ --repository-name "project-a/amazon-ecs-sample" \ --lifecycle-policy-text "file://policy.json"

policy.json의 콘텐츠:

{ "rules": [ { "rulePriority": 1, "description": "Expire images older than 14 days", "selection": { "tagStatus": "untagged", "countType": "sinceImagePushed", "countUnit": "days", "countNumber": 14 }, "action": { "type": "expire" } } ] }

출력:

{ "registryId": "<aws_account_id>", "repositoryName": "project-a/amazon-ecs-sample", "lifecyclePolicyText": "{\"rules\":[{\"rulePriority\":1,\"description\":\"Expire images older than 14 days\",\"selection\":{\"tagStatus\":\"untagged\",\"countType\":\"sinceImagePushed\",\"countUnit\":\"days\",\"countNumber\":14},\"action\":{\"type\":\"expire\"}}]}" }

자세한 내용은 Amazon ECR 사용 설명서수명 주기 정책을 참조하세요.

다음 코드 예시에서는 set-repository-policy을 사용하는 방법을 보여 줍니다.

AWS CLI

리포지토리에 대한 리포지토리 정책을 설정하려면

다음 set-repository-policy 예제에서는 파일에 포함된 리포지토리 정책을 cluster-autoscaler 리포지토리에 연결합니다.

aws ecr set-repository-policy \ --repository-name cluster-autoscaler \ --policy-text file://my-policy.json

my-policy.json의 콘텐츠:

{ "Version" : "2008-10-17", "Statement" : [ { "Sid" : "allow public pull", "Effect" : "Allow", "Principal" : "*", "Action" : [ "ecr:BatchCheckLayerAvailability", "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ] } ] }

출력:

{ "registryId": "012345678910", "repositoryName": "cluster-autoscaler", "policyText": "{\n \"Version\" : \"2008-10-17\",\n \"Statement\" : [ {\n \"Sid\" : \"allow public pull\",\n \"Effect\" : \"Allow\",\n \"Principal\" : \"*\",\n \"Action\" : [ \"ecr:BatchCheckLayerAvailability\", \"ecr:BatchGetImage\", \"ecr:GetDownloadUrlForLayer\" ]\n } ]\n}" }

다음 코드 예시에서는 start-image-scan을 사용하는 방법을 보여 줍니다.

AWS CLI

이미지 취약성 스캔을 시작하려면

다음 start-image-scan 예제에서는 지정된 리포지토리의 이미지 다이제스트에 의해 지정된 및에 대한 이미지 스캔을 시작합니다.

aws ecr start-image-scan \ --repository-name sample-repo \ --image-id imageDigest=sha256:74b2c688c700ec95a93e478cdb959737c148df3fbf5ea706abe0318726e885e6

출력:

{ "registryId": "012345678910", "repositoryName": "sample-repo", "imageId": { "imageDigest": "sha256:74b2c688c700ec95a93e478cdb959737c148df3fbf5ea706abe0318726e885e6" }, "imageScanStatus": { "status": "IN_PROGRESS" } }

자세한 내용은 Amazon ECR 사용 설명서이미지 스캔을 참조하세요.

  • API 세부 정보는 AWS CLI 명령 참조StartImageScan를 참조하세요.

다음 코드 예시에서는 start-lifecycle-policy-preview을 사용하는 방법을 보여 줍니다.

AWS CLI

수명 주기 정책 미리 보기를 생성하려면

다음 start-lifecycle-policy-preview 예제에서는 지정된 리포지토리에 대해 JSON 파일로 정의된 수명 주기 정책 미리 보기를 생성합니다.

aws ecr start-lifecycle-policy-preview \ --repository-name "project-a/amazon-ecs-sample" \ --lifecycle-policy-text "file://policy.json"

policy.json의 콘텐츠:

{ "rules": [ { "rulePriority": 1, "description": "Expire images older than 14 days", "selection": { "tagStatus": "untagged", "countType": "sinceImagePushed", "countUnit": "days", "countNumber": 14 }, "action": { "type": "expire" } } ] }

출력:

{ "registryId": "012345678910", "repositoryName": "project-a/amazon-ecs-sample", "lifecyclePolicyText": "{\n \"rules\": [\n {\n \"rulePriority\": 1,\n \"description\": \"Expire images older than 14 days\",\n \"selection\": {\n \"tagStatus\": \"untagged\",\n \"countType\": \"sinceImagePushed\",\n \"countUnit\": \"days\",\n \"countNumber\": 14\n },\n \"action\": {\n \"type\": \"expire\"\n }\n }\n ]\n}\n", "status": "IN_PROGRESS" }

다음 코드 예시에서는 tag-resource을 사용하는 방법을 보여 줍니다.

AWS CLI

리포지토리에 태그를 지정하려면

다음 tag-resource 예제에서는 hello-world리포지토리Integ에 키Stage와 값이 있는 태그를 설정합니다.

aws ecr tag-resource \ --resource-arn arn:aws:ecr:us-west-2:012345678910:repository/hello-world \ --tags Key=Stage,Value=Integ

이 명령은 출력을 생성하지 않습니다.

  • API 세부 정보는 AWS CLI 명령 참조TagResource를 참조하세요.

다음 코드 예시에서는 untag-resource을 사용하는 방법을 보여 줍니다.

AWS CLI

리포지토리의 태그를 해제하려면

다음 untag-resource 예제에서는 hello-world리포지토리Stage에서 키가 있는 태그를 제거합니다.

aws ecr untag-resource \ --resource-arn arn:aws:ecr:us-west-2:012345678910:repository/hello-world \ --tag-keys Stage

이 명령은 출력을 생성하지 않습니다.

  • API 세부 정보는 AWS CLI 명령 참조UntagResource를 참조하세요.

다음 코드 예시에서는 upload-layer-part을 사용하는 방법을 보여 줍니다.

AWS CLI

계층 부분을 업로드하려면

다음은 이미지 계층 부분을 layer-test리포지토리에 upload-layer-part 업로드합니다.

aws ecr upload-layer-part \ --repository-name layer-test \ --upload-id 6cb64b8a-9378-0e33-2ab1-b780fab8a9e9 \ --part-first-byte 0 \ --part-last-byte 8323314 \ --layer-part-blob file:///var/lib/docker/image/overlay2/layerdb/sha256/ff986b10a018b48074e6d3a68b39aad8ccc002cdad912d4148c0f92b3729323e/layer.b64

출력:

{ "uploadId": "6cb64b8a-9378-0e33-2ab1-b780fab8a9e9", "registryId": "012345678910", "lastByteReceived": 8323314, "repositoryName": "layer-test" }
  • API 세부 정보는 AWS CLI 명령 참조UploadLayerPart를 참조하세요.