AWS ECR + Docker의 간단한 사용 흐름과 몇가지 docker 명령어를 정리합니다.

Explanation

간단하게 사용하는 AWS ECR, Docker에 대해 까먹지 않기 위해 정리해둡니다.

1. Docker 및 AWS CLI 설치

Docker는 공식 홈페이지에 가서 받아서 설치하면 됩니다. (이전 글 참고: docker를-설치하고-간단하게-nginx-node-서버를-배포해봅니다)
AWS CLI는 Python을 설치하고 Pip를 사용하여 설치합니다. (참고: https://docs.aws.amazon.com/ko_kr/streams/latest/dev/kinesis-tutorial-cli-installation.html)

AWS CLI 설치

$ curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
$ sudo python get-pip.py
$ sudo pip install awscli

2. AWS CLI 설정

AWS CLI를 설치한 후

$ aws configure

위 커맨드를 통해서 AWS 액세스 키와 시크릿키, 그리고 기본 리전, 기본 아웃풋 타입을 설정합니다.

서비스마다 다른 액세스키를 사용해야하는 경우 아래와 같이 사용할 수 있습니다.

$ vi ~/.aws/credentials
[default]
  aws_access_key_id = ....
  aws_secret_access_key = ....

[lambda]
  aws_access_key_id = ....
  aws_secret_access_key = ....

[ecs]
  aws_access_key_id = ....
  aws_secret_access_key = ....

위에 [...] 부분이 라벨을 역할을 하고, default는 기본으로 사용되는 아이디와 시크릿 키값이 됩니다.

3. 시작

우선은 Dockerfile 파일을 포함하고 있는 프로젝트 디렉토리로 이동합니다.

몇가지 Docker 명령어

$ docker ps
# 현재 실행중인 도커 컨테이너 리스트를 보여줍니다.
$ docker images
# 도커의 이미지들을 보여줍니다.
$ docker system prune -a
# 도커의 이미지들을 모두 지웁니다

다음으로 AWS ECR에 로그인 합니다.

$ aws ecr get-login --no-include-email --region ap-northeast-2

위에 CLI 설정에서 별도의 라벨을 만들어서 사용한다면 아래와 같이 입력합니다.

$ aws ecr get-login --no-include-email --region ap-northeast-2 --profile ecs

위 커맨드를 입력하면 영어로 긴... 문자열이 출력되는데요. 그대로 복사해서 붙여넣기하면 'Success' 과 함께 로그인 됩니다.

4. 이미지 빌드, 등록

아래와 같은 커맨드로 도커 이미지를 만듭니다.

$ docker build -t docker-image-test .
# 'docker-image-test'라는 이름의 이미지를 빌드합니다.

그리고 AWS ECR에 레포지토리에 푸시합니다.

$ docker tag discover-image-admin 1234.. .dkr.ecr.ap-northeast-2.amazonaws.com/docker-image-test
$ docker push 1234.. .dkr.ecr.ap-northeast-2.amazonaws.com/docker-image-test

여기에서 tag를 등록하고 push를 하는 건 git에서 commit하고 push하는 거랑 비슷한거 같아요

5. 서비스 서버에 적용

서비스 서버에 접속해서 아래와 같은 커맨드로 AWS ECR의 레포지토리에 정보를 받아옵니다.

$ docker pull 1234.. .dkr.ecr.ap-northeast-2.amazonaws.com/docker-image-test

이미 서비스 서버가 실행 중이라면

$ docker ps
# 위 커맨드로 실행중인 CONTAINER ID 를 확인하고
$ docker stop 1a2c(CONTAINER ID)
# 서비스를 중지하고
$ docker run -p 80:80 docker-image-test
# 서비스를 다시 시작합니다.

제가 집에서는 개인 서버를 사용하다보니 AWS를 따로 사용하지 않아서, 하나하나 직접 테스트하며 작성하지 못하였습니다. (위 글 그대로 하면 안될 수 있어요...)

끝