JSCODE Logo
프로그래밍 과외블로그후기멘토진
회사명 : JSCODE대표 : 박재성사업자 등록번호 : 244-22-01557통신판매업 : 제 2023-인천미추홀-0381 호
학원 명칭 : 제이에스코드(JSCODE)원격학원학원설립ㆍ운영 등록번호 : 제6063호

서울특별시 구로구 경인로 20가길 11(오류동, 아델리아)

Copyright ⓒ 2025 JSCODE - 최상위 현업 개발자들의 프로그래밍 교육 All rights reserved.

이용약관개인정보처리방침
← 블로그 목록으로 돌아가기

[실습] AWS EC2에 Docker + Spring Boot 배포하기

JSCODE 박재성
JSCODE 박재성
2025-12-01
author
JSCODE 박재성
category
Docker
createdAt
Dec 1, 2025
series
비전공자도 이해할 수 있는 Docker 입문
slug
deploy-springboot-with-docker-to-ec2
type
post
updatedAt
Dec 1, 2025 12:07 PM
👨🏻‍🏫
AWS EC2에 Spring Boot 프로젝트만 배포를 해야하는 상황이라고 가정하자.

✅ Docker CLI로 배포하기

  1. 로컬 환경에서 프로젝트 셋팅
    1. start.spring.io
      https://start.spring.io/
      notion image
      • Java 17 버전을 선택하자. 아래 과정을 Java 17 버전을 기준으로 진행할 예정이다.
       
  1. 간단한 코드 작성
    1. AppController
      @RestController public class AppController { @GetMapping("/") public String home() { return "Docker, World!"; } }
       
  1. Dockerfile 작성하기
    1. Dockerfile
      FROM openjdk:17-jdk COPY build/libs/*SNAPSHOT.jar app.jar ENTRYPOINT ["java", "-jar", "/app.jar"]
 
  1. Spring Boot 프로젝트 빌드하기
    1. $ ./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 -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
 
  1. AWS EC2에서 AWS CLI 설치 및 액세스 키 등록하기
    1. (아래 설명 참고하기)
      🎯
      [실습] AWS ECR(Elastic Container Registry) 사용해보기
 
  1. AWS ECR로부터 이미지 다운받아 컨테이너 띄우기
    1. $ aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 002177417362.dkr.ecr.ap-northeast-2.amazonaws.com $ docker pull 002177417362.dkr.ecr.ap-northeast-2.amazonaws.com/instagram-server $ docker run -d -p 8080:8080 002177417362.dkr.ecr.ap-northeast-2.amazonaws.com/instagram-server
혹시나 아래와 같은 에러가 발생했다면?
notion image
이 에러의 원인은 CPU 아키텍처 환경이 다르다는 뜻이다. 조금 더 자세히 설명하자면, 이미지 빌드는 M1과 같은 ARM 기반의 환경에서 진행하고, 이미지 실행은 ARM 기반의 환경이 아닌 곳에서 할 때 위와 같은 에러가 발생한다.
 
위 에러를 해결하기 위해서는 이미지를 실행시키고자 하는 CPU 아키텍처에 맞춰서 이미지를 빌드해야 한다. 로컬 환경에서 아래와 같이 다시 빌드한 뒤 AWS ECR로 Push하자.
$ ./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의 CPU 아키텍처 확인하는 방법
$ lscpu
notion image
  • x86_64 = linux/amd64
 
 
  1. 잘 작동하는 지 확인하기
    1. $ docker ps $ docker logs
      notion image
 
 

✅ Docker Compose로 배포하기

Docker Compose의 장점 중 하나는 복잡한 명령어로 실행시키던 걸 간소화 시킬 수 있다는 점이 있다. 따라서 Docker CLI 말고 Docker Compose를 활용해서 Spring Boot 서버를 배포해보자.
 
  1. 폴더 만들기
    1. $ mkdir instagram-server
       
  1. AWS EC2에 compose.yml 만들기
    1. compose.yml
      services: instagram-server: image: 002177417362.dkr.ecr.ap-northeast-2.amazonaws.com/instagram-server:latest ports: - 8080:8080
       
  1. 실행시켜보기
    1. $ docker compose up --build -d
      notion image
 
  1. 새로운 기능이 업데이트 됐다고 가정
    1. AppController
      @RestController public class AppController { @GetMapping("/") public String home() { return "New, World!"; } }
       
      $ ./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
 
  1. AWS EC2에 업데이트 된 내용 반영하기
    1. $ docker compose pull $ docker compose up --build -d
      • docker compose pull : compose.yml에 작성된 이미지를 다운로드 또는 업데이트 할 때 사용한다.
      notion image
author
category
Docker
createdAt
series
비전공자도 이해할 수 있는 Docker 입문
slug
type
series-footer
updatedAt
Jan 12, 2026 12:04 AM
📎
이 글은 비전공자도 이해할 수 있는 MySQL 성능 최적화 입문/실전 (SQL 튜닝편) 강의의 수업 자료 중 일부입니다.