Dockerfile 작성 가이드: 멀티 스테이지 빌드와 최적화

💡 핵심 요약 (Executive Summary)

본 가이드는 Dockerfile syntax 핵심 가이드 및 실전 아키텍처의 핵심 개념, 실전 구성 명령어 및 아키텍처 베스트 프랙티스를 다룹니다. 클라우드 네이티브 및 인프라 엔지니어링 실무에 즉시 활용 가능하도록 체계적으로 정리했습니다.

📑 Table of Contents
Samples

Syntax

1. 기본 명령어
FROM
  • 이미지를 기반으로 새 이미지를 생성.
  • 형식: FROM <이미지>:<태그>
  • 예: FROM node:16
RUN
  • Docker 이미지 생성 중 실행할 명령어를 지정.
  • 쉘 형식: RUN <명령어>
  • exec 형식: RUN ["실행파일", "매개변수1", "매개변수2"]
  • 예:
docker
RUN apt-get update && apt-get install -y curl
CMD
  • 컨테이너 실행 시 기본적으로 실행될 명령어를 지정.
  • 형식:
  • 쉘 형식: CMD <명령어>
  • exec 형식: CMD ["실행파일", "매개변수1", "매개변수2"]
  • 예:
docker
CMD ["node", "app.js"]
ENTRYPOINT
  • 컨테이너의 실행 시작점을 설정.
  • CMD와 비슷하지만 고정 실행을 더 강조.
  • 형식: ENTRYPOINT ["실행파일", "매개변수1"]
  • 예:
docker
ENTRYPOINT ["python3", "script.py"]
COPY
  • 파일 또는 디렉토리를 컨테이너로 복사.
  • 형식: COPY <호스트 경로> <컨테이너 경로>
  • 예:
docker
COPY app.js /usr/src/app/
ADD
  • 파일 복사 + URL 다운로드 및 압축 해제 가능.
  • 형식: ADD <호스트 경로 또는 URL> <컨테이너 경로>
  • 예:
docker
ADD archive.tar.gz /usr/src/app/
WORKDIR
  • 이후 명령어가 실행될 작업 디렉토리를 설정.
  • 형식: WORKDIR <경로>
  • 예:
docker
WORKDIR /usr/src/app
EXPOSE
  • 컨테이너가 수신 대기할 포트를 지정.
  • 형식: EXPOSE <포트>
  • 예:
docker
EXPOSE 3000
ENV
  • 환경 변수를 설정.
  • 형식: ENV <키> <값>
  • 예:
docker
ENV NODE_ENV production
ARG
  • Dockerfile 빌드 시 전달받을 매개변수를 지정.
  • 형식: ARG <키>=<기본값>
  • 예:
docker
ARG APP_VERSION=1.0
VOLUME
  • 컨테이너와 호스트 간 공유할 볼륨을 설정.
  • 형식: VOLUME ["<경로>"]
  • 예:
docker
VOLUME ["/data"]
USER
  • 컨테이너 실행 사용자 계정을 설정.
  • 형식: USER <사용자>[:그룹]
  • 예:
docker
USER 1001
LABEL
  • 메타데이터를 설정.
  • 형식: LABEL <키>=<값>
  • 예:
docker
LABEL maintainer="[email protected]"

2. 고급 문법
ONBUILD
  • 부모 이미지에서 트리거되는 명령어를 설정.
  • 형식: ONBUILD <명령어>
  • 예:
docker
ONBUILD RUN echo "Triggered from base image!"
HEALTHCHECK
  • 컨테이너 상태를 확인.
  • 형식: HEALTHCHECK [옵션] CMD <명령어>
  • 예:
docker
HEALTHCHECK --interval=30s --timeout=10s \
    CMD curl -f http://localhost/health || exit 1

3. 주석
  • #로 시작하며 Dockerfile의 주석을 작성.
  • 예:
docker
# 이 Dockerfile은 Node.js 애플리케이션을 위한 것입니다.

4. 명령어의 실행 순서
  • Dockerfile은 위에서 아래로 순차적으로 실행됩니다.
  • 명령어의 순서에 따라 캐싱이 적용되므로 최적화를 위해 자주 변경되지 않는 명령어는 위쪽에 작성하는 것이 좋습니다.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *