Heroku는 더 이상 무료가 아니므로 Maven 및 Docker를 사용하여 Spring Boot 서비스를 Render.com에 배포하는 방법을 알려드리겠습니다.

우리 모두는 Heroku에 더 이상 프리 티어가 없다는 나쁜 소식을 들었습니다. 운 좋게도 훌륭한 개발자 경험을 제공하는 Render라는 훌륭한 대안이 있으며 프로덕션에 서비스를 배포하려는 경우 50% 이상 저렴할 수 있습니다.

해당 웹사이트를 방문하면 기본적으로 Java 애플리케이션을 지원하지 않지만 Docker는 지원한다는 것을 알 수 있습니다. 그러나 나와 같은 Docker 초보자라면 다음과 같이 생각할 것입니다. 좋아, 그건 문제가 아니야. 인터넷에서 Dockerfile을 가져오고 이를 사용하여 내 서비스를 배포합니다. 따라서 Google로 이동하여 Spring Boot Dockerfile을 검색하면 다음과 같은 결과를 얻을 수 있습니다.

FROM openjdk:8-jdk-alpine
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]


당신은 말할 것입니다. 그런 다음 코드를 푸시하면 Render가 변경 사항을 감지하고 로그를 확인하고… 오류가 발생합니다.



그래서 여기서 무슨 일이 일어났습니까? 앞서 언급했듯이 Render는 Java 응용 프로그램을 지원하지 않으며 이 Dockerfile은 호스트에 Maven이 설치되어 있고 실행했다고 가정합니다mvn install.

그래서 다음에 무엇을 할 수 있습니까? 이 문제를 해결하는 방법에는 두 가지가 있습니다.

1. Maven Docker 이미지 사용



Render에는 Maven이 설치되어 있지 않으므로 다음과 같이 컨테이너에 설치해야 합니다.

FROM maven:3.8.6-jdk-8-slim AS MAVEN_TOOL_CHAIN
COPY pom.xml /tmp/
COPY src /tmp/src/WORKDIR /tmp/
RUN mvn package FROM openjdk:8-jdk-alpine
COPY --from=MAVEN_TOOL_CHAIN  /tmp/target/*.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]


그리고 그게 다야. 이 Dockerfile을 푸시하면 애플리케이션이 시작됩니다.

2. Maven 래퍼 사용



두 번째 방법의 경우 로컬 컴퓨터에 Maven을 설치하고 프로젝트의 루트에서 다음 명령을 실행해야 합니다.

mvn -N wrapper:wrapper


프로젝트에 다음 파일이 추가되었음을 알 수 있습니다.



이 명령은 Maven을 프로젝트에 임베드합니다. 이렇게 하면 설치하지 않고도 Maven 명령을 실행할 수 있습니다. .gitignore 파일에 해당 파일을 포함하지 않도록 하세요.

이제 다음과 같이 Dockerfile을 수정해야 합니다.

FROM openjdk:8-jdk-alpine as build
WORKDIR /workspace/app
COPY mvnw .
COPY .mvn .mvn
COPY pom.xml .
COPY src src
RUN ./mvnw install -DskipTests
RUN mkdir -p target/dependency && (cd target/dependency; jar -xf ../*.jar)
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG DEPENDENCY=/workspace/app/target/dependency
COPY --from=build ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY --from=build ${DEPENDENCY}/META-INF /app/META-INF
COPY --from=build ${DEPENDENCY}/BOOT-INF/classes /app
ENTRYPOINT ["java","-cp","app:app/lib/*","com.package.Application"]

"com.package.Application"를 패키지 및 기본 클래스 이름으로 바꾸고 Kotlin 애플리케이션인 경우 Kt와 같이 접미사를 "com.package.ApplicationKt"로 추가하세요.

변경 사항을 푸시하면 렌더에서 애플리케이션이 실행되는 것을 볼 수 있습니다.

이것이 Render.com에 Spring Boot를 배포하는 데 필요한 전부입니다.

이 블로그 게시물에서 제시한 Dockerfile을 최적화할 수 있는 더 많은 방법이 있다고 확신하지만 언급했듯이 저는 아직 Docker 전문가가 아니므로 의견 섹션에 제안 사항을 자유롭게 게시하십시오.

도움이 되셨길 바라며, 읽어주셔서 감사합니다.

좋은 웹페이지 즐겨찾기