개요
그간 업무하면서 컨테이너를 사용할 때 도커를 활용하기보다는 쿠버네티스 환경을 많이 활용해 와서, 도커를 잘 사용하는 방법에 대해서는 잘 알지 못했다. 그중 하나인 Docker Compose는 처음 도커를 배울 때 함께 배웠었지만, 다 잊은 지 오래이므로…… 다시 접한 김에 정리한다.
Docker Compose
Docker Compose는 다중 컨테이너 애플리케이션을 정의하고 실행하는 도구로, 효율적이고 간소화된 개발과 배포 환경을 구축하는데 도움을 준다. 애플리케이션 스택 제어를 간소화하여 단일 YAML 파일로 서비스, 네트워크, 볼륨을 쉽게 관리할 수 있게 한다. 그리고 단일 명령으로 YAML 파일에 정의된 모든 서비스를 생성하고 시작할 수 있다.
Docker Compose는 서비스 시작, 중지, 실행 상태 확인, 로그 출력, 일회성 명령 실행 등 애플리케이션 수명 주기를 관리하는 명령을 제공한다.
한마디로 정리하면 Docker Compose 역시 쿠버네티스와 동일한 컨테이너 오케스트레이션 도구에 해당한다.
필요성
단일 컨테이너로 서비스가 동작하는 애플리케이션도 많지만, 그렇지 않은 애플리케이션도 굉장히 많다. 특히 여러 애플리케이션이 함께 동작해야 하는 서비스를 컨테이너 환경에서 동작시켜야 한다면, 서비스를 재시작이 필요할 때마다 컨테이너를 하나씩 내리고 올려야 할 것이다. 하지만 Docker Compose는 다중 컨테이너를 하나의 파일로 정의하고 관리할 수 있기 때문에 훨씬 서비스 환경을 관리하기 용이하다.
예로 들어 Docker로 워드프레스와 MySQL를 실행해야 한다면 사용자는 아래와 같이 두 번의 docker run 명령을 실행해야 한다.
docker run --name wordpress_db \
-p 3306:3306 \
--restart unless-stopped \
-d mysql:8.0
docker run --name wordpress \
-p 8080:80 \
--link wordpress_db:mysql \
-d wordpress:latest
하지만 Docker Compose를 사용하면 아래와 같은 단일 파일로 관리할 수 있게 된다.
version: '3'
services:
wordpress:
build: .
image: "wordpress:latest"
ports:
- "8080:8080"
depends_on:
- wordpress_db
wordpress_db:
image: "mysql:8.0"
ports:
- "3306:3306"
restart: unless-stopped
각 항목이 무엇을 나타내는지는 추후에…… 정리해보겠다.
참고 문서
https://docs.docker.com/compose/
https://byungwoo.oopy.io/2758a690-6ec7-42d0-ae41-5ebc75f4e57a
https://docs.docker.com/compose/intro/features-uses/
https://docs.docker.com/compose/intro/compose-application-model/