AWS ECR 도커이미지 생성편 2탄
도커 이미지 생성
이 섹션에서는 간단한 웹 애플리케이션의 도커 이미지를 생성하여 이를 로컬 시스템이나 EC2 인스턴스에서 테스트한 다음, 컨테이너 레지스트리(Amazon ECR 또는 Docker Hub 같은)에 푸시하여 ECS 작업 정의에서 사용할 수 있도록 합니다.
간단한 웹 애플리케이션의 도커 이미지를 생성하려면
-
Dockerfile
이라는 파일을 생성합니다. Dockerfile은 도커 이미지에 사용할 기본 이미지 및 이를 설치하고 실행할 항목을 설명하는 매니페스트입니다. Dockerfile에 대한 자세한 내용은 Dockerfile 참조를 참조하십시오.touch Dockerfile
-
방금 만든
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
지침은 웹 서버를 시작합니다. -
Dockerfile에서 도커 이미지를 빌드합니다.
참고
아래의 명령에서 도커의 일부 버전에서는 아래 보이는 상대 경로 대신에 Dockerfile의 전체 경로가 필요할 수 있습니다.
docker build -t hello-world .
-
docker images를 실행하여 이미지가 올바로 생성되었는지 확인합니다.
docker images --filter reference=hello-world
결과:
REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest e9ffedc8c286 4 minutes ago 258MB
-
새로 빌드된 이미지를 실행합니다.
-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
" 메시지는 무시해도 됩니다. -
브라우저를 열고 도커를 실행하고 컨테이너를 호스팅하고 있는 서버를 가리킵니다.
-
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.
-
-
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에 푸시하려면
-
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" } } -
hello-world
이미지를 이전 단계의repositoryUri
값으로 태그 지정합니다.docker tag hello-world
aws_account_id
.dkr.ecr.us-east-1
.amazonaws.com/hello-world -
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
-
이전 단계에서 반환된 docker login 명령을 실행합니다. 이 명령은 12시간 동안 유효한 인증 토큰을 제공합니다.
중요
이 docker login 명령을 실행할 때 시스템의 다른 사용자가 프로세스 목록(ps -e) 디스플레이에서 해당 명령 문자열을 볼 수 있습니다. docker login 명령에는 인증 자격 증명이 포함되므로, 시스템의 다른 사용자가 이러한 방식으로 이 자격 증명을 볼 수 있는 위험이 있습니다. 또한 다른 사용자가 이 자격 증명을 사용하여 리포지토리에 대한 푸시 및 풀 액세스 권한을 얻을 수 있습니다. 안전한 시스템이 아닐 경우 이 위험을 고려하여
-p
옵션을 생략하고 요청 시 암호를 입력하는 대화형 방식으로 로그인해야 합니다.password
-
이전 단계의
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