Docker Volume๊ณผ Compose
Docker์ ์ค์ํ ๊ฐ๋ ์ค ํ๋์ธ Volume๊ณผ ์ปจํ ์ด๋ ๊ด๋ฆฌ์ ์ด์ ์ ์ฃผ๋ Compose์ ๋ํด์ ์์๋ด ๋๋ค.
Nov 21, 2024
๋ค์ด๊ฐ๋ฉฐ
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์ ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ค๋ค๋ณด๊ฒ ์ต๋๋ค.