[Hands On] ECR을 이용한 mysql/node.js on Docker 2 Session

ECR을 이용한 mysql/node.js on Docker (1)에 이어서 ECR에 도커 이미지를 Push하고 ECR에서 이미지를 받아 컨테이너를 실행하는 실습을 진행해보겠습니다.

01. ECR

01-01. 사용자 자격증명

우리는 본 실습에 AWS CLI를 사용할 예정이므로 자격 증명 정보가 필요합니다.

  • 아래의 정책을 가진 사용자가 있다면 해당 사용자 자격 증명 정보를 사용합니다.
  • 만약 없다면 아래의 정책을 추가해줍니다.
    • AmazonEC2ContainerRegistryFullAccess
    • AmazonECS_FullAccess
    • AmazonEC2FullAccess
  • 자격 증명 정보가 담긴 .csv 파일을 다운로드합니다.


01-02. CLI 설치

AWS CLI 설치

아래의 명령을 통해 AWS CLI를 설치합니다.

# curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
# apt install unzip
# unzip awscliv2.zip
# sudo ./aws/install
  • aws configure 설정

01-01. 에서 받은 csv 파일에 담긴 인증 정보를 가지고 aws configure를 설정합니다.


AWS ECS CLI 설치


01-03. ECR Repository 생성

AWS CLI를 이용하여 ECR Repository를 생성합니다.

# aws ecr create-repository --repository-name node-app
# aws ecr create-repository --repository-name node-mysql

콘솔에 들어가보면 ECR 리포지토리가 생성 된 것을 확인할 수 있습니다.


01-04. Docker Image 생성 및 Push

docker-compose.yml 수정

docker-compose.yml 파일을 열어 각각의 이미지 경로를 ECR repository로 설정합니다.
# vi docker-compose.yml

version: "3.4"
services:
  db:
    .
    
    build:
      context: ./db
    image: <account_id>.dkr.ecr.ap-northeast-2.amazonaws.com/node-mysql
    .
    .

  app:
    .
    .
    build:
      context: ./app
    image: <account_id>.dkr.ecr.ap-northeast-2.amazonaws.com/node-app
    .
    .


Docker 이미지 생성

아래의 명령으로 docker 이미지를 생성합니다.
# docker-compose -f docker-compose.yml build

생성 후 doker image를 확인해보면 내가 원하는 이미지가 생성 된 것을 확인할 수 있습니다.


docker login

docker push를 하기 전에 아래의 명령으로 docker login을 진행합니다.

account _id에는 ECR Repository URI의 맨 앞부분 숫자들을 넣으면 됩니다.

# aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin <account_id>.dkr.ecr.ap-northeast-2.amazonaws.com/


docker 이미지 push

아래의 명령을 통해 docker 이미지를 ECR Repository에 push합니다.
# docker-compose -f docker-compose.yml push


push 확인

AWS ECR 콘솔에 들어가 docker 이미지가 push 되었는지 확인합니다.


02. Container 실행

이번 실습에서는 ECR에 push 된 도커 이미지를 이용하여 EC2에서 컨테이너를 실행시켜보겠습니다.

02-01. 사전 조건

  • docker, docker-compose, aws cli, aws-ecs cli가 설치 되어 있는 인스턴스를 준비합니다.
  • ECR에서 이미지를 pull 할 수 있게 docker login을 합니다. 로그인 방법은 위에 [04-02. configure 설정]과 [04-04.의 docker login]부분과 동일합니다.


02-02. docker-compose.yml 생성 및 수정

컨테이너를 실행시킬 인스턴스에 docker-compose.yml 파일을 생성합니다.

기존에 docker-compose.yml과 동일하나 build 부분을 제거합니다.

version: "3.4"
services:
  db:
    container_name: "mysql_db"
    cap_add:
      - SYS_NICE
    build:
      context: ./db
		.
		.
		.
  app:
    container_name: "node_app"
    build:
      context: ./app
		.
		.
		.


02-03. docker-compose up

  • docker-compose.yml 파일이 있는 경로에서 다음 명령으로 컨테이너를 실행 시킵니다
    # docker-compose up
  • 아래의 명령을 통해 컨테이너가 실행 중임을 확인합니다.
    # docker-compose ps 또는 # docker ps
  • 브라우저에 해당 EC2 IP로 접속하여 결과를 확인합니다.