도커파일(Dockerfile)은 Docker 이미지를 빌드하기 위한 스크립트로, 명령어들을 조합하여 이미지를 정의합니다.


1. FROM

  • 역할: 이미지를 빌드할 때 기반(base) 이미지 지정.
  • 형식: FROM <이미지>:<태그>
  • 설명: 도커파일은 반드시 하나 이상의 FROM 명령어를 포함해야 합니다.
    • 예: FROM ubuntu:20.04 → Ubuntu 20.04를 기반 이미지로 사용.
  • 예제:
    FROM python:3.10-slim
    Python 3.10 슬림 이미지를 기반으로 새로운 이미지를 만듭니다.

2. LABEL

  • 역할: 이미지에 메타데이터 추가.
  • 형식: LABEL <키>=<값>
  • 설명: 이미지에 이름, 설명, 버전 정보 등을 기록할 수 있습니다.
  • 예제:
    LABEL maintainer="example@example.com"
    LABEL version="1.0"
    LABEL description="This is a sample Dockerfile"
    해당 이미지는 메타데이터로 관리자를 지정하고 버전 및 설명을 추가합니다.

3. ARG

  • 역할: 빌드 시점에 전달되는 변수를 정의.
  • 형식: ARG <변수명>[=<기본값>]
  • 설명: ARG는 도커파일 빌드 시에만 사용되며, 컨테이너 실행 중에는 사용할 수 없습니다.
  • 예제:
    ARG APP_ENV=production
    RUN echo "Environment is $APP_ENV"
    docker build--build-arg 옵션으로 값을 전달할 수 있습니다:
    docker build --build-arg APP_ENV=development .

4. ENV

  • 역할: 컨테이너 실행 시 사용할 환경변수 설정.
  • 형식: ENV <변수명>=<값>
  • 설명: 컨테이너 내부에서 환경 변수를 설정.
  • 예제:
    ENV APP_ENV=production
    ENV APP_PORT=8080

5. COPY

  • 역할: 로컬 파일을 컨테이너 이미지에 복사.
  • 형식: COPY <소스> <대상>
  • 설명: 빌드 컨텍스트(도커 빌드 시 지정된 디렉토리)에서 파일을 이미지 내부로 복사합니다.
  • 예제:
    COPY app.py /app/app.py
    COPY requirements.txt /app/requirements.txt
    • app.pyrequirements.txt 파일을 이미지의 /app 디렉토리로 복사.

6. ADD

  • 역할: 파일을 컨테이너 이미지로 추가 (복사 + 압축 파일 해제 지원).
  • 형식: ADD <소스> <대상>
  • 설명: COPY와 비슷하지만, 추가적으로 URL 다운로드 및 압축 파일 자동 해제 기능이 있습니다.
  • 예제:
    ADD https://example.com/resource.tar.gz /app/resource.tar.gz
    위 명령어는 URL에서 파일을 다운로드하여 컨테이너 이미지에 추가.

7. RUN

  • 역할: 이미지를 빌드할 때 실행할 명령어를 지정.
  • 형식: RUN <명령어>
  • 설명: 소프트웨어 설치, 설정 파일 변경 등 작업을 수행.
  • 예제:
    RUN apt-get update && apt-get install -y python3
    • 컨테이너 빌드 과정에서 패키지를 업데이트하고 Python3 설치.

8. CMD

  • 역할: 컨테이너 실행 시 기본적으로 실행할 명령어를 설정.
  • 형식: CMD ["<명령어>", "<인수1>", "<인수2>"]
  • 설명: 하나의 도커파일에서 하나의 CMD만 사용할 수 있습니다.
  • 예제:
    CMD ["python3", "app.py"]
    컨테이너 실행 시 기본적으로 python3 app.py를 실행.

9. ENTRYPOINT

  • 역할: 컨테이너 실행 시 항상 실행할 기본 명령어를 설정.
  • 형식: ENTRYPOINT ["<명령어>", "<인수>"]
  • 설명: CMD와 다르게 추가 인수를 전달하면 기본 명령어 뒤에 붙음.
  • 예제:
    ENTRYPOINT ["python3"]
    CMD ["app.py"]
    • 기본적으로 python3 app.py 실행.
    • 실행 시 docker run image script.py를 입력하면 python3 script.py로 실행.

10. EXPOSE

  • 역할: 컨테이너에서 사용하는 네트워크 포트를 지정.
  • 형식: EXPOSE <포트번호>
  • 설명: EXPOSE는 컨테이너가 특정 포트를 사용한다고 명시적으로 알려줍니다.
  • 예제:
    EXPOSE 8080
    • 컨테이너에서 8080 포트를 사용.

11. WORKDIR

  • 역할: 작업 디렉토리 설정.
  • 형식: WORKDIR <디렉토리>
  • 설명: RUN, CMD, ENTRYPOINT 등의 명령이 실행될 기본 디렉토리를 지정.
  • 예제:
    WORKDIR /app
    COPY . /app
    CMD ["python3", "app.py"]

12. VOLUME

  • 역할: 컨테이너의 특정 디렉토리를 호스트 또는 다른 컨테이너와 공유.
  • 형식: VOLUME ["/경로1", "/경로2"]
  • 예제:
    VOLUME ["/data"]

13. HEALTHCHECK

  • 역할: 컨테이너의 상태를 확인하는 명령어 설정.
  • 형식:
    HEALTHCHECK [옵션] CMD <명령어>
  • 예제:
    HEALTHCHECK --interval=5m --timeout=3s \
      CMD curl -f http://localhost/ || exit 1

14. USER

  • 역할: 컨테이너에서 명령어를 실행할 사용자 지정.
  • 형식: USER <사용자>
  • 예제:
    USER nonrootuser

15. ONBUILD

  • 역할: 다른 도커파일에서 부모 이미지로 사용될 때 실행할 명령어 정의.
  • 형식: ONBUILD <명령어>
  • 예제:
    ONBUILD RUN echo "This will run in child image"

예제 도커파일

# Base image
FROM python:3.10-slim

# Maintainer information
LABEL maintainer="example@example.com"

# Build arguments
ARG APP_ENV=production

# Environment variables
ENV APP_PORT=8080

# Set working directory
WORKDIR /app

# Copy application code
COPY . /app

# Install dependencies
RUN pip install -r requirements.txt

# Expose application port
EXPOSE 8080

# Run application
CMD ["python3", "app.py"]

설명:

  1. Python 3.10 기반으로 이미지를 빌드.
  2. /app 디렉토리로 코드를 복사하고, 종속성을 설치.
  3. 컨테이너 실행 시 python3 app.py가 실행.

'Docker' 카테고리의 다른 글

도커 인 액션 8장  (2) 2024.12.06
도커 인 액션 7장  (0) 2024.12.06
유니온 파일시스템  (1) 2024.12.06
Docker의 CMD와 ENTRYPOINT  (0) 2024.12.06
파이프(pipe) ( | )  (1) 2024.12.05

+ Recent posts