-
다수의 Container로 소프트웨어가 구성되는 경우 사용할 수 있는 툴 + 환경설정 파일
- docker-compose.yml로 설정 (yaml도 가능, 다른이름일 경우 -f로 해서 설정 가능)
- 여기서 다양한 테스트등도 수행가능
- 다양한 버전을 만드는 것도 일반적 (dev, test, prod 등등)
-
개별 Container를 따로 관리하는 것보다 훨씬 더 생산성이 높음
-
환경설정 파일의 이름은 docker-compose.yml이나 docker.compose.yaml
-
하지만 그만큼 배워야할 것도 많고 복잡해짐
-
사용법 자체는 간단: 소프트웨어를 구성하는 모든 컨테이너에게 적용됨
docker-compose build
docker-compose up
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
-
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