**스프링부트 도커파일 멀티 스테이지 공식문서 예제 가져오기**

# 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의 빌드랑 도커파일의 빌드의 차이점이 뭐지?

# 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버전으로 설정함

(개발자가 함부로 복붙하면 안되는 이유)