A A
[Docker] ENTRYPOINT์™€ CMD์˜ ๊ด€๊ณ„

ENTRYPOINT์™€ CMD์˜ ๊ด€๊ณ„

Dockerfile์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ENTRYPOINT์™€ CMD ๋ช…๋ น์–ด์˜ ๊ด€๊ณ„์™€ ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๋‘ ๋ช…๋ น์–ด๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์‹คํ–‰๋  ๋ช…๋ น์–ด๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜์ง€๋งŒ, ๊ทธ ๋™์ž‘ ๋ฐฉ์‹๊ณผ ๋ชฉ์ ์— ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, shell ํ˜•์‹๊ณผ exec ํ˜•์‹์— ๋Œ€ํ•œ ์ดํ•ด๋„ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๊ฐœ๋…๋“ค์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•˜๊ณ  ํšจ๊ณผ์ ์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.


Shell ํ˜•์‹๊ณผ Exec ํ˜•์‹

Dockerfile์—์„œ ๋ช…๋ น์–ด๋ฅผ ์ž‘์„ฑํ•  ๋•Œ shell ํ˜•์‹๊ณผ exec ํ˜•์‹ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋‘ ํ˜•์‹์€ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์— ์ฐจ์ด๊ฐ€ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

Shell ํ˜•์‹

Shell ํ˜•์‹์€ ํ„ฐ๋ฏธ๋„์—์„œ ์ง์ ‘ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๋‹จ์ผ ๋ฌธ์ž์—ด๋กœ ๋ช…๋ น์–ด๋ฅผ ์ž‘์„ฑํ•˜๋ฉฐ, ์‰˜์„ ํ†ตํ•ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

RUN npm ci \
    && npm run build

 

ํŠน์ง•

  • ์‰˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ†ตํ•ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์น˜ํ™˜ ๋ฐ ์‰˜ ๊ธฐ๋Šฅ(์˜ˆ: ํŒŒ์ดํ”„, ๋ฆฌ๋””๋ ‰์…˜)์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‰˜์„ ํ†ตํ•ด ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰๋˜๋ฏ€๋กœ PID 1๋กœ ์‰˜์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

Exec ํ˜•์‹

Exec ํ˜•์‹์€ JSON ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ๋ช…๋ น์–ด์™€ ๊ทธ ์ธ์ž๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์‰˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ง์ ‘ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

ENTRYPOINT ["npm", "run", "start"]

 

ํŠน์ง•

  • ์‰˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ง์ ‘ ์‹คํ–‰๋˜๋ฏ€๋กœ ์‰˜ ํ”„๋กœ์„ธ์‹ฑ์ด ์ผ์–ด๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • PID 1๋กœ ์ง€์ •๋œ ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์น˜ํ™˜์ด ์ž๋™์œผ๋กœ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ฃผ์˜์‚ฌํ•ญ: Exec ํ˜•์‹์œผ๋กœ ์ž‘์„ฑํ•  ๋•Œ๋Š” ์ž‘์€๋”ฐ์˜ดํ‘œ(')๊ฐ€ ์•„๋‹Œ ๋ฐ˜๋“œ์‹œ ํฐ ๋”ฐ์˜ดํ‘œ(")๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

RUN vs CMD vs ENTRYPOINT

Dockerfile์—์„œ RUN, CMD, ENTRYPOINT๋Š” ๋ชจ๋‘ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜์ง€๋งŒ, ๊ทธ ์‹œ์ ๊ณผ ๋ชฉ์ ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

RUN ๋ช…๋ น์–ด

  • ์šฉ๋„: ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•  ๋•Œ ์‹คํ–‰ํ•  ๋ช…๋ น์–ด๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์‹œ์ : docker build ๊ณผ์ • ์ค‘์— ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ: RUN npm ci \ && npm run build
  • ํŠน์ง•:
    • ์ด๋ฏธ์ง€ ๋ ˆ์ด์–ด๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ๋นŒ๋“œ ์‹œ์ ์— ํ•„์š”ํ•œ ํŒŒ์ผ์„ ์„ค์น˜ํ•˜๊ฑฐ๋‚˜ ์„ค์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์‹œ์—๋Š” ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

CMD ๋ช…๋ น์–ด

  • ์šฉ๋„: ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹คํ–‰ํ•  ๋ช…๋ น์–ด๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์‹œ์ : docker run ์‹œ์ ์— ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ: CMD ["echo", "Welcome to kakao."]
  • ํŠน์ง•:
    • ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์‹œ ๊ธฐ๋ณธ ๋ช…๋ น์–ด๋ฅผ ์„ค์ •ํ•˜๋ฉฐ, docker run ๋ช…๋ น์–ด์—์„œ ๋ช…๋ น์–ด๋ฅผ ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋‹จ์ผ ๋ช…๋ น์–ด ๋˜๋Š” ๋ฐฐ์—ด ํ˜•์‹์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ENTRYPOINT ๋ช…๋ น์–ด

  • ์šฉ๋„: ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ๋ฐ˜๋“œ์‹œ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์‹œ์ : docker run ์‹œ์ ์— ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ: ENTRYPOINT ["npm", "run", "start"]
  • ํŠน์ง•:
    • CMD์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ, ENTRYPOINT๋Š” ๋ฎ์–ด์“ธ ์ˆ˜ ์—†๊ณ  ํ•ญ์ƒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
    • Exec ํ˜•์‹์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.

CMD vs ENTRYPOINT

CMD์™€ ENTRYPOINT๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์‹คํ–‰ํ•  ๋ช…๋ น์–ด๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜์ง€๋งŒ, ๊ทธ ๋™์ž‘ ๋ฐฉ์‹์— ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

CMD

  • ์œ ์—ฐ์„ฑ: docker run ๋ช…๋ น์–ด์—์„œ ๋ช…๋ น์–ด๋ฅผ ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์šฉ๋„: ๊ธฐ๋ณธ ๋ช…๋ น์–ด ๋˜๋Š” ์ธ์ž๋ฅผ ์„ค์ •ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ
    docker container run myimage echo "Learn to love learning."
    # ์ถœ๋ ฅ: Learn to love learning.
    
  • CMD ["echo", "Welcome to Codeit."]

ENTRYPOINT

  • ๊ณ ์ •์„ฑ: docker run ๋ช…๋ น์–ด์—์„œ ๋ฎ์–ด์“ธ ์ˆ˜ ์—†์œผ๋ฉฐ, ํ•ญ์ƒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ์šฉ๋„: ์ปจํ…Œ์ด๋„ˆ์˜ ์ฃผ๋œ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์‹œ
    docker container run myimage
    # ํ•ญ์ƒ 'npm run start'๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
    
  • ENTRYPOINT ["npm", "run", "start"]

ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธฐ

CMD์™€ ENTRYPOINT๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด, CMD๋Š” ENTRYPOINT์˜ ์ธ์ž๋กœ ์ž‘๋™ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
FROM ubuntu
CMD ["Kakao"]
ENTRYPOINT ["echo", "Welcome To "]
docker container run myimage Seoul
# ์ถœ๋ ฅ: Welcome To Seoul

docker container run myimage Busan
# ์ถœ๋ ฅ: Welcome To Busan
  • ์žฅ์ : ENTRYPOINT๋Š” ๊ณ ์ •๋œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด์„œ, CMD๋ฅผ ํ†ตํ•ด ์œ ์—ฐํ•˜๊ฒŒ ์ธ์ž๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฃผ์˜์‚ฌํ•ญ: ENTRYPOINT์™€ CMD์˜ ์กฐํ•ฉ์„ ์ดํ•ดํ•˜๊ณ  ์ ์ ˆํžˆ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

CMD์˜ ๋˜ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ

CMD๋Š” ENTRYPOINT์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. CMD๋Š” ENTRYPOINT์—์„œ ์‹คํ–‰ํ•  ๋ช…๋ น์–ด์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ

FROM ubuntu
CMD ["Kakao"]
ENTRYPOINT ["echo", "Welcome To "]
docker container run myimage Seoul
# ์ถœ๋ ฅ: Welcome To Seoul

docker container run myimage Busan
# ์ถœ๋ ฅ: Welcome To Busan
  • ๋™์ž‘ ๋ฐฉ์‹:
    • ENTRYPOINT๋Š” ํ•ญ์ƒ ์‹คํ–‰๋˜๋ฉฐ, CMD๋Š” ๊ทธ ์ธ์ž๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.
    • docker run ๋ช…๋ น์–ด์—์„œ CMD๋ฅผ ์žฌ์ •์˜ํ•˜๋ฉด, ENTRYPOINT์˜ ์ธ์ž๋กœ ์ƒˆ๋กœ์šด ๊ฐ’์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Tip: CMD๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ ์ธ์ž๋ฅผ ์„ค์ •ํ•˜๊ณ , ํ•„์š”์— ๋”ฐ๋ผ ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•˜๋ฉด ์œ ์—ฐํ•œ Docker ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


ENV์™€ ARG ์‚ฌ์šฉ ์‹œ ์œ ์˜์‚ฌํ•ญ

Dockerfile์—์„œ ENV์™€ ARG๋Š” ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ๋‘ ๋ช…๋ น์–ด๋Š” ์‚ฌ์šฉ ๋ชฉ์ ๊ณผ ๋ฒ”์œ„๊ฐ€ ๋‹ค๋ฅด๋ฏ€๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

ENV์™€ ARG ๋น„๊ต

ํŠน์ง• ENV ARG
์šฉ๋„ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์‹œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ • ์ด๋ฏธ์ง€ ๋นŒ๋“œ ์‹œ ๋ณ€์ˆ˜ ์„ค์ •
์‹œ์  ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์‹œ ์ด๋ฏธ์ง€ ๋นŒ๋“œ ์‹œ
์žฌ์ •์˜ ๊ฐ€๋Šฅ์„ฑ docker run -e ์˜ต์…˜์œผ๋กœ ์žฌ์ •์˜ ๊ฐ€๋Šฅ docker build --build-arg ์˜ต์…˜์œผ๋กœ ์žฌ์ •์˜ ๊ฐ€๋Šฅ
์ƒ๋ช…์ฃผ๊ธฐ ์ด๋ฏธ์ง€ ๋นŒ๋“œ ์‹œ์ ๋ถ€ํ„ฐ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ํ›„๊นŒ์ง€ ์ด๋ฏธ์ง€ ๋นŒ๋“œ ์‹œ์  ๋™์•ˆ๋งŒ ์œ ํšจ
๊ธฐ๋ณธ๊ฐ’ ์„ค์ • ๋ฐ˜๋“œ์‹œ ๊ธฐ๋ณธ๊ฐ’์„ ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•จ ๊ธฐ๋ณธ๊ฐ’์„ ์ง€์ •ํ•˜์ง€ ์•Š์•„๋„ ๋จ

์‚ฌ์šฉ ์˜ˆ์‹œ

ENV

ENV PORT=3000
  • ์šฉ๋„: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋  ๋•Œ ํ•„์š”ํ•œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์žฌ์ •์˜: docker run -e PORT=4000๊ณผ ๊ฐ™์ด ์‹คํ–‰ ์‹œ์ ์— ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ARG

ARG NODE_VERSION=20.15.1
  • ์šฉ๋„: ์ด๋ฏธ์ง€ ๋นŒ๋“œ ์‹œ ํŠน์ • ๋ฒ„์ „์˜ Node.js๋ฅผ ์„ค์น˜ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์žฌ์ •์˜: docker build --build-arg NODE_VERSION=14.17.0 .๊ณผ ๊ฐ™์ด ๋นŒ๋“œ ์‹œ์ ์— ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณ€์ˆ˜ ์ฐธ์กฐ ํŒ

Dockerfile์—์„œ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•  ๋•Œ๋Š” ${VARIABLE} ํ˜•์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ณ€์ˆ˜์™€ ๋ฌธ์ž์—ด์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋ฉฐ, ๋ณ€์ˆ˜ ๊ฐ’์ด ์—†์„ ๋•Œ ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ

ENV VARIABLE=Hello
RUN echo "$VARIABLE_World"       # ์ถœ๋ ฅ: My name is ${VARIABLE}
RUN echo "${VARIABLE}_World"     # ์ถœ๋ ฅ: Hello_World
FROM ubuntu
ENV MY_NAME=Ryan
ENTRYPOINT ["echo", "My name is ${MY_NAME}"]
# ์ถœ๋ ฅ: My name is Ryan

# ์ž˜๋ชป๋œ ์˜ˆ์‹œ
ENTRYPOINT ["echo", "My name is $MY_NAME"]
# ์ถœ๋ ฅ: My name is ${MY_NAME}

 

์žฅ์ 

  • ๋ณ€์ˆ˜์™€ ๋ฌธ์ž์—ด์ด ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค.
  • ์กฐ๊ฑด๋ถ€ ๊ฐ’์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์กฐ๊ฑด๋ถ€ ๋ณ€์ˆ˜ ์„ค์ •

ENV GREETING=${NAME:-Hi}
  • ์„ค๋ช…: NAME ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด ๊ทธ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด Hi๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
FROM ubuntu
ENV GREETING=${NAME:-Hi}
CMD ["echo", "${GREETING}, Welcome!"]
docker container run myimage
# ์ถœ๋ ฅ: Hi, Welcome!

docker container run -e NAME=Kakao myimage
# ์ถœ๋ ฅ: Kakao, Welcome!

 


Dockerfile ์ž‘์„ฑ ํŒ

Dockerfile์„ ์ž‘์„ฑํ•  ๋•Œ๋Š” ENTRYPOINT์™€ CMD์˜ ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ๋ฒ•์„ ์ˆ™์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ Dockerfile ์ž‘์„ฑ ์‹œ ์œ ์šฉํ•œ ํŒ์ž…๋‹ˆ๋‹ค.

1. ENTRYPOINT๋Š” Exec ํ˜•์‹์œผ๋กœ ์ž‘์„ฑ

ENTRYPOINT๋Š” ๊ณ ์ •๋œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, Exec ํ˜•์‹(["executable", "param1", "param2"])์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์‰˜ ํ”„๋กœ์„ธ์‹ฑ์„ ํ”ผํ•˜๊ณ , ์ปจํ…Œ์ด๋„ˆ์˜ PID 1๋กœ ์ง€์ •๋œ ํ”„๋กœ์„ธ์Šค๊ฐ€ SIGTERM ์‹œ๊ทธ๋„์„ ์ง์ ‘ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

ENTRYPOINT ["npm", "run", "start"]

2. CMD๋Š” ๊ธฐ๋ณธ ์ธ์ž๋ฅผ ์„ค์ •ํ•  ๋•Œ ์‚ฌ์šฉ

CMD๋Š” ENTRYPOINT์˜ ์ธ์ž๋ฅผ ์„ค์ •ํ•˜๊ฑฐ๋‚˜, ๊ธฐ๋ณธ ๋ช…๋ น์–ด๋ฅผ ์„ค์ •ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. Exec ํ˜•์‹์œผ๋กœ ์ž‘์„ฑํ•˜์—ฌ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

CMD ["--help"]

3. RUN์€ ๋นŒ๋“œ ์‹œ์ ์˜ ์„ค์ •์— ์‚ฌ์šฉ

RUN ๋ช…๋ น์–ด๋Š” ์ด๋ฏธ์ง€ ๋นŒ๋“œ ์‹œ ํ•„์š”ํ•œ ํŒจํ‚ค์ง€ ์„ค์น˜๋‚˜ ์„ค์ • ์ž‘์—…์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

RUN apt-get update && apt-get install -y curl

4. ENV์™€ ARG์˜ ์ ์ ˆํ•œ ์‚ฌ์šฉ

  • ENV: ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์‹œ ํ•„์š”ํ•œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ARG: ์ด๋ฏธ์ง€ ๋นŒ๋“œ ์‹œ ํ•„์š”ํ•œ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ  ์ž๋ฃŒ