AWS EC2에서 Docker를 사용하여 Spring Boot 애플리케이션을 배포하는 과정을 안내한다. 이 과정은 Spring Boot 애플리케이션을 Docker 이미지로 빌드하고, Docker Hub에 이미지를 공유한 후, EC2 인스턴스에서 이미지를 pull하여 실행하는 절차를 포함한다.
# Jar 파일 빌드
FROM eclipse-temurin:17 as builder
# 소스 코드와 Gradle Wrapper 복사
COPY gradlew .
COPY gradle gradle
COPY build.gradle .
COPY settings.gradle .
COPY src src
# Gradle Wrapper 실행 권한 부여 및 애플리케이션 빌드
RUN chmod +x ./gradlew && ./gradlew bootJar
# Jar 실행
FROM eclipse-temurin:17-jre as runtime
# 사용자 및 그룹 생성
RUN addgroup --system --gid 1000 worker && \
adduser --system --uid 1000 --ingroup worker --disabled-password worker
# 파일 저장을 위한 디렉토리 생성 및 권한 설정
RUN mkdir -p /app/images && \
chown worker:worker /app/images
# 빌드된 Jar 파일 복사
COPY --from=builder /build/libs/*.jar app.jar
# 사용자 전환
USER worker:worker
# 환경변수 설정
ENV PROFILE ${PROFILE}
# 포트 8080 열기
EXPOSE 8080
# 애플리케이션 실행
ENTRYPOINT ["java", "-Dspring.profiles.active=${PROFILE}", "-jar", "/app.jar"]
이 설정은 Docker를 사용하여 Spring Boot 애플리케이션을 빌드하고 실행하는 과정을 정의한다. 이제 Docker 이미지를 빌드하고 Docker Hub에 푸시하는 과정을 진행한다.
docker build -t [Docker Hub 사용자명]/[이미지명]:[태그] .
docker login
docker push [Docker Hub 사용자명]/[이미지명]:[태그]
이제 EC2 인스턴스에서 Docker 이미지를 pull하고 실행한다. EC2 인스턴스의 터미널에서 다음 명령어를 실행한다
docker run --name [컨테이너명] -e PROFILE=dev -d -p [외부포트]:[컨테이너포트] [Docker Hub 사용자명]/[이미지명]:[태그]
이 명령어는 EC2 인스턴스에서 Docker 컨테이너를 백그라운드 모드(-d)로 실행하고, 로컬의 8080 포트를 컨테이너의 8080 포트에 연결한다. PROFILE 환경 변수는 Spring Boot 애플리케이션의 프로파일을 설정하는 데 사용된다.