CMD와 Entrypoint의 차이

Dockerfile Syntax | The difference of CMD and ENTRYPOINT
이민석's avatar
Jun 07, 2024
CMD와 Entrypoint의 차이

개요

CMD와 ENTRYPOINT는 컨테이너가 시작될 때 실행되는 명령을 정의하는 Dockerfile 명령어 입니다. 이 두 명령어는 함께 작동하기 때문에 이해하기 어렵습니다. 이번 문서를 통해서 CMD와 ENTRYPOINT가 무엇이고 어떤 차이가 있는지 알아봅시다.

ENTRYPOINT & CMD 작동원리

  • ENTRYPOINT 명령어는 컨테이너가 시작될 때 실행되는 프로세스를 설정합니다.

  • CMD 명령어는 프로세스에 전달되는 기본 인수를 설정합니다.

ENTRYPOINT ["/usr/bin/my-app"]
CMD ["help"]

이미지에는 ENTRYPOINT가 하나만 있을 수 있습니다.
만약 ENTRYPOINT를 정의하지 않는다면 /bin/sh -c를 사용하게 됩니다.

Docker Container Run 작동원리

다음 명령어는 지정된 이미지를 사용하여 새 컨테이너를 실행합니다.
추가 인수가 없다면 실행되는 프로세스는 이미지에 정의된 ENTRYPOINT & CMD와 정확히 일치합니다.

  • Dockerfile

    ENTRYPOINT ["/usr/bin/my-app"]
    CMD ["help"]
  • Docker CLI

    docker run <image_name>:<tag>
    # Executes
    # /usr/bin/my-app help

같은 Dockerfile에 대해서 추가 인수를 전달하여 CMD를 재정의 할 수 있습니다.

  • Dockerfile : 동일

  • Docker CLI

    docker run <image_name>:<tag> version
    # Executes
    # /usr/bin/my-app version

동일한 경우에 --entrypoint 옵션을 사용해서 ENTRYPOINT를 재정의할 수 있습니다.
이미지 파일 시스템의 내용을 검사하는 등의 컨테이너 내부의 셸을 시작하려는 경우에 유용합니다.

  • Dockerfile : 동일

  • Docker CLI

    docker run --entrrypoint bash <image_name>:<tag> -c "ls /"

ENTRYPOINT와 CMD 차이점

ENTRYPOINT는 명령을 정의하고 CMD는 인수를 정의합니다.

기존에 ENTRYPOINT 혹은 CMD만을 사용하는 단일 명령을 제공하는 경우보다 ENTRYPOINT & CMD를 동시에 사용하면 Docker Container Image가 더욱 유연해집니다.

결론

  • ENTRYPOINT는 컨테이너 내부에서 실행될 프로세스의 경로입니다.

  • CMD는 해당 명령(있는 경우)에 전달할 기본 인수여야 합니다.

참고 자료

Share article

Unchaptered