브렌쏭의 Veritas_Garage

[Docker] Multi Stage Build 본문

[Project_하다]/[Project_공부]

[Docker] Multi Stage Build

브렌쏭 2024. 8. 6. 14:15

Multi Stage Docker Build

  • Dockerfile을 여러개로 나누어서 빌드하는 방법
  • 빌드를 여러 단계로 나누어서 진행하면, 이미지의 크기를 줄일 수 있음
    • ->빌드 시간이 줄어듦
# 1st stage
FROM python:3.8-slim as builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --upgrade pip && \
    pip install --no-cache-dir -r requirements.txt

# 2nd stage
FROM python:3.8-slim
WORKDIR /app
COPY --from=builder /app /app
COPY . .
CMD ["python", "app.py"]
  • 1st stage
    • python:3.8-slim 이미지를 사용
    • requirements.txt를 복사하고, 패키지 설치
    • /app 디렉토리에 패키지 설치
    • builder라는 이름으로 이미지 생성
  • 2nd stage
    • python:3.8-slim 이미지를 사용
    • /app 디렉토리에 builder 이미지의 /app 디렉토리를 복사
    • 현재 디렉토리의 모든 파일을 복사
    • app.py 실행
  • docker build -t multi-stage .
  • docker run -it --rm multi-stage
  • docker images로 이미지 확인
    • 1st stage 이미지는 없음
    • 2nd stage 이미지만 존재

원리

  • 1st stage에서 필요한 패키지를 설치하고, 2nd stage에서 필요한 파일만 복사
  • 1st stage에서 생성된 이미지는 2nd stage에서만 사용되기 때문에, 1st stage 이미지는 삭제됨
  • 2nd stage에서 생성된 이미지만 사용하면 됨

도커 컨테이너 생성시 고려할 점

1) 1 컨테이너 당 1 프로세스
2) 변경 불가능한 인프라( Immutable Infrastructure )원칙 준수

  • 관리 - 버전 태그 사용
  • 검증
  • 빌드와 배포
    3) 경량 도커 이미지로 생성
    4) 실행 계정은 root 이외의 사용자로 지정
Comments