Dockerfile Syntax

syntax

FROM

RUN

WORKDIR

COPY

ADD

CMD

ENTRYPOINT

ENV

ARG

EXPOSE

VOLUME

USER

LABEL

SHELL

STOPSIGNAL

⚡️ Description

FROM

  • 베이스 이미지 지정한다.

  • Docker Hub 에서 원하는 이미지를 찾을 수 있다.

RUN

  • Dockerfile에서 이미지 빌드 과정 중에 실행된다.

  • 각 RUN 명령어마다 새로운 레이어가 생성되므로, 캐시를 효과적으로 사용하여 빌드 속도를 높일 수 있다.

RUN apt-get update && apt-get install -y \
    git \
    curl

WORKDIR

  • 명령이 실행될 작업 디렉토리를 지정한다.

  • 해당 디렉토리가 없다면 생성된다.

COPY

  • 호스트 머신의 파일을 컨테이너 내부로 복사한다.

ADD

  • COPY와 유사하나 추가적인 기능 제공한다.

  • 로컬 파일이나 URL 복사할 수 있으며, 압축 파일 자동으로 해제하고 원격 파일 다운로드 할 수 있다.

CMD

  • 컨테이너가 시작될 때 실행하는 명령을 설정한다.

  • 도커 파일에서 한 번만 사용해야 한다.

  • 동시에 여러 개의 CMD 지시문을 사용할 수 있지만, 마지막 CMD만 적용된다.

CMD ["executable", "param1", "param2"]
CMD ["node", "app.js"]

ENTRYPOINT

  • 컨테이너가 시작될 때 실행할 실행 파일 또는 스크립트를 설정한다.

  • CMD와 달리 항상 실행되며, CMD와 함께 사용될 경우에는 CMD의 인자로 사용된다.

ENTRYPOINT ["executable", "param1", "param2"]

ENV

  • 환경 변수를 설정한다.

ARG

  • 빌드 중에 전달되는 인수를 정의한다.

EXPOSE

  • 컨테이너가 노출할 포트 설정한다.

VOLUME

  • 호스트 머신과 컨테이너 간에 볼륨을 공유할 수 있도록 설정한다.

USER

  • 컨테이너가 실행될 사용자를 설정한다.

HEALTHCHECK

  • 컨테이너의 상태를 확인하는 방법을 설정한다.

LABEL

  • 이미지에 메타데이터를 추가

  • LABEL version="1.0"

SHELL

  • 기본 쉘 지정

  • SHELL ["/bin/bash", "-c"]

STOPSIGNAL

  • 컨테이너가 종료될 때 보내질 시그널을 지정

  • STOPSIGNAL SIGTERM

실습

FROM node:14

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

CMD ["node", "app.js"]

EXPOSE 3000
FROM node:20.11-alpine

RUN apk update && apk add bash sudo vim

WORKDIR /app

COPY . .

RUN npm cache clean --force && rm -rf node_modules && npm install

EXPOSE 3000

CMD ["npm", "run", "start"]
FROM python:3.11

ENV PYTHONUNBUFFERED=1

WORKDIR /app

COPY requirements.txt .

RUN pip install --no-cache-dir -r requirements.txt

COPY . .

ENTRYPOINT ["uvicorn", "myproject.asgi:application", "--host", "0.0.0.0", "--port", "8000"]

Multi-Stage Build

FROM node:14 AS development

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

CMD ["npm", "run", "dev"]

FROM node:14 AS production

WORKDIR /app

COPY package*.json ./
RUN npm install --production

COPY . .

RUN npm run build

CMD ["npm", "start"]

Build Docker image with Multi-Stage

docker build --target development --t node:dev .
docker build --target production --t node:dev .

RUN, CMD, ENTRYPOINT 차이점과 쓰임새

syntaxdesc

RUN

이미지 빌드 중에 실행할 명령어 설정

CMD

컨테이너가 시작될 때 실행할 기본 명령 설정

ENTRYPOINT

컨테이너가 시작될 때 실행할 실행 파일 또는 스크립트를 설정하며, CMD명령어의 인자로 사용될 수 있음

FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .

# 컨테이너가 시작될 때 실행할 실행 파일을 설정합니다.
ENTRYPOINT ["node"]

# 컨테이너가 시작될 때 실행할 명령 및 파라미터를 설정합니다.
CMD ["app.js"]

Last updated