지금까지는 1개의 컨테이너 앱을 구동시켰지만, 만약 DB, 캐싱, 메세지 큐 등 다른 서비스들을 많이 사용하게 된다면 싱글 컨테이너 안에서 실행할까요? 여러 컨테이너들을 동시에 실행시킬까요? 어떻게 컨테이너들끼리 연결시킬까요?

물론 docker run 명령어를 여러 컨테이너에서 실행시킬 수도 있지만, 네트워크들을 관리하고 여러 flag를 연결하는 등의 작업을 수행하려면, 여러 컨테이너들을 다시 다 종료시키는 과정도 불편하고 힘듦

Docker Compose를 통해, 하나의 YAML 파일에서 여러 컨테이너들을 정의할 수 있음. 하나의 명령어만으로 다수의 컨테이너들을 한 번에 실행시키고 종료시킬 수 있음

Compose가 선언적 도구임을 인지하는 것은 중요 : 정의하고, 실행하면 됨 내용을 바꾸고 그저 docker compose up 명령어를 실행시키면, compose가 변화들을 파일 내에서 재조정하고 적용시킴.

<aside> 💡

Dockerfile vs Compose file

Dockerfile은 컨테이너 이미지를 빌드하기 위한 지침을 제공 Compose file은 실행 컨테이너들을 정의

대부분, Compose file이 특정 서비스를 위한 이미지를 빌드하기 위해 Dockerfile을 참조

</aside>

Try it out

  1. Docker Desktop 실행

  2. 프로젝트로 이동

  3. 앱 실행 : docker compose up

    1. compose.yaml 파일
    2. 앱을 구성하는 모든 서비스들을 구성에 맞춰 정의
    3. 각 서비스는 이미지,포트,볼륨,네트워크, 다른 세팅들을 구체적으로 명시
    docker compose up -d --build
    
  4. 앱 종료 : docker compose down

    docker compose down
    
    # 볼륨까지 삭제하는 명령
    docker compose down --volumes
    
    1. Docker Desktop GUI를 이용해 컨테이너를 제거할 수도 있음