이재홍의 언제나 최신 Docker - Unit 12.2 Spring Boot Dockerfile 작성하기

저작권 안내
  • 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
  • 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.

Docker로 Spring Boot 애플리케이션 구축하기

이재홍 http://www.pyrasis.com

Spring Boot Dockerfile 작성하기

OpenJDK 설치가 끝났으니 https://github.com/spring-guides/gs-spring-boot.git 저장소에서 예제 Spring Boot 애플리케이션을 클론합니다. 그리고 저장소 안의 initial 디렉터리 안으로 이동합니다.

우분투
~$ sudo apt update
~$ sudo apt install -y git
CentOS
~$ sudo yum install -y git
~$ git clone https://github.com/spring-guides/gs-spring-boot.git
~$ cd gs-spring-boot/initial

먼저 .dockerignore 파일이 필요합니다. 다음 내용을 .dockerignore로 저장합니다.

~/gs-spring-boot/initial/.dockerignore
.gradle
.mvn
.idea
build

이제 다음 내용을 Dockerfile로 저장합니다.

~/gs-spring-boot/initial/Dockerfile
FROM openjdk:18 AS builder

COPY . /tmp
WORKDIR /tmp

RUN sed -i 's/\r$//' ./gradlew
RUN ./gradlew build

FROM openjdk:18
COPY --from=builder /tmp/build/libs/*.jar ./

CMD ["java", "-jar", "spring-boot-0.0.1-SNAPSHOT.jar"]

여기서는 openjdk:18 이미지를 사용하도록 하겠습니다.

  • FROM으로 openjdk:18을 기반으로 이미지를 생성하도록 설정합니다. 특히 빌드한 파일만 가져올 수 있도록 AS builder로 설정합니다.
  • Spring Boot 애플리케이션 디렉터리를 /tmp 디렉터리에 추가합니다.
  • WORKDIR로 /tmp를 작업 디렉터리로 설정합니다.
  • RUN으로 RUN sed -i 's/\r$//' ./gradlew을 실행합니다. 왜냐하면 윈도우에서 저장소를 클론했을 경우 gradlew 파일이 CRLF(\r\n)으로 되어 있습니다. 이것을 LF(\n)으로 바꿔줍니다. 리눅스에서 클론했을 경우 이 부분은 생략해도 됩니다.
  • RUN으로 RUN ./gradlew build을 실행하여 Spring Boot 애플리케이션을 빌드합니다.
  • 다시 FROM으로 openjdk:18을 지정해서 이미지를 생성합니다.
  • COPY --from=builder /tmp/build/libs/*.jar ./: COPY로 파일을 복사할 때 --from 옵션을 지정하면 로컬이 아닌 해당 이미지에서 파일을 복사해옵니다. 여기서는 --from=builder이므로 FROM openjdk:18 AS builder의 builder에서 파일을 복사해옵니다. 즉, builder에 있는 /tmp/build/libs/*.jar ./로 복사합니다.
  • CMD로 java -jar spring-boot-0.0.1-SNAPSHOT.jar를 실행하도록 설정합니다.

docker build 명령으로 이미지를 생성합니다.

~/gs-spring-boot/initial$ sudo docker build --tag spring-boot .

이제 docker run 명령으로 컨테이너를 생성해봅니다.

~/gs-spring-boot/initial$ sudo docker run -it --rm -p 8080:8080 spring-boot
  • --rm 옵션은 컨테이너를 종료하면 컨테이너를 바로 삭제합니다.

웹 브라우저에서 http://<컨테이너 IP 주소 또는 도메인>:8080으로 접속해봅니다(Docker Desktop에서 실행했다면 http://127.0.0.1:8080입니다).

Greetings from Spring Boot! 화면이 표시되면 Spring Boot 앱이 정상적으로 실행된 것입니다. 확인이 끝났으면 Ctrl+C를 눌러 Spring Boot 앱을 종료합니다.


저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

2022-10-03