도커파일(Dockerfile)은 Docker 이미지를 빌드하기 위한 스크립트로, 명령어들을 조합하여 이미지를 정의합니다.
1. FROM
- 역할: 이미지를 빌드할 때 기반(base) 이미지 지정.
- 형식:
FROM <이미지>:<태그>
- 설명: 도커파일은 반드시 하나 이상의
FROM
명령어를 포함해야 합니다.- 예:
FROM ubuntu:20.04
→ Ubuntu 20.04를 기반 이미지로 사용.
- 예:
- 예제:
Python 3.10 슬림 이미지를 기반으로 새로운 이미지를 만듭니다.FROM python:3.10-slim
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.py
와requirements.txt
파일을 이미지의/app
디렉토리로 복사.
6. ADD
- 역할: 파일을 컨테이너 이미지로 추가 (복사 + 압축 파일 해제 지원).
- 형식:
ADD <소스> <대상>
- 설명:
COPY
와 비슷하지만, 추가적으로 URL 다운로드 및 압축 파일 자동 해제 기능이 있습니다. - 예제:
위 명령어는 URL에서 파일을 다운로드하여 컨테이너 이미지에 추가.ADD https://example.com/resource.tar.gz /app/resource.tar.gz
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"]
설명:
- Python 3.10 기반으로 이미지를 빌드.
/app
디렉토리로 코드를 복사하고, 종속성을 설치.- 컨테이너 실행 시
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 |