Docker로 배포하기

EunBeen Noh·2024년 6월 25일
0

SpringAdvanced

목록 보기
6/6

1. Dockerfile 생성 및 설정

  • 프로젝트 root 디렉토리에 생성
  • Maven, Gradle에 맞게 내용 작성
  • 만약 gradle을 사용 하고 있다면, build.gradle 파일 내부에 아래 설정을 추가해줘야 한다.
    jar 파일이 2개가 생기며 Docker Image 가 생성되지 않을 수 있다. (Boot 2.5v 이후)
  // build.gradle
  jar {
      enabled = false
  }
  • gradle 버전

    # Stage 1: Build the application using Gradle with JDK 17
    FROM openjdk:17-jdk-slim as builder
    WORKDIR /build
    
    # Copy Gradle build files
    COPY build.gradle settings.gradle /build/
    
    # Download dependencies without running tests
    RUN ./gradlew build -x test --parallel --continue || true
    
    # Copy the rest of the application code
    COPY . /build
    
    # Copy the .env file
    COPY .env /build/.env
    
    # Build the application without running tests
    RUN ./gradlew build -x test --parallel
    
    # Stage 2: Run the application using Amazon Corretto JDK 17
    FROM amazoncorretto:17
    WORKDIR /app
    
    # Copy the built JAR file from the builder stage
    COPY --from=builder /build/build/libs/*.jar mjuLetter.jar
    
    # Copy the .env file from the builder stage
    COPY --from=builder /build/.env .env
    
    # Expose port 8080 to the outside world
    EXPOSE 8080
    
    # Run the JAR file with Java
    ENTRYPOINT ["java", "-jar", "mjuLetter.jar"]
  • maven

    FROM openjdk:17-jdk-slim as builder
    WORKDIR /build
    
    COPY pom.xml /build/
    COPY src /build/src
    RUN ./mvnw dependency:go-offline -B
    
    COPY . /build
    RUN ./mvnw clean package -DskipTests
    
    FROM amazoncorretto:17
    WORKDIR /app
    COPY --from=builder /build/target/*.jar mjuLetter.jar
    COPY --from=builder /build/.env .env
    
    EXPOSE 8080
    ENTRYPOINT ["java", "-jar", "mjuLetter.jar"]
    

2. Jar 파일 build

  • -x test -> test를 skip 후 build 하라는 의미
./gradlew clean build -x test

3. 이미지 생성

  • Doker Hub에 도커 이미지를 올리기 위해서는 로그인이 필요하다.
doker login -u [username]
  • Docker Hub에 Push 를 위해서 [Docker Hub ID]/ 를 필수로 작성
  • Dockerfile의 위치로 이동 후 해당 커맨드를 사용해야 한다.
    -> 그렇지 않으면 Dockerfile 위치를 지정해줘야 함.
# 기본 커맨드
# docker build -t [dockerHub ID]/[이미지명]:[태그명] [DockerFile위치]

# 태그 지정X 시 :latest 지정됨
$docker build -t [dockerHub ID]/[이미지명] .
  • 이미지 생성 확인
docker images

4. Docker Hub에 Image push

  • DockerHub에 image 올리기
# Docker Hub Push 
docker push [DockerHub ID]/[image 파일명]
  • Docker Desktop 또는 Docker Hub 페이지를 통해 이미지 push 확인

4. EC2 Docker Image pull 및 실행

  • EC2에서 해당 이미지를 다운로드 받고, 실행

4.1 Docker Image 컨테이너화

  • 컨테이너: 실제로 실행되고 있는 도커 이미지 (실행되고 있는 이미지)
# Docker Pull + 컨테이너화(실행)

# 커맨드 기본 골조
docker run -d -p [로컬 port]:[도커 port] [dockerHub ID]/[이미지명]
  • 해당 컨테이너를 정지 시켰다가, 다시 실행 할때는 같은 명령어를 사용하면 안된다.
    -> 왜냐하면 Docker Hub 에서 해당 이미지를 다시 가져와서 실행을 시키기 때문에 EC2 내부에 image가 쌓이기 때문이다.
  • 이미 컨테이너가 존재한다면 docker start [컨테이너명 또는 ID] 로 실행 시켜야 한다.

4.2 컨테이너 실행 확인

# Docker 실행중인 컨터이너 확인
docker ps

# Docker 정지된 컨테이너 확인(실행중인것도 출력)
docker ps -a

4.3 EC2 접속

  • Docker 이미지가 실행 되고 있다면, EC2의 퍼블릭 IPv4 주소에 접속하여 확인

0개의 댓글