오늘은 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
구조까지 완료하였다.
'Project > 삼인분' 카테고리의 다른 글
| [Infra] 운영 서버 메모리와 Swap 필요성 (0) | 2026.07.15 |
|---|---|
| [결제 도메인] 프로젝트 피드백 및 배운 점 (0) | 2026.07.14 |
| [Infra: Docker] docker compose 만들기 (0) | 2026.07.07 |
| [Infra: Docker] Dockerfile 만들기 (0) | 2026.07.06 |
| [Infra] 인프라 아키텍처 설계하기 (0) | 2026.07.02 |