반응형
250x250
Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

DevOps Tasks

Docker Multi-Stage Build 로 이미지 사이즈 및 빌드 속도 최적화하기 본문

Docker

Docker Multi-Stage Build 로 이미지 사이즈 및 빌드 속도 최적화하기

데밥스 2023. 12. 23. 23:09
728x90
반응형

 

Docker Multi Stage Build 전 기본적인 Docker에 대해서 읽어보면 이해하는데 도움이 된다.

 

Docker

Docker 란? 컨테이너 환경에서 독립적으로 애플리케이션을 실행할 수 있도록 컨테이너를 만들고 관리하는 것을 도와주는 컨테이너 도구 도커는 서비스를 운용하는데 필요한 실행환경, 라이브러

rldnjsdlsi.tistory.com


Docker Multi-Stage Builds

 

Multi Stage Bulids에서는 여러 개의 FROM 을 Dockerfile에 사용한다.

각 FROM 명령어는 서로 다른 기반을 사용할 수 있으며 각 명령어는 빌드의 새로운 단계를 시작한다. 

한 단계에서 다른 단계로 아티팩트를 선택적으로 복사하여 최종 이미지에 원하지 않는 모든 것을 남겨 둘 수 있다.

Multi-Stage Build를 사용하지 않으면 이미지 용량이 커지거나 빌드 과정이 번거로운 등의 단점이 있다.

하나의 Dockerfile 안에 여러 개의 FROM 이미지를 정의함으로써 빌드 완료 시 최종적으로 생성될 이미지의 크기를 줄여준다.

반드시 필요한 실행 파일만 최종 이미지 결과물에 포함시킴으로써 이미지 크기를 줄일 수 있다

 

multi stage build

 

하나의 Dockerfile에 여러 개의 ( 중간 ) 이미지를 정의하고, 이미지끼리 빌드 결과물을 복사할 수 있는 기능

 


 

Java 의 동작 원리를 간단하게 파악한 후 Multi Stage Build 를 진행한다.

 

JDK, JRE, JVM

JVM (Java Virtual Machine)

 

  • Java Byte Code 를 운영체제에 맞게 해석해 주는 역할
  • JVM은 OS가 Byte Code를 이해할 수 있도록 해석해주는 역할
  • 메모리 관리 담당

 

JRE (Java Runtime Environment)

 

  • Java Class Libraries, JVM, Java Class Loader 포함
  • Class Loader, Class Libraries를 통해 Java 코드를 Library와 결합한 후 JVM에 넘겨 실행
  • JVM 이 원활하게 잘 작동할 수 있는 환경 제공

 

JDK (Java Development Kit)

 

  • 개발자들이 자바로 개발하는데 사용
  • 개발 시 필요한 라이브러리들과 javac, javadoc 등의 개발 도구들을 포함하고 있고 JRE 도 함께 포함

 


Docker Image 종류

 

  • name:version-stretch, buster, jessie
    • 데비안 릴리스 코드

 

  • name:version-windowsservercore
    • Windows Server 기반으로 작성된 이미지

 

  • name:version-slim
    • 실행하기 위한 최소한의 패키지만 설치된 이미지

 

  • name:version-alpine
    • alpine 이미지는 컨테이너 내부에서 사용하기 위해 제작된 운영 체제인 알파인 리눅스 프로젝트를 기반

 

# Stage 1: Build the application

FROM eclipse-temurin:17-jdk-alpine AS build
WORKDIR /app
COPY . .
RUN ./gradlew build

# Stage 2: Create the final image

FROM eclipse-temurin:17-jre-alpine AS runner
WORKDIR /app
COPY --from=build /app/build/libs/*.jar app.jar
EXPOSE 8080
CMD ["java", "-jar", "app.jar"]
  • Spring Boot Dockerfile

Getting Started | Spring Boot Docker

 

Getting Started | Spring Boot Docker

The Spring Boot Maven and Gradle plugins use buildpacks in exactly the same way that the pack CLI does in the following examples. The resulting images are identical, given the same inputs. Cloud Foundry has used containers internally for many years now, an

spring.io

반응형

Parallel stages with Buildkit

18.09 릴리즈부터 지원하는 기능이다.

사용하지 않는 build stage를 감지하고 제외시킨다.

독립적인 build stage는 병렬적 으로 수행한다.

Low Level Build라는 binary intermediate format 기반으로 동작한다.

Buildkit는 이미지 레이어를 병렬로 생성하여 전체 빌드 프로세스를 가속화한다.

 

$ DOCKER_BUILDKIT=1 docker build -t .

 

728x90
반응형

'Docker' 카테고리의 다른 글

Docker Command  (1) 2023.12.24
Docker 란?  (2) 2023.12.23