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 가 없을 경우 정의된 기본 값이 적용된다.
- 상황에 따라 값의 변경이 필요할 경우 사용이 가능하다.
'🧑🏻💻 Develop > Docker' 카테고리의 다른 글
Docker Detach vs Attach mode (Background vs Foreground) (0) | 2023.05.08 |
---|
댓글0