Docker Volume๊ณผ Compose

Docker์˜ ์ค‘์š”ํ•œ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜์ธ Volume๊ณผ ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌ์— ์ด์ ์„ ์ฃผ๋Š” Compose์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

Nov 21, 2024

ํ™๋„์˜

#ETC

๋“ค์–ด๊ฐ€๋ฉฐ

Docker์˜ ์ค‘์š”ํ•œ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜์ธ Volume๊ณผ ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌ์— ์ด์ ์„ ์ฃผ๋Š” Compose์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

Docker Volume

Docker ์ปจํ…Œ์ด๋„ˆ๋Š” ๋›ฐ์–ด๋‚œ ์ด์‹์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ ๋ฐ์ดํ„ฐ ์˜์†์„ฑ๊นŒ์ง€ ๋ณด์žฅํ•ด ์ฃผ์ง„ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž A๋Š” ์ง„ํ–‰ ์ค‘์ธ ํ”„๋กœ์ ํŠธ๋ฅผ Docker ์ด๋ฏธ์ง€๋กœ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์ถ”ํ›„ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋” ์ง„ํ–‰๋˜์–ด ์ƒˆ๋กœ์šด ๋ฒ„์ „์„ ๋ฆด๋ฆฌ์Šคํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ Docker ์ด๋ฏธ์ง€๋Š” ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š๊ณ  ์ƒˆ๋กญ๊ฒŒ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๋Š” ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‹ค์‹œ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๊ธฐ์— ๊ธฐ์กด ์ปจํ…Œ์ด๋„ˆ๋Š” ์‚ญ์ œํ•˜๊ณ  ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‹ค์‹œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ–ˆ๋”๋‹ˆ ๊ธฐ์กด ์ปจํ…Œ์ด๋„ˆ์— ์ €์žฅ๋˜์–ด ์žˆ๋˜ ๋ฐ์ดํ„ฐ๋“ค์ด ๋ชจ๋‘ ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Docker Volume์ด๋ผ๋Š” ๊ฐœ๋…์„ ํ™œ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Docker Volume์ด ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•

docker run -v [ํ˜ธ์ŠคํŠธ ์ปดํ“จํ„ฐ์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ]:[์ปจํ…Œ์ด๋„ˆ์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ ์ ˆ๋Œ€ ๊ฒฝ๋กœ]

run ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•  ๋•Œ -v ์˜ต์…˜์„ ๋„ฃ๊ฒŒ ๋˜๋ฉด ํ˜ธ์ŠคํŠธ ์ปดํ“จํ„ฐ์˜ ์ €์žฅ ๊ณต๊ฐ„์„ Docker ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋นŒ๋ ค์™€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Volume ์—ฐ๊ฒฐ ์‹œ ์ฃผ์˜ํ•  ์ 

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

Docker Compose

Docker๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๋ณต์žกํ•˜๊ณ  ๊ธด ๋ช…๋ น์–ด๋ฅผ ๋งค๋ฒˆ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๋น„ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. Compose๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ธด ๋ช…๋ น์–ด๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ์‹คํ–‰ํ•˜๊ณ  ๋˜ํ•œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋™์‹œ์— ํŽธํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Dockerfile์„ ์ƒ์„ฑํ•œ ๋™์ผํ•œ ๊ฒฝ๋กœ์— compose.yml ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์—ฌ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Compose์˜ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

๊ธฐ๋ณธ์ ์œผ๋กœ yml ๋ฌธ๋ฒ•์œผ๋กœ ์ž‘์„ฑํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

services: my-web-server: container_name: my-web-server image: nginx ports: - 80:80 my-cache-server:
container_name: my-server image: redis ports: - 6379:6379
  • services : Compose์—์„œ๋Š” service๋ผ๋Š” ํ•ญ๋ชฉ์œผ๋กœ ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋“ค์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰ Compose์—์„œ ๊ด€๋ฆฌ๋˜๋Š” ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋“ค์˜ ๋ฌถ์Œ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์œ„๊ณ„์—์„œ๋Š” ํฌํ•จ๋  ์ปจํ…Œ์ด๋„ˆ๋“ค์˜ ๋ช…์นญ์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„๊ณผ๋Š” ๋ณ„๊ฐœ๋กœ Compose ์ž์ฒด์—์„œ ์ปจํ…Œ์ด๋„ˆ๋“ค ๊ตฌ๋ถ„์„ ์œ„ํ•ด์„œ ๋ถ™์ด๋Š” ๋ช…์นญ์ด๋ผ๊ณ  ์ดํ•ดํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • container_name : ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • image : ์ด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‚ฌ์šฉํ•  ์ด๋ฏธ์ง€๋ฅผ ์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ports : ๋งคํ•‘ํ•  ํฌํŠธ ์ •๋ณด์ž…๋‹ˆ๋‹ค.

๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ช…๋ น์–ด๋“ค ์™ธ์—๋„ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ช…๋ น์–ด๊ฐ€ ์žˆ๋Š”๋ฐ Docker CLI ๋ช…๋ น์–ด๋“ค๊ณผ ๋งค์นญ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Docker Volume์˜ ๊ฒฝ์šฐโ€ฆ

  • CLI
    docker volume create my-volume docker run -v my-volume:/data my-container
  • compose.yml
    services: my-container: image: nginx volumes: - my-volume:/data volumes: my-volume:

์™€ ๊ฐ™์€ ์ผ€์ด์Šค๋กœ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Compose ์‹คํ–‰๊ณผ ์ค‘์ง€

docker compose up -d --build

docker compose up ๋ช…๋ น์–ด๋กœ compose.yml ํŒŒ์ผ์— ์ •์˜๋œ ๋Œ€๋กœ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์‹คํ–‰ํ•˜๋ ค๋ฉด -d ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๋งค ์‹คํ–‰๋งˆ๋‹ค ์ƒˆ๋กญ๊ฒŒ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œ ํ•ด์•ผ ํ•œ๋‹ค๋ฉดย --build ์˜ต์…˜๋„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

docker compose down

docker compose down ๋ช…๋ น์–ด๋Š” ์‹คํ–‰ ์ค‘์ธ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ค‘์ง€ ๋ฐ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

docker compose ps

docker compose ps compose๋ฅผ ํ†ตํ•˜์—ฌ ์‹คํ–‰๋œ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๋“ค์˜ ๋ชฉ๋ก์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ๋“ค๋ผ๋ฆฌ์˜ ํ†ต์‹ 

์„ค์ •ํ•œ ์ปจํ…Œ์ด๋„ˆ์˜ ๋ช…์นญ์€ ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋“ค์˜ ip ์ฃผ์†Œ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์ปจํ…Œ์ด๋„ˆ๋“ค ๋‚ด๋ถ€์—์„œ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ๋กœ์˜ ์ฃผ์†Œ๋กœ ์—ฐ๊ฒฐ์ด ํ•„์š”ํ•  ๋•Œ ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ์˜ ์ด๋ฆ„์„ ์ฃผ์†Œ ๋Œ€์‹  ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ, ๋ช…์‹œ์ ์ธ ๋„คํŠธ์›Œํฌ ์ •์˜๋ฅผ ํ†ตํ•ด์„œ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. AI์—๊ฒŒ React ํ”„๋ŸฐํŠธ์—”๋“œ ํ™˜๊ฒฝ๊ณผ Node ๋ฐฑ์—”๋“œ ํ™˜๊ฒฝ ๊ฐ„์˜ API ํ†ต์‹ ์„ ๊ฐ€์ •ํ•œ ์ƒ˜ํ”Œ ์ฝ”๋“œ๋ฅผ ์š”์ฒญํ–ˆ์Šต๋‹ˆ๋‹ค. ๋Š˜ ๊ทธ๋ ‡๋“ฏ AI์˜ ์ฝ”๋“œ๋“ค์€ ๊ฒ€์ฆ์ด ํ•„์š”ํ•˜์ง€๋งŒ ๋กœ์ง ๊ฒ€์ฆ์ด ํ•„์š”ํ•œ ์งˆ๋ฌธ์€ ์•„๋‹ˆ๊ธฐ์— compose.yml ํŒŒ์ผ์˜ ๊ตฌ์„ฑ์— ๋Œ€ํ•ด ํ›‘์–ด๋ณด๊ธฐ์—๋Š” ์ ํ•ฉํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

services: frontend: build: context: ./frontend image: react-frontend ports: - "3000:3000" # Expose
the React app on port 3000 environment: - REACT_APP_API_URL=http://backend:4000 # Backend API URL
networks: - my-network backend: build: context: ./backend image: node-backend ports: - "4000:4000" #
Expose the Node.js app on port 4000 networks: - my-network networks: my-network: driver: bridge

๋งˆ์น˜๋ฉฐ

์ด๋ ‡๊ฒŒ Docker Volume๊ณผ Compose์˜ ๊ธฐ์ดˆ ์ด๋ก ๊ณผ ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•ด ํ™•์ธํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๊ธฐํšŒ๊ฐ€ ๋œ๋‹ค๋ฉด ๋‹ค์Œ ์•„ํ‹ฐํด์—์„œ๋Š” ํ”„๋ŸฐํŠธ์—”๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ Docker ์ด๋ฏธ์ง€๋กœ ์ƒ์„ฑํ•˜์—ฌ AWS์— ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋‹ค๋ค„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Grow & Glow ยฉ 2025

Banner images by undraw.co