Docker Compose란?

yjbenkang·2024년 11월 19일
  • 다수의 Container로 소프트웨어가 구성되는 경우 사용할 수 있는 툴 + 환경설정 파일

    • docker-compose.yml로 설정 (yaml도 가능, 다른이름일 경우 -f로 해서 설정 가능)
    • 여기서 다양한 테스트등도 수행가능
    • 다양한 버전을 만드는 것도 일반적 (dev, test, prod 등등)
  • 개별 Container를 따로 관리하는 것보다 훨씬 더 생산성이 높음

  • 환경설정 파일의 이름은 docker-compose.yml이나 docker.compose.yaml

  • 하지만 그만큼 배워야할 것도 많고 복잡해짐

  • 사용법 자체는 간단: 소프트웨어를 구성하는 모든 컨테이너에게 적용됨

docker-compose build
docker-compose up #yaml파일을 가져다가 애플리케이션 구성하는 모든 이미지들을 빌드하고 (dockerhub에서 가져오거나) 컨테이너 생성하고 실행하는 과정을 적용하는 명령어
docker-compose pull
docker-compose ps
docker-compose down #컨테이너 중지, 삭제. 이미지들은 로컬에 남음
docker-compose start
docker-compose stop
docker-compose rm

위 명령어 모두 도커 컨테이너들에게 동시에 적용됨.

  • Docker Desktop의 일부로 설치가 됨
  • Docker Engine을 실행하고 먼저 터미널에서 버전 확인
    • docker compose --version (혹은 docker-compose --version)
  • Docker Compose v.1.27+부터 v2와 v3가 합쳐짐

docker-compose.yml 작성

  • services: 다음으로 프로그램을 구성하는 서비스들을 지정
    • 각 서비스는 별개의 Docker Image 지정과 Docker Container 실행으로 구성됨
    • 즉 각 서비스는 자신의 Dockerfile을 갖고 있어야함 아니면 docker hub등에서 이미지를 다운로드
    • 서비스별로 포트번호, 환경변수, 디스크 볼륨등을 지정해야함
    • 서비스 이름은 아무 이름이나 가능
  • volumes: 앞서 사용된 docker volume들을 지정
  • networks: 앞서 사용된 network들을 지정

docker-compose vs docker compose

  • v1: docker-compose
  • v2: docker compose
  • Docker 1.27부터 docker에 명령으로 compose가 추가됨
    • docker-compose 보다는 "docker compose"를 쓰는 것이 더 좋음
    • 별도로 docker-compose를 설치할 필요가 없음. 하지만 아직까지 대부분의 문서가 docker-compose 중심으로 만들어져 있음.
    • 하지만 2024년 10월 기준으로는 새 버전의 Docker에서는 docker-compose가 사라짐

docker-compopse.yaml or docker-compose.yml

  • docker compose 명령의 위 둘중의 하나를 찾음
    • 만일 둘다 존재한다면 에러 발생함
  • 만일 다른 이름의 파일을 사용하고 싶다면 -f 옵션 사용( ex) prod, dev, test)
    • docker compose -f docker-compose.mac.yml up

docker-compose로 이미지 생성과 관리

  • docker compose build

    • build키로 지정된 것들 대상
  • docker compose pull

    • docker hub에서 이미지들을 읽어오려고 함
  • docker images

    • 각 개별 이미지 앞에 폴더 이름을 prefix로 붙임 (docker hub에서 읽어온 것 제외)
  • docker compose images

    • docker compose로 실행된 컨테이너 대상으로 그 컨테이너가 어떤 이미지로 만들어졌는지 보여줌
  • docker-compose push

    • docker hub로 이미지들을 푸시하려고 함

docker-compose로 소프트웨어 시작과 중단

  • docker compose up # build => create => start
    • docker compose create
    • docker compose start
  • docker compose down # 한번에 shutdown stop => remove
    • docker compose stop
    • docker compose rm
  • docker compose ls # docker compose를 그룹별로 보여줌
  • docker compose ps # docker compose로 실행된 컨테이너 개별적으로 보여줌

docker compose 네트워킹

  • docker끼리 네트워크 연결이 필요한 경우
    • services에 준 이름으로 호스트 이름이 생성됨
    • 내부에 DNS 서버가 하나 생성되어 이름을 내부 IP로 변환해줌
  • 별도로 네트워크를 구성하고 싶다면
    • networks에 네트워크를 나열하고 네트워크를 적절하게 서비스에 지정해줘야함
  • docker network ls
profile
keep growing

0개의 댓글