Dockerfile 지시어 / Dockerfile 작성법 / Docker image 작성법

Dockerfile 지시어

FROM

FROM <이미지>[:<태그>]
  • 모든 Dockerfile은 FROM 지시어로 시작해야 합니다.
  • 베이스 이미지를 지정하는 역할을 합니다.
  • 태그를 지정하지 않으면 자동으로 'latest' 태그가 사용됩니다.
  • 프로덕션 환경에서는 안정성을 위해 반드시 특정 버전을 지정하는 것이 좋습니다.

ENTRYPOINT와 CMD의 관계

기본 문법

ENTRYPOINT ["실행 파일", "파라미터1"]
CMD ["파라미터2", "파라미터3"]

동작 방식

ENTRYPOINT와 CMD가 함께 사용될 때:

  • ENTRYPOINT: 반드시 실행될 명령어를 지정
  • CMD: ENTRYPOINT에 전달될 기본 파라미터를 지정

실제 예시

# 예시 1: 기본적인 echo 명령어
ENTRYPOINT ["echo"]
CMD ["Hello, World!"]

# 실행 결과: echo Hello, World!
# docker run 이미지명 "안녕하세요!" 실행 시: echo 안녕하세요!

# 예시 2: 웹 서버 실행
ENTRYPOINT ["nginx"]
CMD ["-g", "daemon off;"]

# 예시 3: Python 애플리케이션
ENTRYPOINT ["python"]
CMD ["app.py", "--port", "8000"]

COPY vs ADD

COPY

COPY <호스트 경로> <컨테이너 경로>
  • 단순히 로컬 파일이나 디렉토리를 컨테이너로 복사
  • 투명하고 예측 가능한 동작
  • 대부분의 경우 COPY 사용을 권장

ADD

ADD <호스트 경로> <컨테이너 경로>
  • COPY의 모든 기능 포함
  • 추가 기능:
    • URL에서 파일 다운로드 지원
      ADD http://example.com/file.tar.gz /app/
    • 로컬의 tar 압축 파일 자동 해제
      ADD app.tar.gz /app/
  • 주의사항:
    • URL에서 다운로드한 파일은 자동으로 압축 해제되지 않음
    • 불필요한 레이어가 생성될 수 있음
    • 예측하기 어려운 동작이 발생할 수 있음

권장 사용법:

  • 일반적인 파일 복사: COPY 사용
  • 압축 파일 해제가 필요한 경우: ADD 사용
  • URL 다운로드가 필요한 경우: curl이나 wget 사용을 권장
    RUN curl -O http://example.com/file.tar.gz \
        && tar -xzf file.tar.gz \
        && rm file.tar.gz

기타 주요 지시어

WORKDIR

WORKDIR <경로>

작업 디렉토리를 설정합니다. 이후의 모든 명령어는 이 디렉토리를 기준으로 실행됩니다.

ENV

ENV <키> <값>
ENV <키>=<값>

환경 변수를 설정합니다. 이미지 빌드 시점과 컨테이너 실행 시점 모두에서 사용 가능합니다.

EXPOSE

EXPOSE <포트> [<포트>...]

컨테이너가 실행 중에 리스닝할 포트를 지정합니다.

VOLUME

VOLUME ["<경로>", ...]
VOLUME <경로>

컨테이너의 데이터를 영구적으로 저장할 볼륨을 지정합니다.

USER

USER <사용자>[:<그룹>]

RUN, CMD, ENTRYPOINT 등의 명령어를 실행할 사용자를 지정합니다. 보안을 위해 root가 아닌 사용자로 실행하는 것이 좋습니다.

'Cloud > Docker' 카테고리의 다른 글

도커 컨테이너의 7단계 라이프사이클  (0) 2024.10.06
Docker 기본 명령어 정리  (4) 2024.10.06