[Docker] Dockerfile 명령어 & build 옵션

2022. 11. 18. 01:35Backend/Docker

728x90
반응형

ENV

  • Dockerfile에서 사용될 환경변수를 지정한다.

  • 설정한 환경변수는 ${ENV_NAME} 또는 $ENV_NAME의 형태로 사용할 수 있다.

  • 환경변수는 Dockerfile뿐 아니라 이미지에도 저장되므로 빌드된 이미지로 컨테이너를 생성하면 이 환경변수를 사용할 수 있다.

VOLUME

  • 빌드된 이미지로 컨테이너를 생성했을 때 호스트와 공유할 컨테이너 내부의 디렉터리를 설정한다.

ARG

  • build 명령어를 실행할 때 추가로 입력받아 Dockerfile 내에서 사용될 변수의 값을 설정한다.

  • build 명령어를 실행할 때 --build-arg 옵션을 사용해 값을 입력한다.

  • Dockerfile에서 ARG로 설정한 변수를 ENV에서 같은 이름으로 다시 정의하면 --build-arg 옵션으로 설정한 값은 ENV로 덮어씌여진다.

USER

  • 컨테이너 내에서 사용될 사용자 계정의 이름이나 UID를 설정하면 그 아래의 명령어는 해당 사용자 권한으로 실행된다.

  • 일반적으로 RUN으로 사용자의 그룹과 계정을 생성한 뒤 사용한다.

ONBUILD

  • 빌드된 이미지를 기반으로 하는 다른 이미지가 Dockerfile로 생성될 때 실행할 명령어를 추가한다.

  • 이미지가 빌드될 때 수행돼야 하는 각종 명령어를 나중에 빌드될 이미지를 위해 미리 저장해 놓을 수 있다.

  • 부모 이미지의 자식 이미지에만 적용되며, 자식 이미지는 ONBUILD 속성을 상속받지 않는다.

STOPSIGNAL

  • 컨테이너가 정지될 때 사용될 시스템 콜의 종류를 지정한다.

  • default는 SIGTERM으로 설정되어있다.

HEALTHCHECK

  • 이미지로부터 생성된 컨테이너에서 동작하는 애플리케이션의 상태를 체크하도록 한다.

  • 컨테이너 내부에서 동작 중인 애플리케이션의 프로세스가 종료되지는 않았으나 애플리케이션이 동작하고 있지 않은 상태를 방지하기 위해 사용할 수 있다.

  • 상태 체크에 대한 로그는 컨테이너의 정보에 저장되므로 애플리케이션에 장애가 있을 때 해당 로그를 확인할 수 있다.

SHELL

  • SHELL 뒤에 사용하고자 하는 셸을 명시해 따로 지정한다.

비슷한 명령어들

ADD vs COPY

  • COPY는 로컬 디렉터리에서 읽어 들인 컨텍스트로부터 이미지에 파일을 복사한다.

  • COPY는 로컬의 파일만 이미지에 추가할 수 있고,
    ADD는 외부 URL 및 tar 파일에서도 파일을 추가할 수 있다.

  • ADD는 이미지에 어떤 파일이 추가될 지 알 수 없기 때문에 권장하지 않는다.

ENTRYPOINT vs CMD

  • 둘 다 컨테이너가 시작될 때 수행할 명령을 지정한다.

  • ENTRYPOINT는 커맨드를 인자로 받아 사용할 수 있는 스크립트의 역할을 할 수 있다.

  • 컨테이너에 ENTRYPOINT가 설정되면 RUN 명령어의 맨 마지막에 입력된 CMD를 인자로 삼아 명령어를 출력한다.

  • ENTRYPOINT가 설정되어있지 않으면 CMD에 설정된 명령어를 그대로 실행하지만,
    ENTRYPOINT가 설정되면 CMD는 단지 ENTRYPOINT에 대한 인자의 기능을 한다.

  • 커맨드와 ENTRYPOINT 둘 다 설정되지 않으면 컨테이너는 생성되지 않고 에러를 출력한다.

728x90
반응형