본문 바로가기
Docker

8. Docker-compose

by 프잘백 2022. 3. 18.
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 를 하면 볼륨이 유지되는 어플리케이션을 실행할 수 있다.

'Docker' 카테고리의 다른 글

9. Docker-compose에서 환경 변수 설정하기(.env파일) (node.js)  (0) 2022.03.22
7. Docker 리소스  (0) 2022.03.17
6. Docker network  (0) 2022.03.17
5. Docker container 데이터 유지  (0) 2022.03.17
4. docker 기초(3) 공유하기  (0) 2022.03.17

댓글