11. AWS

AWS ECR 도커이미지 생성편 2탄

미니대왕님 2018. 12. 27. 11:34

도커 이미지 생성

이 섹션에서는 간단한 웹 애플리케이션의 도커 이미지를 생성하여 이를 로컬 시스템이나 EC2 인스턴스에서 테스트한 다음, 컨테이너 레지스트리(Amazon ECR 또는 Docker Hub 같은)에 푸시하여 ECS 작업 정의에서 사용할 수 있도록 합니다.

간단한 웹 애플리케이션의 도커 이미지를 생성하려면

  1. Dockerfile이라는 파일을 생성합니다. Dockerfile은 도커 이미지에 사용할 기본 이미지 및 이를 설치하고 실행할 항목을 설명하는 매니페스트입니다. Dockerfile에 대한 자세한 내용은 Dockerfile 참조를 참조하십시오.

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

    FROM ubuntu:12.04 # Install dependencies RUN apt-get update -y RUN apt-get install -y apache2 # Install apache and write hello world message RUN echo "Hello World!" > /var/www/index.html # Configure apache RUN a2enmod rewrite RUN chown -R www-data:www-data /var/www ENV APACHE_RUN_USER www-data ENV APACHE_RUN_GROUP www-data ENV APACHE_LOG_DIR /var/log/apache2 EXPOSE 80 CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]

    이 Dockerfile은 Ubuntu 12.04 이미지를 사용합니다. RUN 지침은 패키지 캐시를 업데이트하고, 웹 서버의 일부 소프트웨어 패키지를 설치하고, 웹 서버의 문서 루트에 "Hello World!" 내용을 씁니다. EXPOSE 지침은 컨테이너에 포트 80을 노출하고 CMD 지침은 웹 서버를 시작합니다.

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

    참고

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

    docker build -t hello-world .
  4. docker images를 실행하여 이미지가 올바로 생성되었는지 확인합니다.

    docker images --filter reference=hello-world

    결과:

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

    docker run -p 80:80 hello-world

    참고

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

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

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

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

    • Windows 또는 Mac 컴퓨터에서 도커-machine을 사용하고 있는 경우 도커-machine ip명령을 사용하여 도커를 호스팅하고 있는 VirtualBox VM의 IP 주소를 찾고, 사용하고 있는 도커 머신의 이름으로 machine-name을 바꿉니다.

      docker-machine ip machine-name

    "Hello, World!"라는 웹 페이지가 보일 것입니다. statement.

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

(선택 사항) Amazon Elastic Container Registry에 이미지 푸시

Amazon ECR은 관리형 AWS 도커 레지스트리 서비스입니다. 고객은 친숙한 도커 CLI를 사용하여 이미지를 푸시, 가져오기 및 관리할 수 있습니다. Amazon ECR 제품 세부 정보, 주요 고객 사례 연구 및 FAQ에 대해서는 Amazon Elastic Container Registry 제품 세부 정보 페이지를 참조하십시오.

참고

이 섹션에는 AWS CLI가 필수입니다. 시스템에 AWS CLI를 설치하지 않았다면 AWS Command Line Interface 사용 설명서 AWS 명령줄 인터페이스 설치 단원을 참조하십시오.

이미지를 태그 지정하고 Amazon ECR에 푸시하려면

  1. hello-world 이미지를 저장할 Amazon ECR 리포지토리를 생성합니다. 출력의 repositoryUri를 참고합니다.

    aws ecr create-repository --repository-name hello-world

    결과:

    { "repository": { "registryId": "aws_account_id", "repositoryName": "hello-world", "repositoryArn": "arn:aws:ecr:us-east-1:aws_account_id:repository/hello-world", "createdAt": 1505337806.0, "repositoryUri": "aws_account_id.dkr.ecr.us-east-1.amazonaws.com/hello-world" } }
  2. hello-world 이미지를 이전 단계의 repositoryUri 값으로 태그 지정합니다.

    docker tag hello-world aws_account_id.dkr.ecr.us-east-1.amazonaws.com/hello-world
  3. aws ecr get-login --no-include-email 명령을 실행하여 레지스트리에 대한 docker login 인증 명령 문자열을 가져옵니다.

    참고

    get-login 명령은 버전 1.9.15부터 AWS CLI에서 사용할 수 있습니다. 하지만 최신 버전의 도커(17.06 이상)의 경우에는 버전 1.11.91 이상을 권장합니다. AWS CLI 버전은 aws --version 명령을 통해 확인할 수 있습니다. 도커 버전 17.06 이상을 사용하는 경우 get-login 뒤에 --no-include-email 옵션을 포함합니다. Unknown options: --no-include-email 오류가 발생하는 경우 최신 버전의 AWS CLI를 설치합니다. 자세한 내용은 AWS Command Line Interface 사용 설명서 AWS 명령줄 인터페이스 설치를 참조하십시오.

    aws ecr get-login --no-include-email
  4. 이전 단계에서 반환된 docker login 명령을 실행합니다. 이 명령은 12시간 동안 유효한 인증 토큰을 제공합니다.

    중요

     docker login 명령을 실행할 때 시스템의 다른 사용자가 프로세스 목록(ps -e) 디스플레이에서 해당 명령 문자열을 볼 수 있습니다. docker login 명령에는 인증 자격 증명이 포함되므로, 시스템의 다른 사용자가 이러한 방식으로 이 자격 증명을 볼 수 있는 위험이 있습니다. 또한 다른 사용자가 이 자격 증명을 사용하여 리포지토리에 대한 푸시 및 풀 액세스 권한을 얻을 수 있습니다. 안전한 시스템이 아닐 경우 이 위험을 고려하여 -p password 옵션을 생략하고 요청 시 암호를 입력하는 대화형 방식으로 로그인해야 합니다.

  5. 이전 단계의 repositoryUri 값으로 이미지를 Amazon ECR로 푸시합니다.

    docker push aws_account_id.dkr.ecr.us-east-1.amazonaws.com/hello-world

다음 단계

Amazon ECR 이미지 실험이 끝나면 이미지 저장 비용을 물지 않도록 리포지토리를 삭제합니다.

참고

이 섹션에는 AWS CLI가 필수입니다. 시스템에 AWS CLI를 설치하지 않았다면 AWS Command Line Interface 사용 설명서 AWS 명령줄 인터페이스 설치 단원을 참조하십시오.

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