Infra/Docker

[Docker] Dockerfile 작성법

해치 2025. 5. 31. 10:50
728x90

Dockerfile?

Dockerfile은 도커 이미지(Docker Image)를 만들기 위해 사용자가 명령줄에서 실행할 수 있는 명령어들을 모아놓은 텍스트 파일이다.

일일이 명령어를 입력하는 대신, 이 파일에 한 번에 정의해두면 Docker가 자동으로 이미지를 빌드한다.
FROM, COPY, RUN 같은 명령어를 통해 베이스 이미지 설정부터 환경 구성, 실행 방식까지 지정할 수 있다.

 

 

Dockerfile 명령어

명령어 설명
ADD 로컬 또는 원격 파일/디렉토리를 추가함
ARG 빌드 시 사용할 변수 설정 (빌드 타임 변수)
CMD 컨테이너 실행 시 기본으로 사용할 명령어 지정
COPY 파일이나 디렉토리를 복사함
ENTRYPOINT 컨테이너 실행 시 기본 실행 파일 지정
ENV 환경 변수 설정
EXPOSE 애플리케이션이 사용하는 포트 명시
FROM 베이스 이미지로부터 새로운 빌드 스테이지 시작
HEALTHCHECK 컨테이너 실행 시 헬스 체크 명령어 지정
LABEL 이미지에 메타데이터(키-값 쌍) 추가
MAINTAINER 이미지 작성자 정보 명시 (Deprecated됨)
ONBUILD 해당 이미지를 기반으로 다른 이미지 빌드 시 실행될 명령어
RUN 이미지 빌드시 실행할 명령어 지정
SHELL 기본으로 사용할 셸(shell) 설정
STOPSIGNAL 컨테이너 종료 시 사용할 시스템 시그널 지정
USER 컨테이너 실행 시 사용할 사용자 및 그룹 설정
VOLUME 컨테이너와 호스트 간의 볼륨 마운트 설정
WORKDIR 작업 디렉토리 설정 (이후 명령어의 기준 디렉토리)

 

Dockerfile 작성예시

FROM python:3.8-slim-buster
WORKDIR /app
COPY app.py ./
COPY requirements.txt ./
RUN pip3 install -r requirements.txt
EXPOSE 4000
CMD ["python3", "-m", "flask", "run", "--host=0.0.0.0", "--port=4000"]

 

FROM python:3.8-slim-buster
  • 베이스 이미지로 python:3.8-slim-buster를 사용함
  • Python 3.8이 설치된 경량(debian buster 기반) 이미지

 

WORKDIR /app
  • 이후 실행될 모든 명령어의 작업 디렉토리를 /app으로 설정
  • 이 디렉토리가 자동으로 생성되며, cd /app과 같은 효과

 

COPY app.py ./
COPY requirements.txt ./
  • 호스트 머신의 app.py와 requirements.txt 파일을 컨테이너의 /app 디렉토리에 복사

 

RUN pip3 install -r requirements.txt
  • requirements.txt에 정의된 Python 패키지들을 설치
  • 이미지 빌드 시 실행되는 명령어

 

EXPOSE 4000
  • 컨테이너가 4000번 포트를 사용한다는 것을 명시
  • 설명용이며, 실제 포트를 열려면 docker run -p 4000:4000처럼 별도로 지정해야 함

 

CMD ["python3", "-m", "flask", "run", "--host=0.0.0.0", "--port=4000"]
  • 컨테이너가 실행될 때 실행되는 기본 명령어
  • Flask 앱을 0.0.0.0:4000에서 실행
  • 0.0.0.0은 외부에서 접속 가능하게 열어주는 IP

 

Dockerfile 빌드

docker build -t '이미지명' 'Dockerfile 경로'

 

빌드한 이미지 실행 명령어 run

docker run '이미지명'