728x90
반응형
배포환경을 구성할 때 간혹 gradle의 다양한 버전을 이용해서 배포해야하는 경우가 있다.
서버에 세팅된 gradle 버전 말고 다른 버전을 사용해야 할 경우 젠킨스 플러그인 설치 말고 gradle이미지를 이용해서 빌드를 하고 이미지를 생성하는 방법을 사용할 수 있다.
Docker Multi Stage 라고 한다.
하나의 Dockerfile안에서 빌드하고 실행이미지를 생성할 수 있다.
이전단계의 artifact를 복사해서 새로운 빌드단계에서 사용할 수 있다.
Dockerfile
FROM gradle:6.9.2-jdk11-alpine AS TEMP_BUILD_IMAGE
WORKDIR /home/gradle/src/
COPY --chown=gradle:gradle . /home/gradle/src
USER root
RUN chown -R gradle /home/gradle/src
COPY . .
RUN gradle clean bootJar
FROM openjdk:11-jre-slim
COPY --from=TEMP_BUILD_IMAGE $APP_HOME/build/libs/ROOT.jar /application/ROOT.jar
WORKDIR /application
EXPOSE 8080
ENTRYPOINT ["java", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-Djava.security.egd=file:/dev/./urandom","-jar","/application/ROOT.jar"]
설명을 하자면
FROM 명령어에 AS 빌드이름을 이용해서 이름을 지정한다.
그리고 다음에 나오는 FROM절에서 COPY명령을 이용해 사용할 수 있다.
첫 번째 단계에서 AS TEMP_BUILD_IMAGE라는 이름을 이용해서 gradle빌드 환경을 구성했다.
COPY --chown=gradle:gradle . /home/gradle/src
호스트의 소스를 gradle 권한을 주면서 컨테이너로 복사한다.
RUN gradle clean bootJar
컨테이너에서 gradle로 빌드한다.
COPY --from=TEMP_BUILD_IMAGE $APP_HOME/build/libs/ROOT.jar /application/ROOT.jar
후속 FROM에서 COPY명령어를 이용해서 이전 artifact를 현재 빌드단계로 복사해온다.
빌드된 이미지를 실행파일로 만들어서 최종이미지가 만들어진다.
RUN jar -xvf /application/ROOT.jar
복사해온 이미지를 풀고 싶다면 RUN명령어를 쓰면 된다.
다만, FROM이미지가 jre면 jar가 없기 때문에 jdk를 이용해야 한다.
728x90
반응형
'Docker' 카테고리의 다른 글
docker에 prometheus + grafana 올리기 (Spring boot) (0) | 2022.11.08 |
---|---|
Docker에 Jenkins설치 (0) | 2022.10.28 |
Docker image offline 설치 이미지 오프라인에서 사용 (0) | 2022.03.17 |
wsl2 우분투 cannot connect to the docker daemon at unix:///var/run/docker.sock. is the docker daemon running? (0) | 2022.02.25 |
Docker mariadb 설치 (0) | 2022.02.02 |