[공부정리] 도커로 ec2 배포하기

jeyong·2024년 1월 31일
0

공부 / 생각 정리  

목록 보기
15/121

AWS EC2에서 Docker를 사용하여 Spring Boot 애플리케이션을 배포하는 과정을 안내한다. 이 과정은 Spring Boot 애플리케이션을 Docker 이미지로 빌드하고, Docker Hub에 이미지를 공유한 후, EC2 인스턴스에서 이미지를 pull하여 실행하는 절차를 포함한다.

1. 필요조건

  • EC2 인스턴스에 Docker 설치
  • 로컬 시스템에 Docker 설치
  • Docker Hub 계정
  • Docker 이미지로 만들 Spring Boot 프로젝트

2. Spring Boot 프로젝트의 Dockerfile 설정

# 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에 푸시하는 과정을 진행한다.

3. Docker 이미지 빌드 및 Docker Hub에 푸시

  • 먼저, 로컬에서 Docker 이미지를 빌드한다. 터미널에서 다음 명령어를 실행한다.
docker build -t [Docker Hub 사용자명]/[이미지명]:[태그] .
  • 빌드가 완료되면, 생성된 Docker 이미지를 Docker Hub에 푸시한다. 먼저 Docker에 로그인한다.
docker login
  • 그리고 이미지를 푸시한다.
docker push [Docker Hub 사용자명]/[이미지명]:[태그]

4. EC2에서 Docker 이미지 실행

이제 EC2 인스턴스에서 Docker 이미지를 pull하고 실행한다. EC2 인스턴스의 터미널에서 다음 명령어를 실행한다

docker run --name [컨테이너명] -e PROFILE=dev -d -p [외부포트]:[컨테이너포트] [Docker Hub 사용자명]/[이미지명]:[태그]

이 명령어는 EC2 인스턴스에서 Docker 컨테이너를 백그라운드 모드(-d)로 실행하고, 로컬의 8080 포트를 컨테이너의 8080 포트에 연결한다. PROFILE 환경 변수는 Spring Boot 애플리케이션의 프로파일을 설정하는 데 사용된다.

5. 추가 Docker 명령어

  • 컨테이너 정지: docker stop [컨테이너명 또는 ID]
  • 컨테이너 시작: docker start [컨테이너명 또는 ID]
  • 실행 중인 컨테이너 확인: docker ps
  • 모든 컨테이너 확인(정지된 컨테이너 포함): docker ps -a

이 과정을 통해 AWS EC2에 Spring Boot 애플리케이션을 Docker를 사용하여 배포할 수 있다. Docker와 Spring Boot, AWS EC2를 활용한 배포는 개발 및 배포 과정을 효율적으로 만들어 준다.

profile
노를 젓다 보면 언젠가는 물이 들어오겠지.

0개의 댓글