2025-06-04
Docker Compose๋ ๋ค์ค ์ปจํ ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ํ๊ณ ์คํํ ์ ์๋๋ก ์ง์ํ๋ Docker์ ๊ณต์ ๋๊ตฌ์ ๋๋ค.
docker-compose.yml
ํ์ผ ํ๋๋ก ๋ชจ๋ ์๋น์ค ์ ์, ๋คํธ์ํฌ, ๋ณผ๋ฅจ ๋ฑ์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
๊ธฐ์กด ๋ฐฉ์ ๋ฌธ์ ์ | Compose์ ํด๊ฒฐ ๋ฐฉ์ |
---|---|
์ฌ๋ฌ ์ปจํ
์ด๋๋ฅผ ์ผ์ผ์ด docker run ์ผ๋ก ์คํํด์ผ ํจ | ๋ชจ๋ ์ค์ ์ yml ํ์ผ๋ก ์ ์ธํ๊ณ ํ ๋ฒ์ ์คํ |
๊ฐ ์ปจํ ์ด๋ ๊ฐ ๋คํธ์ํฌ ์๋ ์ฐ๊ฒฐ ํ์ | ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋์ ์ฌ์ฉ์ ์ ์ ๋คํธ์ํฌ์์ ์๋ ์ฐ๊ฒฐ |
์๋น์ค๋ณ ํ๊ฒฝ๋ณ์, ํฌํธ, ๋ณผ๋ฅจ ๋ฑ ์ค์ ๋ฐ๋ณต | ์ ์ธ์ ๊ตฌ์ฑ์ผ๋ก ์ฌ์ฌ์ฉ์ฑ ํ๋ณด |
๋ณต์กํ ์์คํ ์ ์ํ ๊ด๋ฆฌ ์ด๋ ค์ | up , down ๋ช
๋ น์ผ๋ก ์ ์ฒด ์ ์ด ๊ฐ๋ฅ |
Docker Compose๋ ๋ค์ ์ธ ๊ฐ์ง ๊ตฌ์ฑ ์์๋ก ์ด๋ฃจ์ด์ง๋๋ค:
๊ตฌ์ฑ ์์ | ์ค๋ช |
---|---|
services | ์คํํ ์ปจํ ์ด๋ ๋ชฉ๋ก ๋ฐ ์ค์ (์: web, db ๋ฑ) |
networks | ์๋น์ค ๊ฐ ํต์ ์ ์ํ ๋คํธ์ํฌ ๊ตฌ์ฑ |
volumes | ๋ฐ์ดํฐ ์์์ฑ์ ์ํ ์ ์ฅ์ ๊ตฌ์ฑ |
๋ชจ๋ ์ค์ ์ docker-compose.yml
ํ์ผ์ ์์ฑํฉ๋๋ค.
ํญ๋ชฉ | ์ค๋ช |
---|---|
image | ์ฌ์ฉํ ๋์ปค ์ด๋ฏธ์ง |
build | Dockerfile ์์น |
container_name | ์ปจํ ์ด๋ ์ด๋ฆ ์ง์ |
ports | ํธ์คํธ โ ์ปจํ ์ด๋ ํฌํธ ๋งคํ |
volumes | ํธ์คํธ โ ์ปจํ ์ด๋ ๋๋ ํ ๋ฆฌ ๋งคํ |
depends_on | ์์กด ๊ด๊ณ ์ง์ (ex: web โ db) |
environment | ํ๊ฒฝ ๋ณ์ ์ค์ |
networks | ์ฌ์ฉํ ๋คํธ์ํฌ ์ง์ |
restart | ์๋ ์ฌ์์ ์ ์ฑ ์ค์ (ex: always, on-failure) |
docker-compose.yml
ํ์ผ ์์ฑdocker images # ๋ก์ปฌ ์ด๋ฏธ์ง ํ์ธ
docker ps -a # ์ปจํ
์ด๋ ์ํ ํ์ธ
docker-compose up --build -d
--build: ํ์ ์ ์ด๋ฏธ์ง ์ฌ๋น๋
-d: ๋ฐฑ๊ทธ๋ผ์ด๋ ๋ชจ๋ ์คํ
docker ps # ์คํ ์ค ์ปจํ
์ด๋ ํ์ธ
docker-compose logs
Ctrl + C # ์คํ ์ค์ธ ํฌ๊ทธ๋ผ์ด๋ ์ค์ง
docker-compose down # ๋ชจ๋ ์ปจํ
์ด๋ ๋ฐ ๋คํธ์ํฌ ์ ๋ฆฌ
โ ๏ธ down -v ์ฌ์ฉ ์ ๋ณผ๋ฅจ๊น์ง ์ญ์ ๋๋ฏ๋ก DB ๋ฐ์ดํฐ ์ฃผ์
depends_on
์ ์ปจํ
์ด๋ ์คํ๋ง ํ์ธ, ์ค์ ์๋น์ค๊ฐ ์ค๋น๋์๋์ง ํ์ธ ๋ถ๊ฐhealthcheck
๋ก ์๋น์ค ์ค๋น ์ํ๋ฅผ ํ์ธํ๊ณ ์์กด ์ปจํ
์ด๋์ ์์ ์ฑ ๋ณด์ฅ ๊ฐ๋ฅMySQL
healthcheck:
test: [ "CMD", "mysqladmin", "ping", "-h", "127.0.0.1" ]
interval: 30s
timeout: 10s
retries: 5
Redis
healthcheck:
test: [ "CMD", "redis-cli", "ping" ]
interval: 30s
timeout: 10s
retries: 5
docker-compose down
์ผ๋ก ์ปจํ
์ด๋๊ฐ ์ญ์ ๋๋ฉด DB ๋ฐ์ดํฐ๋ ํจ๊ป ์ญ์ ๋จvolumes
๋ฅผ ์ค์ ํด์ฃผ๋ฉด ๋ฐ์ดํฐ๋ ํธ์คํธ์ ๋ณด์กด๋๋ฏ๋ก ์์ ํ๊ฒ ์ ์ง ๊ฐ๋ฅvolumes:
db-data:
services:
db:
volumes:
- db-data:/var/lib/mysql
โ ๏ธ docker-compose down -v๋ ๋ณผ๋ฅจ๋ ํจ๊ป ์ญ์ ๋๋ฏ๋ก ์ฃผ์!
docker-compose.yml
ํ์ผversion: '3.8'
networks:
custom-network:
driver: bridge
services:
fn:
image: fn
build:
context: ./FN
container_name: fn-container
ports:
- "3000:80"
depends_on:
- bn
networks:
- custom-network
bn:
image: bn
build:
context: ./BN
container_name: bn-container
ports:
- "8090:8090"
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://db-container:3306/bookdb
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: Zhfldk11!
SPRING_REDIS_HOST: redis
SERVER_PORT: 8090
depends_on:
db:
condition: service_healthy
networks:
- custom-network
db:
image: db
build:
context: ./DB
dockerfile: Dockerfile
container_name: db-container
networks:
custom-network:
ports:
- "3330:3306"
healthcheck:
test: [ "CMD", "mysqladmin", "ping", "-h", "127.0.0.1" ]
interval: 30s
timeout: 10s
retries: 5
volumes:
- db-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: Zhfldk11!
MYSQL_DATABASE: bookdb
MYSQL_USER: dbconn
MYSQL_PASSWORD: Zhfldk11!
MYSQL_ROOT_HOST: '%'
deploy:
resources:
limits:
memory: 1024M
redis:
image: redis
build:
context: ./REDIS
container_name: redis-container
ports:
- "6379:6379"
networks:
- custom-network
volumes:
db-data:
healthcheck
, volumes
, depends_on
๋ฑ์ ์ ์ ํ ํ์ฉํ๋ฉด ์ ๋ขฐ์ฑ ์๋ ํ๊ฒฝ ๊ตฌ์ถ ๊ฐ๋ฅ