RECENT POSTS

최근에 작성한 글

01 / 03

전체 글

전체 보기

[Infra: AWS] Docker Hub를 활용한 EC2 배포 환경 구축 (AWS EC2 + Docker + Docker Hub)

오늘은 Spring Boot 프로젝트를 Docker Hub에 올리고 AWS EC2에서 실행하는 환경을 구축했다.


1. Docker Image 생성 및 Docker Hub 업로드

기존에는 Dockerfile을 작성하고 로컬에서 이미지를 생성하였다.

docker build -t threeservings:latest .

하지만 실제 배포에서는 이미지 이름을 프로젝트명으로만 관리하기보다 Docker Hub Repository를 사용한다.

docker build -t leunbin/threeservings-api:latest .

Docker Hub 로그인 후

docker login

이미지를 업로드하였다.

docker push leunbin/threeservings-api:latest

왜 Docker Hub를 사용하는가?

기존 방식

EC2
 ↓
git clone
 ↓
docker build
 ↓
docker run

Docker Hub 방식

GitHub Actions
        ↓
Docker Build
        ↓
Docker Hub Push
        ↓
EC2
docker pull
        ↓
docker compose up

즉 EC2에서는 빌드하지 않고 이미 만들어진 이미지만 가져와 실행하게 된다.


2. docker-compose.yml 수정

기존에는 EC2에서 직접 이미지를 빌드하도록 작성되어 있었다.

spring:
  build:
    context: .
    dockerfile: Dockerfile

Docker Hub를 사용한다면 build는 필요 없다.

다음과 같이 수정하였다.

spring:
  image: leunbin/threeservings-api:latest

이렇게 하면

docker compose pull

명령만으로 최신 이미지를 받을 수 있다.


3. AWS EC2 생성

인스턴스는 다음과 같이 설정하였다.

  • Ubuntu Server
  • t3.micro
  • gp3 30GB
  • Key Pair 생성
  • 보안 그룹 설정

4. EC2 접속

SSH를 이용하여 EC2에 접속하였다.

접속 후 가장 먼저

sudo apt update
sudo apt upgrade -y

를 수행하였다.

시간대도 한국으로 변경하였다.

sudo timedatectl set-timezone Asia/Seoul

5. Docker 설치

Docker 설치

sudo apt install docker.io -y

Docker가 정상적으로 설치되었는지 확인하였다.

docker --version

Docker 서비스를 실행하였다.

sudo systemctl start docker

자동 실행도 설정하였다.

sudo systemctl enable docker

 


systemctl start와 enable의 차이

현재 실행

sudo systemctl start docker

→ Docker 서비스를 지금 실행

자동 실행

sudo systemctl enable docker

→ EC2가 재부팅되어도 Docker가 자동 실행


6. Docker 권한

Docker 명령을 sudo 없이 사용하기 위해

sudo usermod -aG docker ubuntu

를 수행하였다.

이후에는 다시 로그인해야 권한이 적용된다.


7. Docker Hub에서 이미지 다운로드

Docker Hub Repository가 Public이므로

docker pull leunbin/threeservings-api:latest

또는

docker compose pull

명령으로 이미지를 받을 수 있다.


8. Docker Compose 실행

프로젝트를 실행하였다. (꼭!! 홈 디렉토리에서가 아니라 생성된 프로젝트 폴더 안으로 이동해서 실행해야함!!!)

docker-compose up -d

실행 후

docker ps

로 컨테이너 상태를 확인하였다.

Spring Boot

PostgreSQL

Redis

세 컨테이너가 정상적으로 실행되는 것을 확인하였다.


9. EC2에서 Spring Boot 접속 확인

브라우저에서

http://EC2_PUBLIC_IP:19096

으로 접속하여 Spring Boot 서버가 정상적으로 실행되는 것을 확인하였다.

즉

사용자
      │
EC2 Public IP
      │
Docker
      │
Spring Boot

구조까지 완료하였다.