[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 이외의 사용자로 지정