Spring boot 프로젝트 생성 및 Dockerfile 생성

먼저 간단한 프로젝트를 생성하여 클로닝 해놓는다.

https://github.com/thom-droid/docker-test.git

현재는 windows 환경에서 진행하므로 docker와 WSL를 실행한다.

프로젝트 루트로 이동하여, Dockerfile을 생성한 뒤 다음과 같이 작성한다.

FROM eclipse-temurin:11-jdk-alpine as TEMP_BUILD_IMAGE

ENV APP_HOME=/usr/app/
WORKDIR $APP_HOME

COPY gradlew $APP_HOME
COPY build.gradle $APP_HOME
COPY settings.gradle $APP_HOME
COPY gradle $APP_HOME/gradle
COPY src src
RUN ./gradlew bootJar

FROM eclipse-temurin:11-jdk-alpine
ENV APP_HOME=/usr/app/
WORKDIR $APP_HOME

COPY --from=TEMP_BUILD_IMAGE $APP_HOME/build/libs/*.jar $APP_HOME/app.jar

ENTRYPOINT ["java", "-jar", "./app.jar"]

FROM와 as <NAME>을 사용하여 FROM에서 실행한 결과를 한 Dockerfile 안의 다른 instruction에서 사용할 수 있다.

이를 multi-stage 빌드라고 하며 필요한 부분만을 사용해서 빌드하여 도커 이미지의 크기를 줄이는 방법이다. 외부 도커 이미지를 stage에 추가할 수도 있다.

COPY --from=nginx:latest /etc/nginx/nginx.conf /nginx.conf

위 코드를 간단히 해석하면 다음과 같다. 먼저 처음 FROM은