๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป Programming/Docker & Kubernetes

[Docker] (10) Dockerfile ๋นŒ๋“œ ์˜ˆ์‹œ | ENTRYPOINT ์™€ CMD์˜ ์ฐจ์ด

by Moving J 2023. 8. 24.
๋ฐ˜์‘ํ˜•
Docker ์ „์ฒด ํฌ์ŠคํŒ…
๋”๋ณด๊ธฐ

[Docker] (1) ๋„์ปค ๊ฐœ๋… ์„ค๋ช… | ๋„์ปค๋Š” ์™œ ์‚ฌ์šฉํ•˜๋Š” ๊ฑธ๊นŒ?

[Docker] (2) ๋„์ปค & ๋„์ปค์ปดํฌ์ฆˆ ๋‹ค์šด๋กœ๋“œ

[Docker] (3) ๋„์ปค ํ•ต์‹ฌ ๊ฐœ๋… - ์ด๋ฏธ์ง€, ์ปจํ…Œ์ด๋„ˆ, ๋„์ปค ํ—ˆ๋ธŒ

[Docker] (4) docker pull(์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ) & docker run(์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ/์‹คํ–‰) & ํฌํŠธํฌ์›Œ๋”ฉ(ํฌํŠธ๋งคํ•‘)

[Docker] (5) ๋„์ปค run ๋ช…๋ น์–ด ์˜ต์…˜, ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋˜์ง€ ์•Š๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•

[Docker] (6) ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋กœ ์ ‘์†ํ•˜๊ธฐ - docker exec & docker attach

[Docker] (7) ๋„์ปค volume(๋ณผ๋ฅจ) ์˜ต์…˜ - ์ปจํ…Œ์ด๋„ˆ ํด๋”์™€ ํ˜ธ์ŠคํŠธ ํด๋” ์—ฐ๊ฒฐํ•˜๊ธฐ

[Docker] (8) ๋„์ปค commit(์ปค๋ฐ‹) & push(ํ‘ธ์‹œ) - ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒˆ๋กœ์šด ๋„์ปค ์ด๋ฏธ์ง€๋กœ ์ €์žฅํ•˜๊ณ  ๋ ˆํผ์ง€ํ† ๋ฆฌ์— ์—…๋กœ๋“œ

[Docker] (9) Dockerfile(๋„์ปคํŒŒ์ผ) - ์Šค๋งˆํŠธํ•˜๊ฒŒ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•

[Docker] (10) Dockerfile ๋นŒ๋“œ ์˜ˆ์‹œ | ENTRYPOINT ์™€ CMD์˜ ์ฐจ์ด

[Docker] (11) ๋„์ปค ์ปจํ…Œ์ด๋„ˆ์™€ vscode ์—ฐ๋™ํ•˜๊ธฐ | ๋„์ปค ์ปจํ…Œ์ด๋„ˆ์—์„œ ๊ฐœ๋ฐœ

[Docker] (12) ๊นƒํ—ˆ๋ธŒ๋กœ ๋„์ปค ์ด๋ฏธ์ง€ ๊ณต์œ ํ•˜๊ธฐ | Packages Container Registry

 

 

docker build -t java-server .
docker run -dit -p 8080:8081 java-server

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

 

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

 

๊ฐ„๋‹จํžˆ ๋งํ•ด, CMD์™€ ENTRYPOINT ๋ชจ๋‘ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์‹คํ–‰๋˜๋Š” ๋ช…๋ น์–ด๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์ฐจ์ด์ ์€ CMD๋Š” ์ถ”๊ฐ€ ์ธ์ž๋กœ ๋ช…๋ น์–ด๋ฅผ ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ์ง€๋งŒ, ENTRYPOINT๋กœ ์„ค์ •ํ•œ ๋ช…๋ น์–ด๋Š” ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์‹œ ์ถ”๊ฐ€ ์ธ์ž๋กœ ๋ฎ์–ด์“ธ ์ˆ˜ ์—†๋‹ค๋Š” ์ ์ด๋‹ค. ์ด ๋‘ ๋ช…๋ น์–ด๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ์˜ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ์กฐ์ •ํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

CMD vs ENTRYPOINT ์‚ฌ์šฉ ์˜ˆ์ œ

 

ENTRYPOINT์™€ CMD๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„ ํฌํŠธ๋ฅผ ์ง€์ •ํ•˜๋Š” ์˜ˆ์ œ๋กœ CMD์™€ ENTRYPOINT์˜ ์ฐจ์ด์ ์„ ์•Œ์•„๋ณด๋ ค ํ•œ๋‹ค.

 

CMD
FROM openjdk:11-jdk-slim

WORKDIR /app

COPY ./aws-v3-0.0.3.jar ./application.jar

ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=dev", "application.jar"]

CMD ["--server.port=3000"]
  • CMD ๋ช…๋ น์œผ๋กœ ์„œ๋ฒ„ ํฌํŠธ๋ฅผ 3000๋ฒˆ์œผ๋กœ ์ง€์ •
  • CMD ๋กœ ์‹คํ–‰ํ•œ ๋ช…๋ น์–ด๋Š” docker run ๋ช…๋ น ์‹œ ์ถ”๊ฐ€ ์ธ์ž๋กœ ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ์Œ

 

docker build -t java-server .
docker run -dit -p 8080:3000 java-server

  • ์ƒ์„ฑ๋œ ์ปจํ…Œ์ด๋„ˆ์˜ ์„œ๋ฒ„ ํฌํŠธ๊ฐ€ 3000๋ฒˆ์ด๊ธฐ ๋•Œ๋ฌธ์— ํฌํŠธํฌ์›Œ๋”ฉ์„ 8080:3000์œผ๋กœ ํ•˜๊ณ , localhost:8080์œผ๋กœ ์ ‘์†ํ•˜๋ฉด ์ •์ƒ ์ ‘์† ๊ฐ€๋Šฅ

 

docker run -dit -p 8080:5000 java-server --server.port=5000

 

  • ๋˜ํ•œ ๋„์ปคํŒŒ์ผ์—์„œ ์„œ๋ฒ„ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ CMD ๋ช…๋ น์œผ๋กœ ์ง€์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— docker run ๋ช…๋ น ์‹œ ์„œ๋ฒ„ํฌํŠธ๋ฅผ ์ƒˆ๋กœ ์ง€์ •ํ•˜๋Š” ์ธ์ž๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ
  • docker run ๋ช…๋ น ์‹œ --server.port=5000์œผ๋กœ ์ง€์ •ํ•˜๊ณ  ํฌํŠธํฌ์›Œ๋”ฉ ์—ญ์‹œ 8080:5000์œผ๋กœ ํ•˜๋ฉด ์ •์ƒ ์ ‘์† ๊ฐ€๋Šฅ

 

 

ENTRYPOINT
FROM openjdk:11-jdk-slim

WORKDIR /app

COPY ./aws-v3-0.0.3.jar ./application.jar

ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=dev", "application.jar", "--server.port=3000"]
  • ENTRYPOINT ์—์„œ ์„œ๋ฒ„ํฌํŠธ๋ฅผ 3000๋ฒˆ์œผ๋กœ ์ง€์ •
  • ENTRYPOINT๋กœ ์ง€์ •ํ•œ ๋ช…๋ น์€ docker run ์‹œ ๋ช…๋ น์œผ๋กœ ๋ฎ์–ด์“ธ ์ˆ˜ ์—†์Œ
docker build -t java-server .
docker run -dit -p 8080:3000 java-server

  • ํฌํŠธํฌ์›Œ๋”ฉ์„ 8080:3000์œผ๋กœ ์ง€์ •ํ•˜๋ฉด ์ •์ƒ ์ ‘์†

 

docker run -dit -p 8080:5000 java-server --server.port = 5000

  • docker run ๋ช…๋ น ์‹œ ์„œ๋ฒ„ ํฌํŠธ๋ฅผ 5000์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ํฌํŠธํฌ์›Œ๋”ฉ ์—ญ์‹œ 8080:5000์œผ๋กœ ์„ค์ •ํ–ˆ์ง€๋งŒ ์ ‘์† ๋ถˆ๊ฐ€
  • ENTRYPOINT๋กœ ์ง€์ •ํ•œ ๋ช…๋ น์€ docker run ๋ช…๋ น์œผ๋กœ ๋ฎ์–ด์“ฐ๊ธฐ ๋ถˆ๊ฐ€๋Šฅ

 

๋•Œ๋ฌธ์— docker run ๋ช…๋ น ์‹œ ์˜ต์…˜์œผ๋กœ ์ง€์ •ํ•˜๊ณ  ์‹ถ์€ ํ•ญ๋ชฉ์˜ ๊ฒฝ์šฐ CMD๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ,
๋””ํดํŠธ๋กœ ๋ฌด์กฐ๊ฑด ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์€ ํ•ญ๋ชฉ์€ ENTRYPOINT๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
๋ฐ˜์‘ํ˜•