본문 바로가기
Back-end/Docker

Dockerfile 공식문서 정리 2

by whatamigonnabe 2023. 4. 19.

CMD

  • 사용 방법
    • CMD ["executable","param1","param2"] (exec form, this is the preferred form)
    • CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
    • CMD command param1 param2 (shell form)
  • 주요 목적: 실행할 컨테이너의 defaults를 제공하는 것
  • CMD는 executable을 포함 할 수도 있고 안할 수도 있는데, 포함하지 않는 경우에는 ENTRYPOINT를 명시해야한다.

LABEL

LABEL <key>=<value> <key>=<value> <key>=<value> ...
  • 이미지에 메타데이터를 추가한다.
  • key-valeu 쌍으로 되어 있고, 두 개 이상의 쌍을 가질 수 있다.

EXPOSE

EXPOSE <port> [<port>/<protocol>...]
  • 컨테이너가 특정한 네트워크 포트를 사용하도록 지정한다.

  • 초기값으로 TCP를 사용하는 것으로 되어 있다.

    EXPOSE 80/udp

EXPOSE지시어 없이도, -p 태그를 이용하여 네트워크 세팅을 설정할 수 있다.

docker run -p 80:80/tcp -p 80:80/udp ...

ENV

ENV <key>=<value> ...
  • 환경 변수 설정

ADD

ADD [--chown=<user>:<group>] [--chmod=<perms>] [--checksum=<checksum>] <src>... <dest>
ADD [--chown=<user>:<group>] [--chmod=<perms>] ["<src>",... "<dest>"]
  • 위의 두 가지 형태를 쓸 수 있고, 경로에 공백문자가 포함되는 경우에는 두번째 방법이 권장된다.
  • --chownchmod 기능은 리눅스 컨테이너에서만 돌아가고, 윈도우 컨테이너에서는 작동하지 않는다.
  • --chmod는 Dockerfile 1.3 버전 이후에서만 지원된다.
  • <src> 로부터 새로운 파일, 디렉토리, 원격 파일 URL를 복사해서, 이 이미지의 파일시스템의 <dest> 경로에 추가한다.
  • <src>에 와일드 카드가 사용될 수 있다.

COPY

COPY [--chown=<user>:<group>] [--chmod=<perms>] <src>... <dest>
COPY [--chown=<user>:<group>] [--chmod=<perms>] ["<src>",... "<dest>"]
  • 위의 두 가지 형태를 쓸 수 있고, 경로에 공백문자가 포함되는 경우에는 두번째 방법이 권장된다.
  • <src>에서 새로운 파일과 디랙토리를 복사해서 컨테이너의 파일시스템의 <dest> 경로에 붙여넣는다.
  • ADD와의 차이: ADD는 아래의 추가적인 기능을 제공한다.
    • URL에서 파일을 다운로드하고 압축파일을 자동으로 압축해제할 수 있다.
    • tar 파일을 추출할 수 있다.
  • --link 옵션 : 소스파일을 복사해서 빈 디렉토리에 저장해둔다. 이로 인해 이전 레이어에서 변경이 일어나더라도 영향을 받지 않게된다.

ENTRYPOINT

ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2
  • 위의 두 가지 형태를 쓸 수 있고 첫번째 방법이 권장된다.
  • 컨테이너를 구성(configure)할 수 있도록한다. 즉, 컨테이너가 시작될 때 실행된다.
  • RUN과의 차이점은 RUN은 빌드할 때 실행되고, ENTRYPOINT는 컨테이너가 실행될 때 실행된다. 따라서 빌드할 때 필요한 페키지나 의존성 설치에는 RUN을 사용하고, 컨테이너 실행시 실행하는 실행파일 또는 스크립트는 ENTRYPOINT를 사용한다.
  • CMD와 함께쓰이면, ENTRYPPOINT는 실행파일을 CMD는 매개변수 역할을 한다.

VOLUME

VOLUME ["/data"]
  • 호스트 머신과 컨테이너 간의 데이터 공유를 위한 디텍토리나 파일을 정의하는데 사용된다.

USER

USER <user>[:<group>]
USER <UID>[:<GID>]
  • 남은 현재의 스테이지에서 지정한 사용자 또는 그룹으로 사용된다. 런타임에 RUN지시어에서 사용되고, 관련된 ENTRYPOINTCMD 명령을 수행한다.

WORKDIR

WORKDIR /path/to/workdir
  • 이 지시어 이후의 지시어어서 쓰이는 working directory를 설정한다.
  • 여러번 쓰일 수 있고, 상대 경로일 경우 이전 WORKDIR의 경로에서 상대적이다.

ARG

ARG <name>[=<default value>]
  • 빌드 시 빌더가 사용할 변수를 정의한다.
  • 아래처럼 빌드할 때 변수를 넘겨줄 수도 있다.
    docker build --build-arg username=what_user .
  • 한 빌드 스테이지 않에서 유효하고, 다른 빌드 스테이지에서 사용하려면 ARG를 사용하여 다시 설정해야한다.
  • ENV가 항상 ARG를 override한다.

ONBUILD

  • 트리거를 통해 나중에 실행하는 것.

STOPSIGNAL

  • 컨테이너를 종료하는 시스템콜 시그널을 설정.

HEALTHCEHCK

  • 컨테이너가 잘 작동하는지를 확인하는 방법을 정의.

SHELL

  • 명령의 쉘 폼으로 사용되는 기본 쉘이 override되도록 설정한다.

Here-Documents

  • 이어지는 RUN이나 COPY 명령어로 가는 도커 파일의 리디렉션을 허용한다.

'Back-end > Docker' 카테고리의 다른 글

cAdvisor M1에 설치하기  (0) 2023.04.21
Dockerfile 공식문서 정리 - 1  (0) 2023.04.17