Amazon에서 수명 주기 전반에 걸쳐 이미지 이동 ECR - Amazon ECR

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

Amazon에서 수명 주기 전반에 걸쳐 이미지 이동 ECR

ECRAmazon을 처음 사용하는 경우 Docker와 함께 다음 단계를 사용하여 샘플 이미지를 만들고, 기본 레지스트리에 CLI 인증하고, 사설 리포지토리를 생성하십시오. AWS CLI 그런 다음 이미지를 프라이빗 리포지토리로 푸시하고 프라이빗 리포지토리에서 이미지를 가져옵니다. 샘플 이미지 작성이 끝나면 샘플 이미지와 리포지토리를 삭제합니다.

를 AWS Management Console 대신 사용하려면 AWS CLI을 참조하십시오이미지를 저장할 Amazon ECR 프라이빗 리포지토리 생성.

다양한 IDE 툴킷, Windows PowerShell 명령줄 도구를 포함하여 AWS 리소스를 관리하는 데 사용할 수 있는 다른 AWS SDKs 도구에 대한 자세한 내용은 http://aws.amazon.com/tools/ 을 참조하십시오.

사전 조건

최신 버전의 Docker가 설치되어 AWS CLI 있고 사용할 준비가 되지 않은 경우 다음 단계에 따라 두 도구를 모두 설치하세요.

설치 AWS CLI

ECRAmazon에서 AWS CLI 사용하려면 최신 AWS CLI 버전을 설치하십시오. 자세한 내용은 AWS Command Line Interface 사용 설명서에서 AWS Command Line Interface설치를 참조하세요.

Docker 설치

Docker는 최신 Linux 배포 버전(Ubuntu 등)을 비롯하여 MacOS 및 Windows 등 다양한 운영 체제에서 사용할 수 있습니다. 특정 운영 체제에 Docker를 설치하는 방법에 대한 자세한 내용은 Docker 설치 안내서를 참조하십시오.

Docker를 사용하기 위해 로컬 개발 시스템이 필요하지 않습니다. EC2이미 Amazon을 사용하고 있다면 Amazon Linux 2023 인스턴스를 시작하고 Docker를 설치하여 시작할 수 있습니다.

이미 Docker가 설치되어 있으면 1단계: 도커 이미지 생성 단계로 건너뜁니다.

아마존 리눅스 2023을 사용하여 아마존 EC2 인스턴스에 Docker를 설치하려면 AMI
  1. 최신 Amazon Linux 2023으로 인스턴스를 시작합니다AMI. 자세한 내용은 Amazon EC2 사용 설명서의 인스턴스 시작을 참조하십시오.

  2. 인스턴스에 연결합니다. 자세한 내용은 Amazon EC2 사용 설명서의 Linux 인스턴스에 연결을 참조하십시오.

  3. 인스턴스에 설치한 패키지 및 패키지 캐시를 업데이트합니다.

    sudo yum update -y
  4. 최신 Docker Community Edition 패키지를 설치합니다.

    sudo yum install docker
  5. Docker 서비스를 시작합니다.

    sudo service docker start
  6. sudo를 사용하지 않고도 Docker 명령을 실행할 수 있도록 docker 그룹에 ec2-user를 추가합니다.

    sudo usermod -a -G docker ec2-user
  7. 로그아웃하고 다시 로그인해서 새 docker 그룹 권한을 선택합니다. 현재 SSH 터미널 창을 닫고 새 창에서 인스턴스에 다시 연결하면 이 작업을 수행할 수 있습니다. 새 SSH 세션에는 적절한 docker 그룹 권한이 부여됩니다.

  8. sudo 없이도 ec2-user가 Docker 명령을 실행할 수 있는지 확인합니다.

    docker info
    참고

    경우에 따라서는 ec2-user가 Docker 데몬에 액세스할 수 있는 권한을 제공하기 위해 인스턴스를 재부팅해야 할 수도 있습니다. 다음 오류가 표시될 경우 인스턴스를 재부팅합니다.

    Cannot connect to the Docker daemon. Is the docker daemon running on this host?

1단계: 도커 이미지 생성

이 단계에서는 간단한 웹 애플리케이션의 Docker 이미지를 만들고 로컬 시스템 또는 Amazon EC2 인스턴스에서 테스트합니다.

간단한 웹 애플리케이션의 Docker 이미지를 생성하려면
  1. Dockerfile이라는 파일을 생성합니다. Dockerfile은 Docker 이미지에 사용할 기본 이미지 및 이를 설치하고 실행할 항목을 설명하는 매니페스트입니다. Dockerfile에 대한 자세한 내용은 Dockerfile 참조를 참조하세요.

    touch Dockerfile
  2. 방금 만든 Dockerfile을 수정하고 다음 내용을 추가합니다.

    FROM public.ecr.aws/amazonlinux/amazonlinux:latest # Install dependencies RUN yum update -y && \ yum install -y httpd # Install apache and write hello world message RUN echo 'Hello World!' > /var/www/html/index.html # Configure apache RUN echo 'mkdir -p /var/run/httpd' >> /root/run_apache.sh && \ echo 'mkdir -p /var/lock/httpd' >> /root/run_apache.sh && \ echo '/usr/sbin/httpd -D FOREGROUND' >> /root/run_apache.sh && \ chmod 755 /root/run_apache.sh EXPOSE 80 CMD /root/run_apache.sh

    이 도커파일은 아마존 퍼블릭에서 호스팅되는 퍼블릭 아마존 리눅스 2 이미지를 사용합니다. ECR RUN 지침은 패키지 캐시를 업데이트하고, 웹 서버의 일부 소프트웨어 패키지를 설치하고, 'Hello World!'를 작성합니다. 콘텐츠를 웹 서버 문서 루트에 작성합니다. EXPOSE 지침은 컨테이너에 포트 80을 노출하고 CMD 지침은 웹 서버를 시작합니다.

  3. Dockerfile에서 Docker 이미지를 빌드합니다.

    참고

    아래의 명령에서 Docker의 일부 버전에서는 아래 보이는 상대 경로 대신에 Dockerfile의 전체 경로가 필요할 수 있습니다.

    docker build -t hello-world .
  4. 컨테이너 이미지를 나열합니다.

    docker images --filter reference=hello-world

    출력:

    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    hello-world         latest              e9ffedc8c286        4 minutes ago       194MB
  5. 새로 빌드된 이미지를 실행합니다. -p 80:80 옵션은 컨테이너에 있는 노출된 포트 80을 호스트 시스템에 있는 포트 80에 매핑합니다. docker run에 대한 자세한 내용을 보려면 Docker 실행 참조를 참조하세요.

    docker run -t -i -p 80:80 hello-world
    참고

    Apache 웹 서버로부터의 출력이 터미널 창에 표시됩니다. "Could not reliably determine the fully qualified domain name" 메시지는 무시해도 됩니다.

  6. 브라우저를 열고 Docker를 실행하고 컨테이너를 호스팅하고 있는 서버를 가리킵니다.

    • EC2인스턴스를 사용하는 경우 이 DNS 값은 서버의 Public 값이며, 인스턴스에 연결할 때 사용하는 주소와 동일합니다. SSH 인스턴스의 보안 그룹에서 포트 80에 인바운드 트래픽을 허용해야 합니다.

    • Docker를 로컬에서 실행하고 있는 경우, 브라우저에서 http://localhost/를 가리킵니다.

    • Windows 또는 Mac 컴퓨터에서 사용하는 경우 다음 docker-machine ip 명령을 사용하여 docker-machine Docker를 호스팅하는 VirtualBox VM의 IP 주소를 찾아 다음을 대체하십시오.machine-name 사용 중인 docker 머신의 이름과 함께

      docker-machine ip machine-name

    "Hello, World!" 문이 있는 웹 페이지가 표시됩니다.

  7. Ctrl + c를 입력하여 Docker 컨테이너를 중지합니다.

2단계: 리포지토리 생성

이제 Amazon에 푸시할 이미지를 ECR 얻었으므로 이미지를 보관할 저장소를 만들어야 합니다. 이 예에서는 hello-repository라는 리포지토리를 생성합니다. 나중에 이 리포지토리에 hello-world:latest 이미지를 푸시하게 됩니다. 리포지토리를 생성하려면 다음 명령을 실행합니다.

aws ecr create-repository \ --repository-name hello-repository \ --region region

3단계: 기본 레지스트리 인증

를 설치하고 구성한 후 Docker를 AWS CLI기본 CLI 레지스트리로 인증합니다. 그러면 docker 명령이 Amazon에서 이미지를 푸시하고 가져올 수 ECR 있습니다. 는 인증 프로세스를 단순화하는 get-login-password 명령을 AWS CLI 제공합니다.

를 사용하여 Amazon ECR 레지스트리에 Docker를 get-login-password 인증하려면 명령을 실행합니다. aws ecr get-login-password 인증 토큰을 docker login 명령에 전달할 때 사용자 이름 값을 AWS 사용하고 URI 인증하려는 Amazon ECR 레지스트리를 지정합니다. 여러 레지스트리에 대해 인증하는 경우 각 레지스트리에 대해 명령을 반복해야 합니다.

중요

오류가 발생하면 최신 버전의 AWS CLI를 설치하거나 업그레이드합니다. 자세한 내용은 AWS Command Line Interface 사용 설명서에서 AWS Command Line Interface설치를 참조하세요.

  • get-login-password (AWS CLI)

    aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com
  • Get- ECRLoginCommand ()AWS Tools for Windows PowerShell

    (Get-ECRLoginCommand).Password | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com

4단계: 아마존에 이미지 푸시 ECR

이제 이전 섹션에서 만든 Amazon ECR 리포지토리로 이미지를 푸시할 수 있습니다. 다음 사전 요구 사항을 충족한 후 를 사용하여 이미지를 푸시할 수 있습니다. docker CLI

  • 최소 버전 설치: 1.7. docker

  • Amazon ECR 인증 토큰은 로 구성되었습니다docker login.

  • Amazon ECR 리포지토리가 존재하며 사용자는 리포지토리로 푸시할 수 있는 액세스 권한을 가집니다.

이러한 사전 조건이 만족되면, 계정의 기본 레지스트리에 있는 새롭게 생성된 리포지토리에 이미지를 푸시할 수 있습니다.

이미지에 태그를 지정하고 Amazon으로 푸시하려면 ECR
  1. 태그를 지정하고 푸시할 이미지를 식별할 수 있도록 로컬에 저장한 이미지를 나열합니다.

    docker images

    출력:

    REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    hello-world         latest              e9ffedc8c286        4 minutes ago       241MB
  2. 리포지토리에 푸시할 이미지에 태그를 지정합니다.

    docker tag hello-world:latest aws_account_id.dkr.ecr.region.amazonaws.com/hello-repository
  3. 이미지를 푸시합니다.

    docker push aws_account_id.dkr.ecr.region.amazonaws.com/hello-repository:latest

    출력:

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

5단계: Amazon에서 이미지 가져오기 ECR

이미지가 Amazon ECR 리포지토리로 푸시된 후 다른 위치에서 이미지를 가져올 수 있습니다. 다음 사전 요구 사항이 충족되면 를 사용하여 이미지를 가져올 수 있습니다. docker CLI

  • 최소 버전 설치: 1.7. docker

  • Amazon ECR 인증 토큰은 로 구성되었습니다docker login.

  • Amazon ECR 리포지토리가 존재하며 사용자는 리포지토리에서 가져올 수 있습니다.

이러한 사전 조건이 만족되면 이미지를 가져올 수 있습니다. ECRAmazon에서 예제 이미지를 가져오려면 다음 명령을 실행합니다.

docker pull aws_account_id.dkr.ecr.region.amazonaws.com/hello-repository:latest

출력:

latest: Pulling from hello-repository
0a85502c06c9: Pull complete
0998bf8fb9e9: Pull complete
a6785352b25c: Pull complete
e9ae3c220b23: Pull complete
Digest: sha256:215d7e4121b30157d8839e81c4e0912606fca105775bb0636EXAMPLE
Status: Downloaded newer image for aws_account_id.dkr.region.amazonaws.com/hello-repository:latest

6단계: 이미지 삭제

리포지토리 중 하나에 이미지가 더 이상 필요하지 않은 경우 이미지를 삭제할 수 있습니다. 이미지를 삭제하려면 해당 이미지가 있는 저장소를 지정하고 이미지의 imageTag or imageDigest 값을 지정합니다. 다음 예제에서는 이미지 태그가 latest 있는 hello-repository 저장소의 이미지를 삭제합니다. 리포지토리에서 예제 이미지를 삭제하려면 다음 명령을 실행합니다.

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

7단계: 리포지토리 삭제

전체 이미지 리포지토리가 더 이상 필요하지 않은 경우 리포지토리를 삭제할 수 있습니다. 다음 예제에서는 --force 플래그를 사용하여 이미지가 포함된 저장소를 삭제합니다. 이미지가 들어 있는 리포지토리(및 리포지토리 안에 있는 모든 이미지)를 삭제하려면 다음 명령을 실행합니다.

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