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 |