FROM python:3.11-slim AS builder
RUN apt-get update && apt-get install -y --no-install-recommends \\
build-essential \\
gcc \\
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY . .
RUN pip install --no-cache-dir --user Flask==2.3.3
FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY app.py .
ENV PATH=/root/.local/bin:$PATH
ENV FLASK_APP=app.py
EXPOSE 5000
CMD ["flask", "run", "--host=0.0.0.0", "--port=5000"]
1단게: 빌드 스테이지
FROM python:3.11-slim AS builder: 빌드 전용 환경을 만든다
RUN apt-get update ... : 파이선 패키지 설치 시 필요한 컴파일 도구들을 설치한다 설치 후
/var/lib/apt/lists/*를 삭제해 용량을 아낀다
RUN pip install --no-cache-dir --user Flask==2.3.3: FLASK를 /root/.local 경로에 설치한다 시스템 전체가 아닌 사용자 로컬 영역에 설치하여 나중에 이 폴더만 사용하기 위해서다
2단계 실행 스테이지
FROM python:3.11-slim: 1단계와 달리 빌드 도구가 없는 가벼운 이미지에서 시작한다
COPY --from=builder /root/.local /root/.local: 빌드 스테이지에서 설치한 파이선 패키지들만 쏙 빼와서 현재 이미지에 넣는다
CMD ["flask", "run", "--host=0.0.0.0", "--port=5000"]:컨테이너가 실행될 때 모든 네트워크(0.0.0.0)의 5000번 포트로 Flask 서버를 띄운다