에서 Amazon ECR 서비스 작업 AWS Cloud9 - AWS Cloud9

AWS Cloud9 는 더 이상 신규 고객이 사용할 수 없습니다. AWS Cloud9 의 기존 고객은 정상적으로 서비스를 계속 이용할 수 있습니다. 자세히 알아보기

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

에서 Amazon ECR 서비스 작업 AWS Cloud9

의 AWS 탐색기에서 Amazon Elastic Container Registry(AmazonECR) 서비스에 직접 액세스할 수 있습니다 AWS Cloud9 IDE. AmazonECR을 사용하여 프로그램 이미지를 Amazon ECR리포지토리로 푸시할 수 있습니다. 시작하려면 다음 단계를 따릅니다.

  1. 이미지를 빌드하는 데 필요한 정보가 포함된 Dockerfile을 생성합니다.

  2. 해당 Dockerfile에서 이미지를 빌드하고 처리할 이미지에 태그를 지정합니다.

  3. Amazon ECR 인스턴스 내부에 있는 리포지토리를 생성합니다.

  4. 리포지토리에 태그가 지정된 이미지를 푸시합니다.

사전 조건

AWS Toolkit for 의 Amazon ECR 기능을 사용하려면 먼저 이러한 사전 조건을 AWS Cloud9충족해야 합니다. 사전 조건 이러한 사전 조건은 AWS Cloud9 Amazon EC2 환경용 AWS Cloud9 IDE에 사전 설치되어 있으며 Amazon 에 액세스하는 데 필요합니다ECR.

1. Dockerfile 생성

Docker는 Dockerfile이라는 파일을 사용하여 원격 리포지토리에 푸시하고 저장할 수 있는 이미지를 정의합니다. ECR 리포지토리에 이미지를 업로드하기 전에 Dockerfile을 생성한 다음 해당 Dockerfile에서 이미지를 빌드합니다.

Dockerfile 생성
  1. Dockerfile을 저장할 디렉터리로 이동하려면 내 왼쪽 탐색 모음에서 트리 토글 옵션을 선택합니다 AWS Cloud9 IDE.

  2. Dockerfile이라는 새 파일을 생성합니다.

    참고

    AWS Cloud9 IDE 파일 유형 또는 파일 확장명을 선택하라는 메시지가 표시될 수 있습니다. 이 경우 일반 텍스트 를 선택합니다. AWS Cloud9 IDE 에는 “dockerfile” 확장자가 있습니다. 그러나 사용하지 않는 것이 좋습니다. 이 확장자가 특정 버전의 Docker 또는 기타 관련 애플리케이션과 충돌을 일으킬 수 있기 때문입니다.

를 사용하여 Dockerfile 편집 AWS Cloud9 IDE

Dockerfile에 파일 확장자가 있는 경우 파일에 대한 컨텍스트(마우스 오른쪽 버튼 클릭) 메뉴를 열고 해당 파일 확장자를 제거합니다. 확장자가 있는 Dockerfile은 특정 버전의 Docker 또는 기타 관련 애플리케이션과 충돌을 일으킬 수 있기 때문입니다.

Dockerfile에서 파일 확장자를 제거한 후 다음을 수행합니다.

  1. 에서 빈 Dockerfile을 직접 엽니다 AWS Cloud9 IDE.

  2. 다음 예제의 내용을 Dockerfile에 복사합니다.

    예 Dockerfile 이미지 템플릿
    FROM ubuntu:22.04 # Install dependencies RUN apt-get update && \ apt-get -y install apache2 # Install apache and write hello world message RUN echo 'Hello World!' > /var/www/html/index.html # Configure apache RUN echo '. /etc/apache2/envvars' > /root/run_apache.sh && \ echo 'mkdir -p /var/run/apache2' >> /root/run_apache.sh && \ echo 'mkdir -p /var/lock/apache2' >> /root/run_apache.sh && \ echo '/usr/sbin/apache2 -D FOREGROUND' >> /root/run_apache.sh && \ chmod 755 /root/run_apache.sh EXPOSE 80 CMD /root/run_apache.sh

    이것은 Ubuntu 22.04 이미지를 사용하는 Dockerfile입니다. RUN 지침은 패키지 캐시를 업데이트합니다. 웹 서버용 소프트웨어 패키지를 설치하고 'Hello World!'를 웹 서버의 문서 루트에 작성합니다. EXPOSE 명령은 컨테이너의 포트 80을 노출하고 CMD 명령은 웹 서버를 시작합니다.

  3. Dockerfile을 저장합니다.

2. Dockerfile에서 이미지 빌드

생성한 Dockerfile에는 프로그램의 이미지를 빌드하는 데 필요한 정보가 포함되어 있습니다. 해당 이미지를 Amazon ECR 인스턴스로 푸시하기 전에 먼저 이미지를 빌드합니다.

Dockerfile에서 이미지 빌드
  1. Dockerfile이 포함된 디렉터리로 이동하려면 Docker CLI 또는 Docker 인스턴스와 CLI 통합된 를 사용합니다.

  2. Dockerfile에 정의된 이미지를 빌드하려면 Dockerfile과 동일한 디렉터리에서 Docker build 명령을 실행합니다.

    docker build -t hello-world .
  3. 이미지가 올바르게 생성되었는지 확인하려면 Docker images 명령을 실행합니다.

    docker images --filter reference=hello-world

    출력값은 다음과 같습니다.

    REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest e9ffedc8c286 4 minutes ago 241MB
  4. Ubuntu 22.04를 기반으로 새로 빌드된 이미지를 실행하려면 echo 명령을 사용합니다.

    참고

    이 단계는 이미지를 생성하거나 푸시하는 데 필요하지 않습니다. 그러나 프로그램 이미지가 실행되면 어떻게 작동하는지 확인할 수 있습니다.

    FROM ubuntu:22.04 CMD ["echo", "Hello from Docker in Cloud9"]

    그런 다음 Dockerfile을 실행하고 빌드합니다. Dockerfile과 동일한 디렉터리에서 이 명령을 실행해야 합니다.

    docker build -t hello-world . docker run --rm hello-world

    출력값은 다음과 같습니다.

    Hello from Docker in Cloud9

    Docker run 명령에 대한 자세한 내용은 Docker 웹 사이트에서 Docker run reference(Docker 실행 참조)를 참조하세요.

3. 새 리포지토리 생성

Amazon ECR 인스턴스에 이미지를 업로드하려면 이미지를 저장할 수 있는 새 리포지토리를 생성합니다.

새 Amazon ECR리포지토리 생성
  1. 탐색 모음에서 AWS Cloud9 IDE AWS 도구 키트 아이콘 을 선택합니다.

  2. AWS Explorer 메뉴를 확장합니다.

  3. 와 AWS 리전 연결된 기본값을 찾습니다 AWS 계정. 그런 다음 를 선택하여 를 통해 제공되는 서비스 목록을 확인합니다 AWS Cloud9 IDE.

  4. 새 리포지토리 생성 프로세스를 시작하려면 ECR 옵션의 컨텍스트(마우스 오른쪽 버튼 클릭) 메뉴를 엽니다. 그런 다음 Create Repository(리포지토리 생성)를 선택합니다.

  5. 프롬프트의 메시지를 따라 프로세스를 완료합니다.

  6. 프로세스가 완료되면 AWS 탐색기 메뉴의 ECR 섹션에서 새 리포지토리에 액세스할 수 있습니다.

4. 이미지 푸시, 가져오기, 삭제

Dockerfile에서 이미지를 만들고 리포지토리를 생성한 후 이미지를 Amazon 리포지ECR토리로 푸시할 수 있습니다. 또한 Docker 및 와 함께 AWS Explorer를 사용하여 다음을 수행할 AWS CLI수 있습니다.

  • 리포지토리에서 이미지를 가져옵니다.

  • 리포지토리에 저장된 이미지를 삭제합니다.

  • 리포지토리를 삭제합니다.

기본 레지스트리에 대해 Docker 인증

Amazon ECR 인스턴스와 Docker 인스턴스 간에 데이터를 교환하려면 인증이 필요합니다. 레지스트리에 대해 Docker를 인증하려면 다음을 수행합니다.

  1. 내에서 터미널을 엽니다 AWS Cloud9 IDE.

  2. get-login-password 메서드를 사용하여 프라이빗 ECR 레지스트리에 인증하고 리전 및 AWS 계정 ID를 입력합니다.

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

    앞의 명령에서 regionAWS_account_id를 AWS 계정과 관련된 정보로 바꿉니다. 유효한 region 값은 us-east-1입니다.

이미지 태그 지정 및 리포지토리에 푸시

인스턴스로 Docker를 인증한 후 이미지를 리포지토리로 AWS푸시합니다.

  1. docker images 명령을 사용하여 로컬에 저장한 이미지를 보고 태그를 지정할 이미지를 식별합니다.

    docker images

    출력값은 다음과 같습니다.

    REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest e9ffedc8c286 4 minutes ago 241MB
  2. Docker tag 명령을 사용하여 이미지에 태그를 지정합니다.

    docker tag hello-world:latest AWS_account_id.dkr.ecr.region.amazonaws.com/hello-world:latest
  3. Docker push 명령을 사용하여 태그가 지정된 이미지를 리포지토리에 푸시합니다.

    중요

    로컬 리포지토리의 이름이 AWS Amazon EC2리포지토리와 동일한지 확인합니다. 이 예에서는 두 리포지토리의 이름이 모두 hello-world여야 합니다. Docker를 사용하여 이미지를 푸시하는 방법에 대한 자세한 내용은 도커 이미지 푸시를 참조하세요.

    docker push AWS_account_id.dkr.ecr.region.amazonaws.com/hello-world:latest

    출력값은 다음과 같습니다.

    The push refers to a repository [AWS_account_id.dkr.ecr.region.amazonaws.com/hello-world] (len: 1) e9ae3c220b23: Pushed a6785352b25c: Pushed 0998bf8fb9e9: Pushed 0a85502c06c9: Pushed latest: digest: sha256:215d7e4121b30157d8839e81c4e0912606fca105775bb0636b95aed25f52c89b size: 6774

태그가 지정된 이미지가 리포지토리에 성공적으로 업로드되면 AWS 탐색기 탭에서 탐색기 새로 고침을 선택하여 AWS 툴킷을 새로 고칩니다. 그러면 의 AWS 탐색기 메뉴에 표시됩니다 AWS Cloud9 IDE.

Amazon에서 이미지 가져오기 ECR
  • Docker tag 명령의 로컬 인스턴스로 이미지를 가져올 수 있습니다.

    docker pull AWS_account_id.dkr.ecr.region.amazonaws.com/hello-world:latest

    출력값은 다음과 같습니다.

    azonaws.com/hello-world:latest latest: Pulling from hello-world Digest: sha256:e02c521fd65eae4ef1acb746883df48de85d55fc85a4172a09a124b11b339f5e Status: Image is up to date for 922327013870.dkr.ecr.us-west-2.amazonaws.com/hello-world.latest
Amazon ECR리포지토리에서 이미지 삭제

에서 이미지를 삭제하는 방법에는 두 가지가 있습니다 AWS Cloud9 IDE. 첫 번째 방법은 AWS 탐색기를 사용하는 것입니다.

  1. AWS 탐색기에서 ECR 메뉴를 확장합니다.

  2. 이미지를 삭제할 리포지토리를 확장합니다.

  3. 삭제할 이미지와 연결된 이미지 태그의 컨텍스트(마우스 오른쪽 버튼 클릭) 메뉴를 엽니다.

  4. 해당 태그와 연결된 저장된 이미지를 모두 삭제하려면 Delete Tag...(태그 삭제)를 선택합니다.

를 사용하여 이미지 삭제 AWS CLI
  • AWS ecr batch-delete-image 명령을 사용하여 리포지토리에서 이미지를 삭제할 수도 있습니다.

    aws ecr batch-delete-image \ --repository-name hello-world \ --image-ids imageTag=latest

    출력값은 다음과 같습니다.

    { "failures": [], "imageIds": [ { "imageTag": "latest", "imageDigest": "sha256:215d7e4121b30157d8839e81c4e0912606fca105775bb0636b95aed25f52c89b" } ] }
Amazon ECR 인스턴스에서 리포지토리 삭제

에서 리포지토리를 삭제하는 방법에는 두 가지가 있습니다 AWS Cloud9 IDE. 첫 번째 방법은 AWS 탐색기를 사용하는 것입니다.

  1. AWS 탐색기에서 ECR 메뉴를 확장합니다.

  2. 삭제할 리포지토리에 대한 컨텍스트(마우스 오른쪽 버튼 클릭) 메뉴를 엽니다.

  3. Delete Repository...(리포지토리 삭제...)를 선택합니다.

에서 Amazon ECR리포지토리 삭제 AWS CLI
  • AWS ecr delete-repository 명령을 사용하여 리포지토리를 삭제할 수 있습니다.

    참고

    일반적으로 리포지토리에 포함된 이미지를 먼저 삭제하지 않으면 리포지토리를 삭제할 수 없습니다. 하지만 --force 플래그를 추가하면 리포지토리와 모든 해당 이미지를 한 번에 삭제할 수 있습니다.

    aws ecr delete-repository \ --repository-name hello-world \ --force

    출력값은 다음과 같습니다.

    --repository-name hello-world --force { "repository": { "repositoryUri": "922327013870.dkr.ecr.us-west-2.amazonaws.com/hello-world", "registryId": "922327013870", "imageTagMutability": "MUTABLE", "repositoryArn": "arn:aws:ecr:us-west-2:922327013870:repository/hello-world", "repositoryName": "hello-world", "createdAt": 1664469874.0 } }