반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- SMTP
- BitBucket
- serverless
- SAA
- aws
- SPF
- DKIM
- gochannel
- docker
- SAA-CO3
- Java
- 메일 인증 프로토콜
- Kubernetes
- SAA-CO2
- Datadog
- dMarc
- Lambda
- Certified Solutions Architect
- EKS
- Fargate
- Ingress
- 도커
- aws ses
- go
- K8S
- goroutine
- awscli
- Fluentbit
- JVM
Archives
- Today
- Total
DevOps Tasks
Docker Multi-Stage Build 로 이미지 사이즈 및 빌드 속도 최적화하기 본문
728x90
반응형
Docker Multi Stage Build 전 기본적인 Docker에 대해서 읽어보면 이해하는데 도움이 된다.
Docker Multi-Stage Builds
Multi Stage Bulids에서는 여러 개의 FROM 을 Dockerfile에 사용한다.
각 FROM 명령어는 서로 다른 기반을 사용할 수 있으며 각 명령어는 빌드의 새로운 단계를 시작한다.
한 단계에서 다른 단계로 아티팩트를 선택적으로 복사하여 최종 이미지에 원하지 않는 모든 것을 남겨 둘 수 있다.
Multi-Stage Build를 사용하지 않으면 이미지 용량이 커지거나 빌드 과정이 번거로운 등의 단점이 있다.
하나의 Dockerfile 안에 여러 개의 FROM 이미지를 정의함으로써 빌드 완료 시 최종적으로 생성될 이미지의 크기를 줄여준다.
반드시 필요한 실행 파일만 최종 이미지 결과물에 포함시킴으로써 이미지 크기를 줄일 수 있다
하나의 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
반응형
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 |