개발/강의

인프런 : Docker 6 - AWS ECR

EJ EJ 2025. 4. 14. 16:08

AWS ECR이란?

Dockerhub과 동일한 역할을 하는 서비스가 하나 더 있다. 그게 바로 AWS ECR이다. AWS ECR도 이미지를 저장 및 다운받을 수 있는 저장소 역할을 한다.

 

최근에는 AWS 클라우드 환경에서 인프라를 구축하는 일이 많아졌다. AWS ECR을 사용하면 다른 AWS Resource와의 연동이 편하고, AWS 내에서 한 번에 관리할 수 있기에 편하다는 장점이 있다. (물론, Dockerhub을 사용해도 크게 문제는 없다.)

 

Docker의 가장 큰 장점은 이식성이다. Docker만 깔려있으면 어디에서든 내가 원하는 프로젝트를 실행시킬 수 있다는 게 장점이다. 이 때 Github을 활용해 프로젝트 코드 전체를 EC2로 옮겨 Docker 기반으로 실행시켜도 된다. 하지만 프로젝트에서 필요한 코드에 대해서만 Docker 이미지로 빌드해, EC2에서는 그 이미지만 다운받아서 실행시키는 게 훨씬 심플하다.

 

개발자  (docker push) -> AWS ECR -> (docker pull) AWS EC2

 

 

[실습-기본설정1] Ubuntu에서 Docker, Docker Compose 설치하기

EC2 생성 후 SSH에 접속하기

 

Ubuntu에서 Docker, Docker Compose 설치 명령어

sudo apt-get update && \
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common && \
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - && \
sudo apt-key fingerprint 0EBFCD88 && \
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && \
sudo apt-get update && \
sudo apt-get install -y docker-ce && \
sudo usermod -aG docker ubuntu && \
newgrp docker && \
sudo curl -L "https://github.com/docker/compose/releases/download/2.27.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && \
sudo chmod +x /usr/local/bin/docker-compose && \
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

 

설치 확인

docker -v  # Docker 버전 확인
docker compose version  # Docker Compose 버전 확인

 

 

[실습-기본설정2] AWS ECR(Elastic Container Registry) 사용해보기

 AWS CLI 설치

[맥(Mac OS)]

brew install awscli
aws --version # 잘 출력된다면 정상 설치된 상태

 

 IAM 생성하기

IAM 사용자에서 엑세스 키 만들기

 

AWS CLI로 액세스 키 등록하기

aws configure
AWS Access Key ID [None]: <위에서 발급한 Key id>
AWS Secret Access Key [None]: <위에서 발급한 Secret Access Key>
Default region name [None]: ap-northeast-2
Default output format [None]:

 

✅ AWS ECR(Elastic Container Registry) 셋팅하기

일반적으로 하나의 리포지토리에는 한 종류의 이미지만 저장하고 관리한다.

 

 이미지 빌드해서 AWS ECR에 Push, Pull 해보기

Dockerfile 작성하기

FROM openjdk:17-jdk

ENTRYPOINT ["/bin/bash", "-c", "sleep 500"]

 

이미지 빌드 및 push 하기

aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 002177417362.dkr.ecr.ap-northeast-2.amazonaws.com

docker build -t instagram-server .

docker tag instagram-server:latest 002177417362.dkr.ecr.ap-northeast-2.amazonaws.com/instagram-server:latest

docker push 002177417362.dkr.ecr.ap-northeast-2.amazonaws.com/instagram-server:latest

 

이미지 Pull 받아보기

docker image rm -f [Container ID] # 기존 갖고있던 이미지 지우기

docker pull 002177417362.dkr.ecr.ap-northeast-2.amazonaws.com/instagram-server

docker image ls

 

002177417362.dkr.ecr.ap-northeast-2.amazonaws.com/instagram-server : 이 값 자체가 이미지 이름이다. 길어서 어색해보일 뿐이다.

 

 

[본실습1] AWS EC2에 Spring Boot 배포하기

Docker File로 배포하기

 

인텔리제이에서 스프링부트 코드 작성

 

도커파일 작성

 

터미널 창에서 Spring Boot 프로젝트 빌드하기(단, CPU 설정해주기) 

./gradlew clean build
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 002177417362.dkr.ecr.ap-northeast-2.amazonaws.com
docker build --platform linux/amd64 -t instagram-server .
docker tag instagram-server:latest 002177417362.dkr.ecr.ap-northeast-2.amazonaws.com/instagram-server:latest
docker push 002177417362.dkr.ecr.ap-northeast-2.amazonaws.com/instagram-server:latest

 

잘 작동하는 지 확인하기

docker ps
docker logs

 

크롬에서 http://localhost:8080/v1 접속해 보기

 

 

 Docker Compose로 배포하기

폴더 만들기

mkdir instagram-server

 

AWS EC2에 compose.yml 만들기

services:
  instagram-server:
    image: 002177417362.dkr.ecr.ap-northeast-2.amazonaws.com/instagram-server:latest
    ports:
      - 8080:8080

 

실행시켜보기

docker compose up --build -d

 

잘 작동하는 지 확인하기

docker ps
docker logs

 

크롬에서 http://localhost:8080/v1 접속해 보기

 

(+) 새로운 기능이 업데이트 됐다고 가정

 

인텔리제이 코드 수정 후

 

터미널 창에서 Spring Boot 프로젝트 빌드하기(단, CPU 설정해주기) 

./gradlew clean build
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 002177417362.dkr.ecr.ap-northeast-2.amazonaws.com
docker build --platform linux/amd64 -t instagram-server .
docker tag instagram-server:latest 002177417362.dkr.ecr.ap-northeast-2.amazonaws.com/instagram-server:latest
docker push 002177417362.dkr.ecr.ap-northeast-2.amazonaws.com/instagram-server:latest

 

AWS EC2에 업데이트 된 내용 반영하기

docker compose pull
docker compose up --build -d

*docker compose pull : compose.yml에 작성된 이미지를 다운로드 또는 업데이트 할 때 사용한다.

 

잘 작동하는 지 확인하기

docker ps
docker logs

 

크롬에서 http://localhost:8080/v1 접속해 보기

 

 

[본실습2] AWS EC2에 Spring Boot, MySQL, Redis 배포하기

본실습1 구성(Spring Boot)에서 MySQL과 Redis를 같이 한 번에 배포해야 하는 상황이라고 가정하자. AWS EC2라고 해서 지금까지 배운 내용과 크게 다를 건 없다. compose.yml에 MySQL, Redis의 내용만 추가해주면 끝이다.

 

compose.yml에 MySQL, Redis 관련 내용 추가하기

services:
  instagram-server:
    image: 002177417362.dkr.ecr.ap-northeast-2.amazonaws.com/instagram-server:latest
    ports:
      - 8080:8080
    depends_on:
      my-db:
        condition: service_healthy
      my-cache-server:
        condition: service_healthy
  my-db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: pwd1234
      MYSQL_DATABASE: mydb
    volumes:
      - ./mysql_data:/var/lib/mysql
    ports:
      - 3306:3306
    healthcheck:
      test: [ "CMD", "mysqladmin", "ping" ]
      interval: 5s
      retries: 10
  my-cache-server:
    image: redis
    ports:
      - 6379:6379
    healthcheck:
      test: [ "CMD", "redis-cli", "ping" ]
      interval: 5s
      retries: 10

 

실행시켜보기

docker compose up --build -d

 

잘 작동하는 지 확인하기

docker ps
docker compose ps
docker compose logs

 

크롬에서 http://localhost:8080/v1 접속해 보기

'개발 > 강의' 카테고리의 다른 글

유튜브 : CICD 1  (1) 2025.04.15
인프런 : Docker Copmose 5  (0) 2025.04.14
인프런 : Docker Copmose 4  (0) 2025.04.12
인프런 : Dockerfile 3  (0) 2025.04.11
인프런 : Docker Volume 2  (0) 2025.04.11