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 설치
- AWS ECS CLI 설치 방법은 아래의 AWS 공식 문서를 참조하여 설치해줍니다. https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_CLI_installation.html
- 이때, GnuPG 단계에서는 아래의 명령으로 설치해줍니다.
# apt install gnupg2 pass
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로 접속하여 결과를 확인합니다.