Docker

8. Docker-compose

프잘백 2022. 3. 18. 00:46
728x90

docker-compose

 

매번 docker run... 은 그만! 편하게 docker로 application을 띄우게 해주는 도구인 docker-compose를 살펴보자.

docker compose : 여러 컨테이너를 편리하게 실행하기 위해서 만들어둔 도구이다. YAML 파일을 통해 container를 실행하는데 필요한 옵션을 정의할 수 있다.(더 편리하게 실행하는 방법 관리, 버전 관리 등등)

 

  ※ YAML이란 YAML Ain't Markup Language 으로, 데이터를 저장하는 파일 포맷입니다. 비슷한 형식으로 XML과 JSON이 존재하지만, 사람이 읽기가 더 편하다는 장점이 있습니다.


docker-compose로 application 실행하기

먼저 프로젝트 폴더에 docker-compose.yaml 파일을 생성한다.

 

version: "3.9"

services:
#  여기 아래에는 container들을 어떻게 실행할 것인지 적는다. container들의 이름으로 만들어 주면 된다.
  flask:
    build:
      context: .
    ports:
      - 5000:5000

yaml 파일 안에 위와 같이 입력한 후

터미널에서 'docker-compose up' 을 입력하면 (물론 프로젝트 폴더로 이동 한 후 실행)

yaml에 입력한 대로 docker가 동작한다.

입력한 포트로 접속해서 테스트 성공여부를 확인 할 수 있다.

또한 docker compose는 기본적으로 

이와같이 네트워크를 만들어서 실행 되므로 network 를 생성하는 작업을 건너뛸 수 있다.

 


docker-compose로 DB가 있는 application 연결하기

현재상태로는 db가 연결되어있지 않기 때문에 기대하는 동작이 나오지 않을 수 있다. 

docker-compose.yaml에 db를 추가하자.

version: "3.9"

services:
  flask:
    build:
      context: .
    ports:
      - 5000:5000
  mongo:
    image: mongo
    ports:
      - 27017:27017

그 후 위와같이 docker-compose up -d 를 하면 flask와 mongo가 생성되는걸 볼 수 있다. (-d는 docker run과 마찬가지로 백그라운드에서 실행하는 옵션)

docker ps로 두개의 컨테이너가 실행 되는걸 확인했다.

 

그 후 로컬호스트에서 db가 필요한 작업을 수행하면 기대한 동작이 잘 실행된다.


docker-compose를 이용하여 volume으로 유지되는 appilcation 실행하기

docker-compose에서는 bind mount, named volume을 모두 지원한다.

 

docker-compose.yaml을 다음과 같이 수정하자.

version: "3.9"

services:
#  여기 아래에는 container들을 어떻게 실행할 것인지 적는다. container들의 이름으로 만들어 주면 된다.
  flask:
    build:
      context: .
    volumes:
      - ./templates:/templates
    ports:
      - 5000:5000
  mongo:
    image: mongo
    volumes:
      - mongo:/data/db

volumes:
  mongo:

이 후 docker-compose up -d 를 하면 볼륨이 유지되는 어플리케이션을 실행할 수 있다.