๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“– Docker

[Docker] Docker Compose ์™„์ „ ์ •๋ณต: ๊ฐœ๋…๋ถ€ํ„ฐ ์‹ค์Šต, CLI ๋ช…๋ น์–ด๊นŒ์ง€ ์ •๋ฆฌ

by carrot0911 2025. 5. 16.

Docker Compose๋ž€?!

์—ฌ๋Ÿฌ ๊ฐœ์˜ Docker ์ปจํ…Œ์ด๋„ˆ๋“ค์„ ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๋กœ ์ •์˜๋ผ๊ณ  ๊ตฌ์„ฑํ•ด ํ•˜๋‚˜์˜ ๋ฌถ์Œ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ํˆด์ด๋‹ค!

 

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

์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์šฉ์ดํ•˜๋‹ค.

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

๋ณต์žกํ•œ ๋ช…๋ น์–ด๋กœ ์‹คํ–‰์‹œํ‚ค๋˜ ๊ฑธ ๊ฐ„์†Œํ™” ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

Docker Compose๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ๋•Œ๋งˆ๋‹ค ๋ณต์žกํ•œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
๋‹จ์ˆœํžˆ docker compose up ๋ช…๋ น์–ด๋งŒ ์‹คํ–‰์‹œํ‚ค๋ฉด ๋œ๋‹ค.

 

Docker Compose ์ „์ฒด ํ๋ฆ„ ๋А๊ปด๋ณด๊ธฐ

1. compose.yml ํŒŒ์ผ ์ž‘์„ฑํ•˜๊ธฐ

services:
  my-web-server:  
    container_name: webserver
    image: nginx
    ports: 
      - 80:80

๐Ÿ‘‰  services : my-web-server : Docker Compose์—์„œ ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์„œ๋น„์Šค(Service)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์ด ์˜ต์…˜์€ ์„œ๋น„์Šค์— ์ด๋ฆ„์„ ๋ถ™์ด๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.
๐Ÿ‘‰  container_name: web-server : ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋„์šธ ๋•Œ ๋ถ™์ด๋Š” ๋ณ„์นญ์ด๋‹ค. CLI์—์„œ --name web-server ์—ญํ• ๊ณผ ๋™์ผํ•˜๋‹ค.
๐Ÿ‘‰  image: nginx : ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰์‹œํ‚ฌ ๋•Œ ์–ด๋–ค ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ง€ ์ •์˜ํ•˜๋Š” ๋ช…๋ น์–ด์ด๋‹ค. $ docker run [์ด๋ฏธ์ง€๋ช…] ๊ณผ ๋™์ผํ•œ ์—ญํ• ์ด๋‹ค.
๐Ÿ‘‰  ports : ํฌํŠธ ๋งคํ•‘์€ ์–ด๋–ป๊ฒŒ ํ•  ์ง€๋ฅผ ์„ค์ •ํ•˜๋Š” ์˜ต์…˜์ด๋‹ค. CLI์—์„œ -p 80:80 ์—ญํ• ๊ณผ ๋™์ผํ•˜๋‹ค.

2. compose ํŒŒ์ผ ์‹คํ–‰์‹œํ‚ค๊ธฐ

$ docker compose up -d

3. compose ์‹คํ–‰ ํ˜„ํ™ฉ ๋ณด๊ธฐ

$ docker compose ps
$ docker ps

4. compose๋กœ ์‹คํ–‰๋œ ์ปจํ…Œ์ด๋„ˆ ์‚ญ์ œ

$ docker compose down

 

์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” Docker Compose CLI ๋ช…๋ น์–ด

์•„๋ž˜ ๋ช…๋ น์–ด๋“ค์€ compose.yml ํŒŒ์ผ์ด ์กด์žฌํ•˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์‹คํ–‰์‹œ์ผœ์•ผ ํ•œ๋‹ค.

compose ํŒŒ์ผ ์ž‘์„ฑ

services:
  websever:
    container_name: webserver
    image: nginx
    ports: 
      - 80:80

compose.yml์—์„œ ์ •์˜ํ•œ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰

$ docker compose up    # ํฌ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰
$ docker compose up -d # ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰

Docker Compose๋กœ ์‹คํ–‰์‹œํ‚จ ์ปจํ…Œ์ด๋„ˆ ํ™•์ธํ•˜๊ธฐ

# compose.yml์— ์ •์˜๋œ ์ปจํ…Œ์ด๋„ˆ ์ค‘ ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๋งŒ ๋ณด์—ฌ์ค€๋‹ค. 
$ docker compose ps 

# compose.yml์— ์ •์˜๋œ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.
$ docker compose ps -a

Docker Compose ๋กœ๊ทธ ํ™•์ธํ•˜๊ธฐ

# compose.yml์— ์ •์˜๋œ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์˜ ๋กœ๊ทธ๋ฅผ ๋ชจ์•„์„œ ์ถœ๋ ฅํ•œ๋‹ค.
$ docker compose logs

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ์ด๋ฏธ์ง€ ์žฌ๋นŒ๋“œํ•˜๊ธฐ

$ docker compose up --build # ํฌ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰
$ docker compose up --build -d # ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰
์ฐธ๊ณ : docker compose up vs docker compose up --build

๐Ÿ‘‰  docker compose up
: ์ด๋ฏธ์ง€๊ฐ€ ์—†์„ ๋•Œ๋งŒ ๋นŒ๋“œํ•ด์„œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค. ์ด๋ฏธ์ง€๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜์ง€ ์•Š๊ณ  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค.

๐Ÿ‘‰  docker compose up --build : ์ด๋ฏธ์ง€๊ฐ€ ์žˆ๊ฑด ์—†๊ฑด ๋ฌด์กฐ๊ฑด ๋นŒ๋“œ๋ฅผ ๋‹ค์‹œ ํ•ด์„œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค.

์ด๋ฏธ์ง€ ๋‹ค์šด ๋ฐ›๊ธฐ / ์—…๋ฐ์ดํŠธํ•˜๊ธฐ

$ docker compose pull

๐Ÿ‘‰  compose.yml์—์„œ ์ •์˜๋œ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด ๋ฐ›๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค.
      ๋กœ์ปฌ ํ™˜๊ฒฝ์— ์ด๋ฏธ์ง€๊ฐ€ ์—†๋‹ค๋ฉด ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด ๋ฐ›๋Š”๋‹ค.
      ๋กœ์ปฌ ํ™˜๊ฒฝ์— ์ด๋ฏธ ์ด๋ฏธ์ง€๊ฐ€ ์žˆ๋Š”๋ฐ, Dockerhub์˜ ์ด๋ฏธ์ง€์™€ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€์ผ ๊ฒฝ์šฐ ์ด๋ฏธ์ง€๋ฅผ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค.

Docker Compose์—์„œ ์ด์šฉํ•œ ์ปจํ…Œ์ด๋„ˆ ์ข…๋ฃŒํ•˜๊ธฐ

$ docker compose down

 

Docker Compose๋กœ Redis, MySQL, Spring Boot ์‹คํ–‰์‹œํ‚ค๊ธฐ

Redis compose.yml

services:
  my-cache-server:
    image: redis
    ports: 
      - 6379:6379

MySQL compose.yml

services:
  my-db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: pwd1234
    volumes:
      - ./mysql_data:/var/lib/mysql
    ports:
      - 3306:3306

๐Ÿ‘‰  environment: ... : CLI์—์„œ -e MYSQL_ROOT_PASSWORD=password ์—ญํ• ๊ณผ ๋™์ผํ•˜๋‹ค.
๐Ÿ‘‰  volumes: ... : CLI์—์„œ -v {ํ˜ธ์ŠคํŠธ ๊ฒฝ๋กœ}:/var/lib/mysql ์—ญํ• ๊ณผ ๋™์ผํ•˜๋‹ค.

Spring Boot compose.yml

services:
  my-server:
    build: .
    ports:
      - 8080:8080

๐Ÿ‘‰  build . : compose.yml์ด ์กด์žฌํ•˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ(.)์— ์žˆ๋Š” Dockerfile๋กœ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋„์šฐ๊ฒ ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

compose ํŒŒ์ผ ์‹คํ–‰์‹œํ‚ค๊ธฐ

$ docker compose up -d --build

 

Docker CLI โ†” Docker Compose ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•˜๊ธฐ

Docker CLI โ†’ compose.yml๋กœ ๋ณ€ํ™˜

https://www.composerize.com/

 

Composerize

Say goodbye to sprawling docker commands and say hello to $ docker-compose up :) Looking for the reverse (Docker compose to docker run command(s)) ? Try Decomposerize Want to convert from Docker compose file formats ? Try Composeverter Paste your docker ru

www.composerize.com

compose.yml โ†’ Docker CLI๋กœ ๋ณ€ํ™˜

https://www.decomposerize.com/

 

Decomposerize

Convert your docker compose file to $ docker run command(s) :) Paste your docker compose file content into the box below! Looking for the reverse (docker run command(s) to Docker compose) ? Try Composerize Want to convert from Docker compose file formats ?

www.decomposerize.com