Docker compose - Overview and Feature
- 출처: https://docs.docker.com/compose/
- 출처: https://docs.docker.com/compose/features-uses/
Docker Compose overview
Learn how to use Docker Compose to define and run multi-container applications with this detailed introduction to the tool.
docs.docker.com
- Overview
Compose는 multi container Docker application을 저의하고 실행하기 위한 도구이다. YAML file을 이용하여 application service를 설정한다. 그리고 단일 명령어로 설정한 모든 service를 실행하고 생성할 수 있다.
Compose는 production, staging, development, CI workflows 와 같은 모든 환경에서 동작한다. 단순히 container를 수행하는것 외에도 application의 생명주기를 관리할 수 있는 command도 지원한다.
- Start, stop, service rebuild
- 실행중인 service 상태 확인
- 실행중인 service의 log 출력
- service에서 일회성 명령 실행
- Docker compose essential
Compose는 3단계의 과정을 거친다.
- Dockerfile 정의
- 격리된 환경에서 함께 동작할 수 있도록 compose.yaml 파일 내에 app을 구성하는 service 들을 정의
- "docker compose up" 을 실행하여 전체 app 실행
compose.yaml은 아래와 같은 형태를 갖는다.
services:
web:
build: .
ports:
- "8000:5000"
volumes:
- .:/code
- logvolume01:/var/log
depends_on:
- redis
redis:
image: redis
volumes:
logvolume01: {}
- Key features
- 단일 host에서 여러 개의 격리된 환경 제공
Compose는 서로 환경을 격리하기 위해 project 명을 사용한다. 이 project 명은 context에 따라 다르게 사용될 수 있다.
- dev host: 단일 환경에서 여러 개의 복사본 생성 (ex - project의 각 feature branch에 대한 안정적으로 복사본을 실행하고 싶을 때)
- CI server: 서로 build시 간섭 없는 환경을 위해 project 명을 build number로 활용
- shared host 또는 dev host: 다른 project에서 같은 service 명을 사용할 수 있으므로 이를 방지하기 위해
기본적으로 project 명은 project 폴더 이름을 기본값으로 갖는다. 물론 -p 나 COMPOSE_PROJECT_NAME 환경 변수로 커스터마이징 가능하다. 여기서 "project 폴더"란 기본적으로 compose file이 위치한 폴더를 말한다. 이 역시 --project-directory 명령 옵션을 통해 커스터마이징 가능하다.
- container 생성시 volume 데이터 보존
Compose는 service에 사용된 모든 volume을 보존한다. docker compose up을 실행할 때 만약 이전에 실행한 container가 있다면 기존 container로 부터 신규 container로 volume을 복사한다.
- 필요시에만 container 재생성(cache)
Copose는 container 생서이 필요한 환경을 caching한다. 변경사항이 없는 service를 재시작하면 Compose는 기존 container를 재활용한다.
- 변수 지원과 환경간의 composition 이동 지원
Compose는 Compose file 내에서 변수를 지원한다. 이런 변수는 다른 환경이나 다른 user 에서 composition을 커스텀화하기 위해 사용된다.