-
[Spring boot + Docker + Swagger3] Ubuntu 환경의 Docker 컨테이너로 Spring boot 배포하기(with Swagger3 And jar)프로젝트 노트 2024. 8. 8. 10:43
최근 우분투 환경의 도커에 외장 톰캣을 두고 war로 배포를 하고 있었습니다.
Maven으로 빌드를 하여 손쉽게 War를 만들고 그를 Tomcat에 배포하며 쉽게쉽게 사용을 하고 있었습니다.
여기에 신규 프로젝트를 하면서 내장 톰캣을 쓰기위해 jar로 빌드를 하였고, 여기서 문제에 당면하게 되었습니다.
기존의 방식대로 하니 배포가 잘 되지 아니하는 것이었죠..
404 Not Found가 뜨며 멘붕에 빠져있었습니다.
ServletInitializer를 통해 부트 환경을 이니셜라이즈하게 만들어보려 했으나 빠르게 실패...
멘붕에 빠져있다가 아예 도커 이미지로 만들어서 내장 톰캣을 도커에 띄우는 방향으로 가닥을 잡았습니다.
Gradle의 빌드에 보면 jar와 bootJar Task가 있습니다. clean 이후 bootJar를 선택하여 Jar를 생성해줍니다.
bootJar가 실행되고 나면 다음과 같은 로그를 확인할 수 있습니다.
여기서는 docker가 깔려있다는 가정 하에 docker로 이미지를 빌드하여 배포하는 부분에 대해 확인해보겠습니다.
빌드가 완료되면 프로젝트 내에 build > libs 라는 폴더가 만들어지고 그 안에 여러분께서 작성하신 프로젝트 이름으로 .jar파일이 만들어집니다.
이 jar 파일을 통해 Dockerizing할 수 있도록 Dockerfile을 만들어줍니다. 저는 개인적으로 프로젝트 루트에 만들었습니다.
FROM openjdk:17 ARG JAR_FILE=build/libs/*.jar COPY ${JAR_FILE} app.jar EXPOSE 8080 ENV TZ=Asia/Seoul ENTRYPOINT ["java","-jar","app.jar"]
만들어진 Dockerfile을 통해 도커 이미지를 만들어주도록 docker build를 시행합니다.
여기서 --platform linux/amd64 의 경우 도커가 운용될 서버가 리눅스 Ubuntu환경이기에 linux/amd64로 빌드를 하라는 명령어입니다.
docker build --platform linux/amd64 -t example ./
(이걸 몰라서 한참을 헤맸던...)이를 통해 example:latest 이미지가 만들어집니다.
이렇게 생성한 이미지를 docker save를 토하여 .tar파일로 만들어 운영 서버로 이동시킬 준비를 합니다.
# 빌드 서버에서 example.tar로 이미지들을 압축 docker save -o ./example.tar example:latest
이렇게 되면 Dockerfile이 있는 곳에 example.tar가 만들어집니다.
이를 운영 서버로 옮긴 이후 서버에서 docker load로 이미지를 꺼내옵니다.
# 운영 서버에서 docker load -i 명령어로 이미지를 로드 docker load -i ./example.tar
이렇게 하면 운영서버에서 도커 이미지를 사용할 준비가 모두 끝난것입니다.
이제 docker run을 통해 서비스를 올려보겠습니다.
# docker run을 통해 로드한 이미지를 컨테이너로 올려줍니다. docker run -d --name example -p 8080:8080 exmaple:latest
example이라는 컨테이너를 8080포트로 올려 서비스를 서빙하면 됩니다!
'프로젝트 노트' 카테고리의 다른 글
[SpringBoot + Docker + Jenkins + GitLab Webhook] Docker 환경에서 Jenkins 설치 GitLab Webhook 연동, Jenkins 내부에 Docker 설치하여 이미지 빌드하기 (0) 2024.08.19 [IntelliJ] Java Class 파일 주석 템플릿 설정하기 (0) 2024.08.18 [Spring Boot + Gradle] 외장 톰캣에 War로 배포하기 (0) 2024.08.06 [Nginx] 페이지 새로고침 시 404 Page Not Found가 뜬다면?! (0) 2024.05.20 Ubuntu Docker-Compose 설치 (0) 2024.05.14