본문 바로가기
🧑🏻‍💻 Develop/Docker

Docker RUN vs ENTRYPOINT vs CMD

by dev-jaesoon 2023. 5. 9.

Dockerfile 작성 시 사용되는 keyword 중, command 실행과 관련된 keyword 는 3가지가 있다.
각각의 상황에 따라 적절한 keyword 를 Dockerfile 에 작성해야 한다.

  • RUN
  • ENTRYPOINT
  • CMD

https://docs.docker.com/engine/reference/builder/#run
https://docs.docker.com/engine/reference/builder/#entrypoint
https://docs.docker.com/engine/reference/builder/#cmd
https://docs.docker.com/engine/reference/builder/#understand-how-cmd-and-entrypoint-interact

RUN

  • 실행 시점 : Image build
  • Dockerfile 를 통한 최초 Image build 과정에 실행이 필요한 command 를 RUN 에 작성한다.
  • 주로 library, package 등의 설치를 위해 사용된다.
    RUN /bin/bash -c 'source $HOME/.bashrc && echo $HOME'
    # or 
    RUN npm ci --omit=dev

ENTRYPOINT

  • 실행 시점 : Container run
  • 뒤에 설명할 CMD 와 유사하지만, Container 가 실행될 때 항상 실행되어야 하는 command 를 ENTRYPOINT 에 작성한다.
  • 주로 node.js application 등을 개발 시, Server 실행하기 위해 사용된다.
  • 필요한 parameter 를 CMD 혹은 user input 을 통해 전달할 수 있다.
    ENTRYPOINT ["executable", "param1", "param2"]
    # or 
    ENTRYPOINT [ "node", "server.js" ]

CMD

  • 실행 시점 : Container run
  • ENTRYPOINT 와 유사하지만, 지정된 user input 가 없을 때 기본적으로 사용될 command or parameter 를 CMD 에 작성한다.
  • 주로 ENTRYPOINT 에 대한 parameter 나 지정된 options 이 없을 때 기본적으로 실행할 file 을 지정하기 위해 사용된다.
  • user input 을 통해 CMD 의 값을 덮어 쓸 수 있다.
    CMD ["/usr/bin/wc","--help"]
    # or
    ENTRYPOINT [ "node", "server.js" ]
    CMD ["NODE_ENV=production"]
    $ docker run // ... // "NODE_ENV=dev"

ENTRYPOINT vs CMD

  • 최종적으로 ENTRYPOINT 와 CMD 는 다음와 같이 실행되는 형태이다.
    $ [ENTRYPOINT] [CMD]
  • ENTRYPOINT 는 Container 실행 시 항상 실행되기 때문에, default run command 지정에 사용한다.
  • CMD 는 user input value 가 parameter 로써 우선순위를 갖게 되며, input value 가 없을 경우 정의된 기본 값이 적용된다.
    • 상황에 따라 값의 변경이 필요할 경우 사용이 가능하다.

태그

, , ,

댓글0