# Table of Contents

# Docker Compose

일반적으로 하나의 시스템은 여러 컨테이너로 구성된다. Docker Compose를 사용하면 각 컨테이너 실행을 위한 명령어를 하나씩 입력할 필요없이 docker-compose.yml파일에 모든 컨테이너 실행과 실행 순서를 작성할 수 있다.

# Docker Compose 설치

Mac OS의 경우 Docker Desktop on MacDocker Compose가 내장되어있다.

$ docker-compose -version
docker-compose version 1.29.2, build 5becea4c

# docker-compose.yml

Docker Compose를 사용하려면 docker-compose.yml파일을 생성하고 생성할 이미지들과 필요한 정보들을 나열해야한다. 아래 예제는 세 개의 컨테이너 MySQL, Nginx, Tomcat을 실행한다.

# docker-compose.yml
version: '3'

services:
  # MySQL
  db:
    image: docker.io/mysql
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=password

  ## Tomcat
  app:
    image: docker.io/tomcat
    ports:
      - "8080:8080"

  ## Nginx
  web:
    image: docker.io/nginx
    ports:
      - "80:80"

# Docker Compose 실행

docker-compose up 명령어로 컨테이너들을 포그라운드로 실행할 수 있다.

$ docker-compose up

-d 옵션을 추가하면 백그라운드로 실행한다.

$ docker-compose up -d

만약 파일 이름이 docker-compose.yml이 아니라면 -f 옵션으로 파일 이름을 지정할 수 있다.

$ docker-compose -f my-docker-compose.yml up -d

# Docker Compose 컨테이너들 확인하기

docker-compose ps 명령어로 컨테이너들을 확인할 수 있다.

$ docker-compose ps
    Name                   Command               State                 Ports              
------------------------------------------------------------------------------------------
project_app_1   catalina.sh run                  Up      0.0.0.0:8080->8080/tcp           
project_db_1    docker-entrypoint.sh mysqld      Up      0.0.0.0:3306->3306/tcp, 33060/tcp
project_web_1   /docker-entrypoint.sh ngin ...   Up      0.0.0.0:80->80/tcp  

# Docker Compose 재시작

$ docker-compose restart

# Docker Compose 중지

$ docker-compose stop

# Docker Compose 삭제

$ docker-compose down