저작권 안내
- 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
- 책 또는 웹사이트의 내용을 발췌, 요약하여 강의 자료, 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.
Docker로 Spring Boot 애플리케이션 구축하기
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 /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 공유는 허용합니다.