1. 정의
여러 개의 컨테이너 집합으로 이루어진 애플리케이션을 통합적으로 Docker 이미지로 만들어 관리할 수 있다. 각각의 컨테이너를 시작 및 중지하는 등의 작업을 더 쉽게 수행할 수 있도록 도와주는 도구이다.
2. 특징
2.1 복수의 컨테이너를 관리할 수 있다.
복수의 컨테이너(서비스)를 시작하고 중지할 수 있고, 다시 빌드할 수 있다. docker compose를 사용하지 않으면 단일 컨테이너마다 커맨드를 실행시키거나, Dockerfile을 실행시켜야 하지만 docker-compose를 통해 쉽게 실행시킬 수 있다. 또한 상태나 로그 등을 확인할 수 있다.
2.2 docker 컨테이너끼리의 연결을 편하게 한다.
여러 개의 컨테이너들은 단일 network로 세팅된다. 이는 DB와 Web 앱 간의 통신을 보다 쉽도록 해준다.
2.3 하나의 서비스에 일회성 작업을 수행할 수 있다.
특정 컨테이너에서 작업을 수행할 수 있다.
3. 주요 명령어
해당 내용은 이 블로그 내용을 참조했다.
3.1 up
docker-compose.yml 파일의 내용에 따라 이미지를 빌드하고 서비스를 실행한다.
3.1.1 단계별 진행사항
up 명령어로 compose를 실행 시의 단계별 진행사항은 다음과 같다.
- 필요한 볼륨 생성(혹은 이미 존재하는 볼륨과 연결)
- 필요한 이미지 풀(pull)
- 필요한 이미지 빌드(build)
- 서비스 의존성에 따라 서비스 실행
3.1.2 options
- -d: 서비스 백그라운드로 실행. (docker run에서의 -d와 같음)
- --force-recreate: 컨테이너를 지우고 새로 생성.
- --build: 서비스 시작 전 이미지를 새로 생성
- -f: 기본으로 제공하는 docker-compose.yml이 아닌 별도의 파일명을 실행할 때 사용
- docker-compose -f docker-compose.yml -f docker-compose-test.yml up 형태로 두 개의 파일 실행도 가능
- YAML을 두 개 이상 설정할 경우 앞에 있는 설정보다 뒤에 있는 파일이 우선
3.2 down
실행 중인 서비스를 삭제한다. 컨테이너와 네트워크를 삭제하며, 옵션에 따라 볼륨도 같이 삭제할 수 있다.
3.2.1 options
- -v, --volume: 볼륨까지 같이 삭제
- DB 데이터 초기화하는데 용이함
- 모든 설정을 초기화하고 새로 시작하는 데 사용
3.3 stop, start
서비스를 멈추거나, 멈춰 있는 서비스를 시작한다.
3.4 ps
현재 환경에서 실행 중인 각 서비스의 상태를 표시한다.
3.5 exec
실행 중인 컨테이너에서 명령어를 실행한다.
명령어는 다음과 같은 패턴으로 실행한다.
docker-compose exec {정의한 service name} {실행될 명령어}
3.6 run
docker run과 마찬 가지로 특정 명령어를 일회성으로 실행한다.
run은 exec와 비슷한 역할을 실행하지만 다른 점은 컨테이너 재실행의 여부이다.
run은 실행 시에 새로운 컨테이너를 띄우는 반면 exec는 실행되어있는 컨테이너에 접속한다.
exec는 프로세서를 실행시켜 놓을 때 사용되고 run은 batch성 작업에 특화 돼있다.
3.6.1 options
- --rm : 해당 명령어가 종료된 뒤 컨테이너도 종료
3.7 logs
output으로 나온 log들을 확인할 때 사용한다.
docker의 logs와 마찬가지로 --follow(혹은 -f)를 하여 실시간으로 나오는 로그 확인이 가능하다.
3.7.1 options
- -f, --follow: 실시간 로그 출력
3.8 config
docker-compose에 최종적으로 적용된 설정을 보여준다.
docker-compose -f docker-compose.yml -f docker-compose-test.yml up 형태처럼 여러 개의 YAML파일을 실행시켰을 경우 최종적으로 적용된 설정을 확인하기 좋은 옵션이다.
다음 포스팅은 docker network에 대한 내용을 정리해야겠다.
참고
https://fronquarry.tistory.com/40?category=1053272
https://great-developer.tistory.com/289