๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿง‘๐Ÿป‍๐Ÿ’ป 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 ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ์ •์˜๋œ ๊ธฐ๋ณธ ๊ฐ’์ด ์ ์šฉ๋œ๋‹ค.
    • ์ƒํ™ฉ์— ๋”ฐ๋ผ ๊ฐ’์˜ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

'๐Ÿง‘๐Ÿปโ€๐Ÿ’ป Develop > Docker' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Docker Detach vs Attach mode (Background vs Foreground)  (0) 2023.05.08

๋Œ“๊ธ€