๐Ÿณ Dockerfile๊ณผ ๋ช…๋ น์–ด

JeongHoHyunยท2025๋…„ 4์›” 16์ผ
0

Docker

๋ชฉ๋ก ๋ณด๊ธฐ
3/9

๐Ÿณ Dockerfile์ด๋ž€?

Docker ์ด๋ฏธ์ง€๋Š” DockerHub๋ฅผ ์ดํ•ด ๋‹ค์šด๋ฐ›์•„์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด Docker ์ด๋ฏธ์ง€๋“ค๋„ ๋ˆ„๊ตฐ๊ฐ€ ๋งŒ๋“ค์–ด์„œ DockerHub์— ์˜ฌ๋ ค๋†“์€ ๊ฒƒ์ด๋‹ค.
Dockerfile์„ ์ด์šฉํ•ด์„œ Docker ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค!

  • Dockerfile์ด๋ž€ Docker ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ฒŒ ํ•ด์ฃผ๋Š” ํŒŒ์ผ์ด๋‹ค.

โญ๏ธ Dockerfile ์ƒ์„ฑ

๐Ÿ“Œ FROM : ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€ ์ƒ์„ฑ

  • FROM์€ ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. Docker ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํŠน์ • ์ดˆ๊ธฐ ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ถ”๊ฐ€์ ์ธ ์…‹ํŒ…์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํŠน์ • ์ดˆ๊ธฐ ์ด๋ฏธ์ง€๊ฐ€ ๊ณง ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€์ด๋‹ค.

์‚ฌ์šฉ๋ฒ•

#๋ฌธ๋ฒ•
FROM [์ด๋ฏธ์ง€๋ช…]
FROM [์ด๋ฏธ์ง€๋ช…]:[ํƒœ๊ทธ๋ช…]
  • ํƒœ๊ทธ๋ช…์„ ์ ์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น ์ด๋ฏธ์ง€์˜ ์ตœ์‹ (lastest) ๋ฒ„์ „์„ ์‚ฌ์šฉํ•œ๋‹ค.

๐Ÿ“Œ COPY : ํŒŒ์ผ ๋ณต์‚ฌ(์ด๋™)

  • COPY๋Š” ํ˜ธ์ŠคํŠธ ์ปดํ“จํ„ฐ์— ์žˆ๋Š” ํŒŒ์ผ์„ ๋ณต์‚ฌํ•ด์„œ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ „๋‹ฌํ•œ๋‹ค.

์‚ฌ์šฉ๋ฒ•

#๋ฌธ๋ฒ•
COPY [ํ˜ธ์ŠคํŠธ ์ปดํ“จํ„ฐ์— ์žˆ๋Š” ๋ณต์‚ฌํ•  ํŒŒ์ผ์˜ ๊ฒฝ๋กœ] [์ปจํ…Œ์ด๋„ˆ์—์„œ ํŒŒ์ผ์ด ์œ„์น˜ํ•  ๊ฒฝ๋กœ]

#์˜ˆ์‹œ
# ํŒŒ์ผ๋ณต์‚ฌ
COPY app.txt /app.txt
# ํด๋” ๋ณต์‚ฌ (๋’ค์—๋ฅผ /๋กœ ๋‹ซ์•„์ค˜์•ผํ•จ)
COPY my-app /my-app/
# ์™€์ผ๋“œ์นด๋“œ ์‚ฌ์šฉ
COPY *.txt /text-files/ # ํ™•์žฅ์ž๊ฐ€ .txt์ธ ๋ชจ๋“  ํŒŒ์ผ์„ /text-files/ ํด๋” ์•ˆ์œผ๋กœ ๋ณต์‚ฌ
# .dockerignore
# ํŠน์ • ํŒŒ์ผ ๋˜๋Š” ํด๋”๋ฅผ `COPY`ํ•˜๊ณ ์‹ถ์ง€ ์•Š์„ ๋•Œ ์‚ฌ์šฉ
  • ํŒŒ์ผ ๋ณต์‚ฌ
COPY app.txt /app.txt
  • ํด๋” ๋ณต์‚ฌ
COPY my-app /my-app/
  • ํด๋” ์•ˆ์— ์žˆ๋Š” ๋ชจ๋“  ํŒŒ์ผ ๋ณต์‚ฌ.

  • ์™€์ผ๋“œ์นด๋“œ ์‚ฌ์šฉ

COPY *.txt /text-files/
  • /text-files๋ผ๊ณ  ์ ์œผ๋ฉด ์•ˆ ๋˜๊ณ , /text-files/๋ผ๊ณ  ์ ์–ด์•ผ text-files๋ผ๋Š” ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์— ํŒŒ์ผ๋“ค์ด ์ •์ƒ์ ์œผ๋กœ ๋ณต์‚ฌ ๋œ๋‹ค.
  • .dockerignore ์‚ฌ์šฉ
    • ํŠน์ • ํŒŒ์ผ ๋˜๋Š” ํด๋”๋ฅผ COPYํ•˜๊ณ  ์‹ถ์ง€ ์•Š์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
    • .dockerignoreํŒŒ์ผ์„ ๋งŒ๋“ ๋‹ค.
#.dockerignore
readme.txt
  • ๊ทธ ํ›„ Dockerfile์„ ๋งŒ๋“ค์–ด์„œ ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๋ฐ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด readme.txtํŒŒ์ผ์€ ๋ณต์‚ฌ๋˜์ง€ ์•Š์€๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ“Œ ENTRYPOINT : ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘ํ•  ๋•Œ ์‹คํ–‰๋˜๋Š” ๋ช…๋ น์–ด

  • ENTRYPOINT๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์ตœ์ดˆ๋กœ ์‹คํ–‰ํ•  ๋–„ ์ˆ˜ํ–‰๋˜๋Š” ๋ช…๋ น์–ด.

์‚ฌ์šฉ๋ฒ•

#๋ฌธ๋ฒ•
ENTRYPOINT [๋ช…๋ น๋ฌธ...]
#์˜ˆ์‹œ1
ENTRYPOINT ["node", "dist/main.js"]
#์˜ˆ์‹œ2
ENTRYPOINT ["/bin/bash", "-c", "echo hello"]
  • ์ด๋–„ ๋ช…๋ น์–ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฆฌ๋ˆ…์Šค ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

๐Ÿ“Œ RUN : ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์—์„œ ์‚ฌ์šฉํ•  ๋ช…๋ น๋ฌธ ์‹คํ–‰

  • RUN์€ ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๊ณผ์ •์—์„œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰์‹œ์ผœ์•ผ ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

์‚ฌ์šฉ๋ฒ•

#๋ฌธ๋ฒ•
RUN [๋ช…๋ น๋ฌธ]

#์˜ˆ์‹œ
RUN npm install

โœ… RUN vs ENTRYPOINT

  • RUN์€ ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๊ณผ์ •์—์„œ ํ•„์š”ํ•œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ๋•Œ ์‚ฌ์šฉ.
  • ENTRYPOINT๋Š” ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•œ ์งํ›„์— ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ๋–„ ์‚ฌ์šฉ.

์˜ˆ์‹œ

  • ubuntu๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๊ณ , git์ด ๊น”๋ ค์žˆ๋Š” ํ™˜๊ฒฝ ๊ตฌ์„ฑ
FROM ubuntu

RUN apt update && apt install -y git

ENTRYPOINT["/bin/bash". "-c", "sleep 500"]

๐Ÿ“Œ WORKDIR : ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ ์ง€์ •

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

์‚ฌ์šฉ๋ฒ•

#๋ฌธ๋ฒ•
WORKDIR [์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์‚ฌ์šฉํ•  ์ ˆ๋Œ€ ๊ฒฝ๋กœ]

#์˜ˆ์‹œ
WORKDIR /usr/src/app

๐Ÿ“Œ EXPOSE : ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉ์ค‘์ธ ํฌํŠธ ๋ฌธ์„œํ™”ํ•˜๊ธฐ

  • EXPOSE๋Š” ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ์–ด๋–ค ํฌํŠธ์— ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ์ง€๋ฅผ ๋ฌธ์„œํ™”ํ•˜๋Š” ์—ญํ• ๋งŒ ํ•œ๋‹ค.
  • docker -p 8080:8080 ...์™€ ๊ฐ™์€ ๋ช…๋ น์–ด์˜ -p์˜ต์…˜๊ณผ ๊ฐ™์€ ์—ญํ• ์€ ์ผ์ฒด ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • EXPOSE ๋ช…๋ น์–ด๋Š” ์“ฐ๋‚˜ ์•ˆ ์“ฐ๋‚˜ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์—๋Š” ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š”๋‹ค.
#๋ฌธ๋ฒ•
EXPOSE [ํฌํŠธ๋ฒˆํ˜ธ]

#์˜ˆ์‹œ
EXPOSE 3000
profile
Java Back-End 2022.11.01 ๐Ÿ’ป~ing

0๊ฐœ์˜ ๋Œ“๊ธ€