**스프링부트 도커파일 멀티 스테이지 공식문서 예제 가져오기**
# build
FROM openjdk:8-jdk-alpine AS build
WORKDIR /workspace/app
COPY . /workspace/app
RUN --mount=type=cache,target=/root/.gradle ./gradlew clean build
RUN mkdir -p build/dependency && (cd build/dependency; jar -xf ../libs/*.jar)
# run
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG DEPENDENCY=/workspace/app/build/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.depromeet.sulsul.SulsulApplication"]
에러 로그
#9 [build 4/5] RUN --mount=type=cache,target=/root/.gradle ./gradlew clean build
#9 0.254 /bin/sh: ./gradlew: Permission denied
#9 ERROR: executor failed running [/bin/sh -c ./gradlew clean build]: exit code: 126
------
> [build 4/5] RUN --mount=type=cache,target=/root/.gradle ./gradlew clean build:
#9 0.254 /bin/sh: ./gradlew: Permission denied
------
error: failed to solve: executor failed running [/bin/sh -c ./gradlew clean build]: exit code: 126
Error: buildx failed with: error: failed to solve: executor failed running [/bin/sh -c ./gradlew clean build]: exit code: 126
gradle.yml
의 권한 부분을 수정
# Modify Permission
- name: Build with Gradle
run: chmod +x ./gradlew
같은 에러...
gradle.yml의 빌드랑 도커파일의 빌드의 차이점이 뭐지?
Gradlew
이란?# build
FROM openjdk:8-jdk-alpine AS build
WORKDIR /workspace/app
COPY . /workspace/app
RUN chmod +x gradlew
RUN --mount=type=cache,target=/root/.gradle ./gradlew clean build
RUN mkdir -p build/dependency && (cd build/dependency; jar -xf ../libs/*.jar)
RUN chmod +x gradlew
은 성공했지만 다음 레이어에서 실패
#9 [build 4/6] RUN chmod +x gradlew
#9 DONE 0.3s
#10 [build 5/6] RUN --mount=type=cache,target=/root/.gradle ./gradlew clean build
#10 0.514 Downloading <https://services.gradle.org/distributions/gradle-7.4.1-bin.zip>
#10 1.097 ...........10%...........20%...........30%...........40%...........50%...........60%...........70%...........80%...........90%...........100%
#10 5.582
#10 5.582 Welcome to Gradle 7.4.1!
#10 5.582
#10 5.582 Here are the highlights of this release:
#10 5.583 - Aggregated test and JaCoCo reports
#10 5.583 - Marking additional test source directories as tests in IntelliJ
#10 5.583 - Support for Adoptium JDKs in Java toolchains
#10 5.583
#10 5.583 For more details see <https://docs.gradle.org/7.4.1/release-notes.html>
#10 5.583
#10 5.774 Starting a Gradle Daemon (subsequent builds will be faster)
#10 22.58 > Task :cleanQuerydslSourcesDir
#10 22.58 > Task :clean
#10 22.58 > Task :initQuerydslSourcesDir
#10 33.07 > Task :compileQuerydsl FAILED
#10 33.08
#10 33.17 FAILURE: Build failed with an exception.
#10 33.18
#10 33.18 * What went wrong:
#10 33.18 Execution failed for task ':compileQuerydsl'.
#10 33.18 > invalid source release: 11
invalid source release: 11
→ gradlew에서는 JAVA11로 빌드했는데 도커파일에서는 8버전으로 설정함
(개발자가 함부로 복붙하면 안되는 이유)