๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์„œ๋น„์Šค & ํˆด

[Docker] 3. ๋„์ปค ์ปดํฌ์ฆˆ(Docker compose)

by ์„œ์•„๋ž‘๐Ÿ˜ 2025. 1. 6.

 

 

๋„์ปค ์ปดํฌ์ฆˆ(Docker compose)

๋„์ปค ์ปดํฌ์ฆˆ๋Š” ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์ˆœ์„œ์™€ ํ๋ฆ„์„ ํ•œ๋ˆˆ์— ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์‹คํ–‰์— ๊ด€ํ•œ ๋ช…์„ธ๋ฅผ ์ ์–ด ๋†“์œผ๋‹ˆ ์–ด๋–ค ์„œ๋น„์Šค๋“ค์ด ์—ฐ๊ด€๋˜์–ด ์žˆ๊ณ  ์ˆœ์„œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ง„ํ–‰๋˜๋Š”์ง€ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์ƒ์„ธ ์„ค๋ช…์ด ๋‚˜์˜ค๊ฒ ์ง€๋งŒ, ์ œ๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ๋„์ปค ์ปดํฌ์ฆˆ์˜ ์ตœ๋Œ€ ์žฅ์ ์€ "Docker run(์‹คํ–‰)์˜ ์ฝ”๋“œํ™”"๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํžˆ ์‚ดํŽด๋ณด์‹œ์ฃ .

 

Docker Compose๋ž€?

Docker Compose๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ Docker ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ •์˜ํ•˜๊ณ  ๋™์‹œ์— ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๋‹จ์ผ docker-compose.yml ํŒŒ์ผ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ ์ •์˜(์„œ๋น„์Šค, ๋„คํŠธ์›Œํฌ, ๋ณผ๋ฅจ ๋“ฑ)๋ฅผ ์ž‘์„ฑํ•˜๊ณ , ๋ช…๋ น ํ•œ ์ค„๋กœ ๊ด€๋ จ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘, ์ค‘์ง€, ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


 

Docker Compose๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

Docker Compose๋Š” ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ๋ฐ ๋ฐฐํฌ์—์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ์ด์œ ๋กœ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค:

1. ๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ฆฌ

๋ณต์žกํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ข…์ข… ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค(์˜ˆ: ์›น ์„œ๋ฒ„, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์บ์‹œ ์„œ๋ฒ„ ๋“ฑ).

Compose๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ ์ปจํ…Œ์ด๋„ˆ์˜ ์„ค์ •์„ ํ•œ๊ณณ์—์„œ ์ •์˜ํ•˜๊ณ , ์‰ฝ๊ฒŒ ์ „์ฒด ์‹œ์Šคํ…œ์„ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ์ค‘์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์˜ˆ: frontend, backend, database ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ•œ๊บผ๋ฒˆ์— ์‹คํ–‰.

2. ๊ฐ„ํŽธํ•œ ์„ค์ • ๋ฐ ์žฌ์‚ฌ์šฉ์„ฑ

์ปจํ…Œ์ด๋„ˆ์˜ ์„ค์ • ์ •๋ณด๋ฅผ docker-compose.yml ํŒŒ์ผ์— ์„ ์–ธ์ ์œผ๋กœ ์ •์˜ํ•˜๋ฏ€๋กœ:

  • ์„ค์ •์„ ๊ณต์œ ํ•˜๊ฑฐ๋‚˜ ๋ฒ„์ „ ๊ด€๋ฆฌ(Git)ํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.
  • ํŒ€์› ๊ฐ„ ๋™์ผํ•œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.

3. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์ถ• ๋ฐ ํ…Œ์ŠคํŠธ

๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์†์‰ฝ๊ฒŒ ์‹คํ–‰ํ•˜์—ฌ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ๊ณผ ์œ ์‚ฌํ•œ ์ƒํƒœ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์˜ˆ: docker-compose up์„ ํ†ตํ•ด ๊ฐœ๋ฐœ, ํ…Œ์ŠคํŠธ, QA ํ™˜๊ฒฝ์„ ๋™์ผํ•˜๊ฒŒ ์žฌํ˜„.

4. ๋„คํŠธ์›Œํ‚น ๋ฐ ์—ฐ๊ฒฐ ๊ด€๋ฆฌ

Compose๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ์ž๋™์œผ๋กœ ์„ค์ •ํ•˜๊ณ , ์„œ๋กœ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ํ†ต์‹ ์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  • ์˜ˆ: backend ์ปจํ…Œ์ด๋„ˆ๊ฐ€ database ์ปจํ…Œ์ด๋„ˆ์˜ ์ด๋ฆ„์œผ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ (service name ๊ธฐ๋ฐ˜).

5. ํšจ์œจ์ ์ธ ๋ฐฐํฌ ๋ฐ ์Šค์ผ€์ผ๋ง

Docker Compose๋Š” Docker Swarm๊ณผ ์—ฐ๊ณ„ํ•˜์—ฌ ์Šค์ผ€์ผ๋ง ๋ฐ ๋ฐฐํฌ๋„ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์˜ˆ: docker-compose up --scale web=3์œผ๋กœ ์›น ์„œ๋ฒ„๋ฅผ 3๊ฐœ๋กœ ํ™•์žฅ.

6. ๋ณผ๋ฅจ ๋ฐ ๋ฐ์ดํ„ฐ ์œ ์ง€ ๊ด€๋ฆฌ

์„œ๋น„์Šค ๊ฐ„ ๊ณต์œ ๋˜๋Š” ๋ฐ์ดํ„ฐ ๋ณผ๋ฅจ์„ ์‰ฝ๊ฒŒ ์ •์˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด ๋ฐ์ดํ„ฐ ์˜์†์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

  • ์˜ˆ: volumes๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ์ดํ„ฐ๋ฅผ ํ˜ธ์ŠคํŠธ ๋จธ์‹ ์— ์ €์žฅ.

 

Docker Compose์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ

  1. Services: ์ปจํ…Œ์ด๋„ˆ ๋‹จ์œ„์˜ ์‹คํ–‰ ํ™˜๊ฒฝ ์ •์˜.
    • ์˜ˆ: web, db์™€ ๊ฐ™์€ ์„œ๋น„์Šค.
  2. Networks: ์ปจํ…Œ์ด๋„ˆ ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•œ ๋„คํŠธ์›Œํฌ ์„ค์ •.
  3. Volumes: ๋ฐ์ดํ„ฐ ๊ณต์œ  ๋ฐ ์˜์†์„ฑ์„ ์œ„ํ•œ ๋ณผ๋ฅจ ์„ค์ •.

 

Docker Compose ์‚ฌ์šฉ ์˜ˆ์‹œ

docker-compose.yml ์˜ˆ์ œ ํŒŒ์ผ

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    networks:
      - app-network

  app:
    build:
      context: ./app
    volumes:
      - .:/app
    depends_on:
      - db
    networks:
      - app-network

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - app-network

volumes:
  db-data:

networks:
  app-network:

์‹คํ–‰ ๋ฐฉ๋ฒ•

  1. ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰: docker-compose up -d
  2. ์‹คํ–‰๋œ ์ปจํ…Œ์ด๋„ˆ ํ™•์ธ: docker-compose ps
  3. ์ปจํ…Œ์ด๋„ˆ ์ข…๋ฃŒ ๋ฐ ์‚ญ์ œ: docker-compose down

 

์ตœ์‹  Docker Compose

docker-compose up/down ๋“ฑ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์€ ํŒŒ์ด์ฌ ๊ธฐ๋ฐ˜์˜ version1์ด๋ฉฐ ๋”์ด์ƒ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(๋‹ค๋งŒ ๊ด€๋ฆฌ๋Š” ๊ณ„์† ๋จ). ์ตœ์‹ ๋ฒ„์ „์€ compose.yaml๋กœ ๊ด€๋ฆฌ๋˜๋ฉฐ docker compose up/down์‹์˜ Go๊ธฐ๋ฐ˜์˜ v2์ž…๋‹ˆ๋‹ค.

Docker compose v2 ์‹ค์Šต

docker compose --help

# compose.yaml ์„œ๋น„์Šค์— build๊ฐ€ ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ๋“ค ๋นŒ๋“œ ์ง„ํ–‰
docker compose build

# ์„œ๋น„์Šค ๋ฐ ๋„คํŠธ์›Œํฌ ์ƒ์„ฑ
docker compose up

# ์„œ๋น„์Šค ๋ฐ ๋„คํŠธ์›Œํฌ ์‚ญ์ œ
docker compose down

# ์„œ๋น„์Šค ๋ฐ ๋„คํŠธ์›Œํฌ ์ƒ์„ฑ(๋ฐฑ๊ทธ๋ผ์šด๋“œ)
docker compose up -d

# ์ปดํฌ์ฆˆ ํ”„๋กœ์ ํŠธ ํ˜„ํ™ฉ(์„œ๋น„์Šค๋Š” ํ”„๋กœ์ ํŠธ์˜ ํ•˜์œ„)
docker compose ls

# ํ•ญ์ƒ ๋นŒ๋“œ ํ•˜๋ฉด์„œ up ์‹œํ‚ค๊ธฐ
# ์ปดํฌ์ฆˆ๋Š” ๋™์ผํ•œ ์ด๋ฏธ์ง€ ์ด๋ฆ„์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ, build๋ฅผ ์ƒ๋žตํ•จ
docker compose up -d --build

docker compose logs -h

docker compose logs -f

docker compose down

 

 

 

docker compose ls, docker compose images

๋‘ ๋ช…๋ น์–ด๋Š” Docker Compose ํ™˜๊ฒฝ์—์„œ ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜์ง€๋งŒ, ์„œ๋กœ ๋‹ค๋ฅธ ๋Œ€์ƒ๊ณผ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.


1. docker compose ls

  • ๋ชฉ์ : Docker Compose๋กœ ๊ด€๋ฆฌ ์ค‘์ธ ํ”„๋กœ์ ํŠธ ๋ชฉ๋ก์„ ํ‘œ์‹œ.
  • ์ฃผ์š” ์ •๋ณด:
    • ๊ฐ ํ”„๋กœ์ ํŠธ์˜ ์ด๋ฆ„.
    • ํ”„๋กœ์ ํŠธ๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ์ƒํƒœ(Status).
    • ๊ตฌ์„ฑ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ(Working Directory).
  • ์‚ฌ์šฉ ์ด์œ :
    • ์—ฌ๋Ÿฌ Docker Compose ํ”„๋กœ์ ํŠธ๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ ๊ฐ๊ฐ์˜ ์ƒํƒœ๋ฅผ ํ•œ๋ˆˆ์— ํ™•์ธ.
    • ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹๋ณ„ํ•˜๊ฑฐ๋‚˜ ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ํ™•์ธ.
  • ์ถœ๋ ฅ ์˜ˆ์‹œ:
    • NAME: Docker Compose ํ”„๋กœ์ ํŠธ ์ด๋ฆ„.
    • STATUS: ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์˜ ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ(running, exited ๋“ฑ).
    • CONFIG FILES: ์‚ฌ์šฉ๋œ docker-compose.yml ํŒŒ์ผ ๊ฒฝ๋กœ.
$ docker compose ls
NAME                STATUS       CONFIG FILES
my_project          running      ./docker-compose.yml
another_project     exited       ./another-dir/docker-compose.yml

2. docker compose images

  • ๋ชฉ์ : ํŠน์ • Docker Compose ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉ๋œ Docker ์ด๋ฏธ์ง€ ๋ชฉ๋ก์„ ํ‘œ์‹œ.
  • ์ฃผ์š” ์ •๋ณด:
    • ์ด๋ฏธ์ง€ ์ด๋ฆ„๊ณผ ํƒœ๊ทธ.
    • ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„.
    • ์ด๋ฏธ์ง€ ID.
    • ์ด๋ฏธ์ง€ ํฌ๊ธฐ.
  • ์‚ฌ์šฉ ์ด์œ :
    • ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉ๋œ ์ด๋ฏธ์ง€ ์ •๋ณด๋ฅผ ํ™•์ธ.
    • ์ด๋ฏธ์ง€ ํƒœ๊ทธ๋ฅผ ๊ฒ€ํ† ํ•˜๊ฑฐ๋‚˜, ํ•„์š” ์—†๋Š” ์ด๋ฏธ์ง€๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์ „์— ์ฐธ๊ณ .
  • ์ถœ๋ ฅ ์˜ˆ์‹œ:
    • Container: Compose ํ”„๋กœ์ ํŠธ์—์„œ ์ •์˜๋œ ์„œ๋น„์Šค ์ด๋ฆ„.
    • Repository: ์‚ฌ์šฉ๋œ Docker ์ด๋ฏธ์ง€์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ด๋ฆ„.
    • Tag: Docker ์ด๋ฏธ์ง€ ํƒœ๊ทธ.
    • Image ID: ์ด๋ฏธ์ง€์˜ ๊ณ ์œ  ID.
    • Size: ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ.
$ docker compose images
Container           Repository      Tag       Image ID       Size
my_project_web      nginx           latest    a1b2c3d4e5f6   23MB
my_project_db       postgres        14.1      f6e5d4c3b2a1   40MB

 

์ฐจ์ด์  ์š”์•ฝ

 

๋ช…๋ น์–ด ์ฃผ์š” ๋Œ€์ƒ ์ถœ๋ ฅ ์ •๋ณด ์‚ฌ์šฉ ๋ชฉ์ 
docker compose ls Docker Compose ํ”„๋กœ์ ํŠธ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„, ์ƒํƒœ, ๊ตฌ์„ฑ ํŒŒ์ผ ๊ฒฝ๋กœ ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ด€๋ฆฌํ•˜๊ฑฐ๋‚˜ ์ƒํƒœ๋ฅผ ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•  ๋•Œ.
docker compose images Docker Compose ์ด๋ฏธ์ง€ ์ปจํ…Œ์ด๋„ˆ, ์ด๋ฏธ์ง€ ์ด๋ฆ„/ํƒœ๊ทธ, ID, ํฌ๊ธฐ ํŠน์ • ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉ๋œ Docker ์ด๋ฏธ์ง€ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ๋•Œ.

 

์‚ฌ์šฉ ์˜ˆ์‹œ

1. ํ”„๋กœ์ ํŠธ ์ƒํƒœ ํ™•์ธ

$ docker compose ls
NAME                STATUS       CONFIG FILES
my_app              running      ./docker-compose.yml

2. ํŠน์ • ํ”„๋กœ์ ํŠธ์˜ ์ด๋ฏธ์ง€ ์ •๋ณด ํ™•์ธ

$ docker compose images
Container           Repository      Tag       Image ID       Size
my_app_web          python          3.10      abc12345       150MB
my_app_db           mysql           8.0       def67890       300MB

 

 

๋Œ“๊ธ€