이 모듈에서는 획일적인 node.js 애플리케이션의 컨테이너 이미지를 구축하고 이를 Amazon Elastic Container Registry로 푸시합니다. 구축 시작

amazon ecr에 배포

컨테이너를 사용하면 애플리케이션의 코드, 구성 및 종속 항목을 사용이 간편한 빌딩 블록으로 손쉽게 패키징할 수 있으며 빌딩 블록은 환경 일관성, 운영 효율성, 개발자 생산성, 버전 제어를 제공합니다. 컨테이너는 애플리케이션을 배포 환경과 관계없이 빠르고 안정적이며 일관되게 배포할 수 있도록 해줍니다.

아키텍처 개요

속도
큰 배포 오버헤드 없이 코드의 새 릴리스를 사용하여 컨테이너를 시작할 수 있습니다. 개발자의 로컬 시스템에 있는 컨테이너에 구축된 코드는 해당 컨테이너만 옮기면 테스트 서버로 쉽게 옮겨지므로 작동 속도가 개선됩니다. 구축 시 이 컨테이너를 애플리케이션 스택 실행에 필요한 다른 컨테이너에 연결할 수 있습니다.

종속 관계 제어 및 향상된 파이프라인
Docker 컨테이너 이미지는 특정 시점의 애플리케이션 코드와 종속 관계를 캡처한 이미지입니다. 따라서 엔지니어링 조직에서 애플리케이션 수명주기 동안 적용할 표준 파이프라인을 생성할 수 있습니다. 예:

  1. 개발자가 로컬로 컨테이너를 구축하고 실행합니다.
  2. 지속 통합 서버가 동일한 컨테이너를 실행하며 기대치를 충족하는지 확인하기 위해 통합 테스트를 실시합니다.
  3. 동일한 컨테이너가 준비 환경으로 전달됩니다. 준비 환경에서는 로드 테스트 또는 수동 QA를 사용하여 실행 시간 동작을 점검할 수 있습니다.
  4. 동일한 컨테이너가 운영 환경으로 전달됩니다.

통합 및 배포 파이프라인의 모든 단계 걸쳐 완전히 일치하는 컨테이너를 구축, 테스트, 전달 및 실행할 수 있으므로 고품질의 신뢰성 높은 애플리케이션을 훨씬 쉽게 제공할 수 있습니다.

집적도 및 리소스 효율성
컨테이너를 사용하면 단일 시스템에서 여러 이기종 프로세스를 실행할 수 있으므로 리소스 효율성이 향상됩니다. 이 같은 리소스 효율성 향상은 컨테이너에 사용되는 격리 및 할당 기법의 자연스러운 결과물입니다. 호스트의 CPU 및 메모리를 일정 양만 소모하도록 컨테이너를 제한할 수 있습니다. 컨테이너에 필요한 리소스와 기반 호스트 서버에서 사용 가능한 리소스를 파악하면 작은 규모의 호스트에 컴퓨팅 리소스를 적절하게 사이징하거나 규모가 큰 단일 호스트에서 실행되는 프로세스의 집적도를 높여 가용성을 증진하고 리소스 소비를 최적화할 수 있습니다.

유연성
Docker 컨테이너의 유연성은 이식성, 배포 용이성 및 작은 크기에 따라 결정됩니다. VM에서 필요한 설치 및 구성과 달리, 컨테이너는 내부의 패키징 서비스를 통해 호스트 간에 손쉽게 이동하고, 인접한 다른 서비스의 장애로부터 격리하며, 호스트 시스템의 잘못된 패치 또는 소프트웨어 업그레이드로부터 보호할 수 있습니다.

소요 시간: 20분

사용된 서비스:


이 자습서의 첫 부분에서는 모놀리식 node.js 애플리케이션의 Docker 컨테이너 이미지를 구축하고 이를 Amazon Elastic Container Registry로 푸시합니다. 섹션을 확장하려면 각 단계 번호를 클릭하십시오.

break-the-monolith
  • 1단계. 설정하기

    이어지는 몇 단계에서는 Docker, Github, Amazon ECSAmazon ECR을 사용하여 컨테이너에 코드를 배포합니다. 이 단계를 수행하려면 적절한 도구가 있는지 확인해야 합니다.

    1. AWS 계정: AWS 계정이 없는 경우 여기에서 등록할 수 있습니다. 이 자습서의 모든 연습은 AWS 프리 티어를 사용하여 수행할 수 있도록 만들어졌습니다.
      ⚐ 참고: 이 자습서에서 사용할 일부 서비스의 경우 계정이 12시간 이상 활성화되어 있는 상태여야 사용할 수 있습니다. 계정을 새로 만들었는데 서비스를 이용하는 데 문제가 있으면 몇 시간 기다린 후에 다시 시도해 보십시오.
    2. Docker 설치: 컨테이너에서 실행할 이미지 파일을 구축하는 데 Docker를 사용합니다. Docker는 오픈 소스 프로젝트이며, 여기에서 Mac용 또는 Windows용을 다운로드할 수 있습니다.
      Docker가 설치되고 나면 터미널에서 Docker --version을 실행하여 제대로 작동하는지 점검할 수 있습니다. 다음과 같은 메시지가 표시되어야 합니다. Docker version 17.03.0-ce, build 60ccb22.
    3. AWS CLI 설치
      • Amazon Elastic Container Registry로 이미지를 푸시하는 데 AWS 명령줄 인터페이스(CLI)를 사용합니다. CLI에 대한 자세한 내용은 여기에서 확인할 수 있습니다.
      • AWS CLI가 설치되고 나면 터미널에서 aws --version을 실행하여 제대로 작동하는지 점검할 수 있습니다. 다음과 같은 메시지가 표시되어야 합니다. aws-cli/1.11.63 Python/2.7.10 Darwin/16.5.0 botocore/1.5.26.
      • AWS CLI가 이미 설치되어 있는 경우 터미널에서 다음 명령을 실행하여 최신 버전으로 업데이트된 상태인지 확인합니다. pip install awscli --upgrade --user
    4. 텍스트 편집기 준비: 코딩에 사용할 텍스트 편집기가 없는 경우 로컬 환경에 설치해야 합니다. Atom은 GitHub에서 제공하는 간단한 오픈 소스 텍스트 편집기로, 개발자들이 많이 사용합니다.
  • 2단계. 프로젝트 다운로드 및 열기

    GitHub에서 코드 다운로드: https://github.com/awslabs/amazon-ecs-nodejs-microservices에 접속한 후 'Clone or Download'를 선택하여 GitHub 리포지토리를 로컬 환경에 다운로드합니다. GitHub Desktop 또는 Git를 사용하여 리포지토리를 복제할 수도 있습니다.

    프로젝트 파일 열기: Atom을 시작하고 'Add Project Folder'를 선택한 다음 'amazon-ecs-nodejs-microservices' 리포지토리를 저장한 폴더를 선택합니다. 그러면 전체 프로젝트가 Atom에 추가되어 손쉽게 작업을 수행할 수 있습니다.

    프로젝트 폴더에 인프라 및 서비스의 폴더가 있어야 합니다. 인프라 폴더에는 다음 단계에서 사용할 AWS CloudFormation 인프라 구성 코드가 들어 있습니다. 서비스 폴더에는 node.js 애플리케이션을 구성하는 코드가 들어 있습니다.

    파일들을 클릭해 보면서 db.json 데이터베이스, server.js 서버, package.json, 애플리케이션 Docker 파일 등 애플리케이션의 다양한 측면을 숙지하십시오.

    마이크로서비스 프로젝트
  • 3단계. 리포지토리 프로비저닝

    리포지토리 생성:

    • Amazon Elastic Container Registry (ECR)로 이동합니다.
    • Create Repository(리포지토리 생성)를 선택합니다.
    • 리포지토리의 이름을 지정합니다. 이 단계에서는 리포지토리 이름을 간단히 api로 지정하겠습니다.


    리포지토리 정보 기록:

    • Next(다음)를 클릭하고 나면 다음과 같은 메시지가 나타납니다.
    생성
    • 리포지토리 주소는 다음과 같은 간단한 형식을 따릅니다. [account-id].dkr.ecr.[region].amazonaws.com/[repo-name].

     

    ⚐ 참고: 다음 단계에서는 사용 중인 계정 ID 및 리전 외에 이 주소도 필요합니다.

  • 4단계. Docker 이미지 구축 및 푸시

    터미널을 열고 GitHub 코드를 복제하거나 다운로드한 디렉토리에서 GitHub 코드의 2-containerized/services/api 섹션 경로를 설정합니다. ~/amazon-ecs-nodejs-microservices/2-containerized/services/api.

    AWS로 Docker 로그인 인증:

    1. aws ecr get-login --no-include-email --region [region]을 실행합니다. 예: aws ecr get-login --no-include-email --region us-west-2 이전에 AWS CLI를 사용한 적이 없는 경우 자격 증명을 구성해야 할 수 있습니다.
    2. docker login -u AWS -p ...로 시작하는 방대한 출력이 표시됩니다. 이 전체 출력을 복사하여 붙여 넣고 터미널에서 실행합니다.
    3. Login Succeeded라는 메시지가 나타납니다.

    ⚐ 참고: 로그인에 실패할 경우 -e none 플래그를 더 이상 지원하지 않는 최신 버전의 Docker를 사용 중이기 때문일 수 있습니다. 이 문제를 해결하려면 출력을 텍스트 편집기에 붙여 넣고, 출력의 끝부분에서 -e none을 제거한 후, 업데이트된 출력을 터미널에서 실행합니다.

    • 이미지 구축: 터미널에서 docker build -t api를 실행합니다. 참고: 여기서는 .이 중요합니다.
    • 이미지에 태그 지정: 구축이 완료되면 리포지토리로 푸시할 수 있도록 이미지에 태그를 지정합니다. docker tag api:latest [account-id].dkr.ecr.[region].amazonaws.com/api:v1

    ⚐ 전문가 팁: :v1은 이미지 빌드 버전을 나타냅니다. 이미지를 구축할 때마다 이 버전 번호가 증분됩니다. 스크립트를 사용하는 경우 타임스탬프와 같은 자동화된 번호를 사용하여 이미지에 태그를 지정할 수 있습니다. 이는 향후 이전 컨테이너 이미지 빌드로 손쉽게 되돌릴 수 있도록 해 주는 모범 사례입니다.

    • ECR로 이미지 푸시: docker push를 실행하여 이미지를 ECR로 푸시합니다. docker push [account-id].dkr.ecr.[region].amazonaws.com/api:latest

    ECR 리포지토리로 이동하면 이미지가 최신으로 태그 지정되어 있는 것을 확인할 수 있습니다.

    이미지