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 '이미지명'