๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Docker Study

๋„์ปค ๋ณผ๋ฅจ๊ณผ ๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ

๋ณผ๋ฅจ vs ๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ

๋„์ปค ์ปจํ…Œ์ด๋„ˆ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์กดํ•˜๊ธฐ ์œ„ํ•ด ๋ณผ๋ฅจ๊ณผ ๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ๋ผ๋Š” ๋‘ ๊ฐ€์ง€์˜ ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Volumes

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

์ต๋ช… ๋ณผ๋ฅจ(Anonymous volumes)

FROM node:16

WORKDIR /app

COPY package.json .

RUN npm install

COPY . .

EXPOSE 80

VOLUME ["<๋งคํ•‘๋˜์–ด์งˆ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ์œ„์น˜>"]

CMD ["node", "server.js"]

์œ„ ์†Œ์Šค์—์„œ ์ €์žฅํ•˜๋ ค๋Š” VOLUME ["<๋งคํ•‘๋  ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ์œ„์น˜>"] ๋ณผ๋ฅจ์€ ์ต๋ช… ๋ณผ๋ฅจ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ ๊ฒฝ๋กœ๋กœ ์™ธ๋ถ€ ํด๋”์— ๋งคํ•‘๋˜์–ด์งˆ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ์œ„์น˜(๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋  ์œ„์น˜)์— ๋งˆ์šดํŠธ ํ•ฉ๋‹ˆ๋‹ค.

  • VOLUME ["<๋งคํ•‘๋  ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ์œ„์น˜>"] or docker run -v <๋งคํ•‘๋˜์–ด์งˆ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ์œ„์น˜>๋Š” ์ต๋ช…์˜ ๋ณผ๋ฅจ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•œ ๊ฒƒ์œผ๋กœ ํ˜ธ์ŠคํŠธ ๋จธ์‹ ์˜ ๊ฒฝ๋กœ๋Š” ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ์ต๋ช…์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ๋ณผ๋ฅจ์€ ๋„์ปค๊ฐ€ ์ž๋™์œผ๋กœ ์ด๋ฆ„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ์ต๋ช… ๋ณผ๋ฅจ์„ ๋„์ปค๊ฐ€ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ์—๋งŒ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.(์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ข…๋ฃŒํ•˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.)
    • ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ๋งˆ๋‹ค ์ต๋ช… ๋ณผ๋ฅจ์ด ๋‹ค์‹œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
    • ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ œ๊ฑฐ๋˜๋ฉด ์ต๋ช… ๋ณผ๋ฅจ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
    • ์ต๋ช…๋ณผ๋ฅจ์€ ํ•˜๋‚˜์˜ ํŠน์ • ์ปจํ…Œ์ด๋„ˆ์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • --rm์˜ต์…˜์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑ ์‹œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ค‘์ง€ํ•˜๋ฉด ์ต๋ช…๋ณผ๋ฅจ์€ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.
  • --rm์˜ต์…˜์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์œผ๋ฉด ๋‚˜์ค‘์— ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ œ๊ฑฐํ•ด๋„ ์ต๋ช… ๋ณผ๋ฅจ์ด ์ž๋™์œผ๋กœ ์ œ๊ฑฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    ์ƒˆ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ƒˆ๋กœ์šด ์ต๋ช… ๋ณผ๋ฅจ์ด ๋‹ค์‹œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ ์ต๋ช… ๋ณผ๋ฅจ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • docker volume rm <์ œ๊ฑฐํ•  ๋ณผ๋ฅจ๋ช…> or docker volume prune(์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ต๋ช… ๋ณผ๋ฅจ ์ œ๊ฑฐ)
  • ์ต๋ช…๋ณผ๋ฅจ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ์ปจํ…Œ์ด๋„ˆ์— ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ์ž ๊ทธ๋Š”๋ฐ ์œ ์šฉํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์— ์˜ํ•ด ๋ฎ์–ด ์“ฐ์ด๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š”๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์™ธ๋ถ€ ๊ฒฝ๋กœ๋ณด๋‹ค ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ๊ฒฝ๋กœ์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋†’์ด๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ช…๋ช…๋œ ๋ณผ๋ฅจ(named volumes)

  • Dockerfile์—์„œ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ -v <๋ณผ๋ฅจ๋ช…>:<๋งคํ•‘๋  ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ์œ„์น˜> ์˜ต์…˜์œผ๋กœ ์ฝœ๋ก  ์•ž์— ์ด๋ฆ„์„ ๋ถ™์—ฌ ๋ช…๋ช…๋œ ๋ณผ๋ฅจ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ ๋‹ค.
  • ํŠน์ • ์ปจํ…Œ์ด๋„ˆ์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋˜์–ด๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋ช…๋ช…๋œ ๋ณผ๋ฅจ์€ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ๋„์ปค์— ์˜ํ•ด ์‚ญ์ œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • ๋ช…๋ช…๋œ ๋ณผ๋ฅจ์€ ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ์—๋งŒ ์—ฐ๊ฒฐ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ƒˆ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๋ณผ๋ฅจ์ด ๋ณต๊ตฌ๋˜๊ณ  ํด๋”๊ฐ€ ๋ณต๊ตฌ๋ฉ๋‹ˆ๋‹ค.
  • ์˜๊ตฌ์ ์ด์–ด์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋‚˜ ํŽธ์ง‘ํ•˜๊ฑฐ๋‚˜ ์ง์ ‘ ๋ณผ ํ•„์š”๊ฐ€ ์—†๋Š” ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ

  • ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ ํŒŒ์ผ ๋˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์ปจํ…Œ์ด๋„ˆ์— ๋งˆ์šดํŠธ ๋ฉ๋‹ˆ๋‹ค.
  • docker run -v <ํ”„๋กœ์ ํŠธ ์ ˆ๋Œ€ ๊ฒฝ๋กœ>:<๋งคํ•‘๋  ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ์œ„์น˜> <์ด๋ฏธ์ง€ ์ด๋ฆ„>
    • ์ ˆ๋Œ€ ๊ฒฝ๋กœ ๋ฐ”๋กœ ๊ฐ€๊ธฐ(shortcuts) example
      • macOS / Linux: -v $(pwd):/app
      • Windows: -v "%cd%":/app
  • ๋ฐ”์šด๋“œ ๋งˆ์šดํŠธ์˜ ๊ฒฝ์šฐ ์œ„์น˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํŠน์ • ์ปจํ…Œ์ด๋„ˆ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ปจํ…Œ์ด๋„ˆ ์ข…๋ฃŒ ๋ฐ ์ œ๊ฑฐ ํ›„์—๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์ง€๋˜๊ณ  ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ *ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋ ค๋ฉด ํ”„๋กœ์ ํŠธ ๋‚ด์˜ ๋ชจ๋“  ๋กœ์ปฌ ์ฝ˜ํ…์ธ ๋ฅผ ์‚ญ์ œํ•ด์•ผ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์˜๊ตฌ์ ์ด๊ณ  ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.