
여러 컨테이너를 묶어서 관리하기 위한 툴이다.
프론트엔드 서버, 데이터베이스 서버, 벡엔드 서버 각각을 도커 컨테이너로 작성하고, 연결하여 동작을 하기 때문에, 이들을 묶어 관리할 수 있는 Docker Compose 같은 컨테이너 관리 툴이 필요하다.
서비스 규모가 더 커질 시, 쿠버네티스(Kubernetes) 같은 컨테이너 관리 툴이 사용되기도 한다.
Docker Compose는 docker-compose.yml 파일을 작성하여 실행한다.
Docker compose 명령은 기본적으로 Dokcerfile의 명령을 기반으로 하고 있다.
docker-compose.yml 예시
version: "3"
services:
db:
image: mysql:5.7
restart: always
volumes:
- ./mysqldata:/bar/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=1234
- MYSQL_DATABASE=db
port:
- "3306:3306"
version
Docker Compose 파일 포맷 버전을 명시한다.
docker 버전에 따라 지원하는 DockerCopmose 버전이 존재하며, 기본적으로 버전 3으로 사용하는 것이 일반적이다. 최신 버전의 특수 문법들 까지는 잘 사용을 하지 않기 때문이다.
버전별 호환성 확인 사이트 : https://docs.docker.com/compose/compose-file/compose-versioning/
services
여러개 또는 하나의 컨테이너를 정의하고, 설정하는 옵션이다.
services:
db:
~ 설정 ~
image
해당 컨테이너의 베이스 이미지를 설정하는 옵션이다.
image: mysql:5.7
restart
컨테이너가 다운되었을 때, 항상 재시작하라는 설정의 옵션이다. 해당 옵션 사용시 일반적인 경우에는 해당 컨테이너가 지속적으로 실행이 된다.
volumes
호스트의 특정 디렉토리나 파일을 컨테이너 내의 경로에 마운트하거나, 볼륨 컨테이너를 생성하여 데이터를 공유할 수 있도록 하는 옵션이다. docker run 옵션 중, -v 옵션과 동일한다.
여러 볼륨을 지정할 수 있기 때문에 리스트로 작성한다.
volumes:
- ./mysqldata:/bar/lib/mysql
environment
컨테이너의 환경 변수를 설정하는 데 사용되는 옵션이다. 이 옵션을 사용하여 컨테이너가 실행될 때 환경 변수를 지정할 수 있다. Dockerfile의 ENV 옵션과 동일하다.
environment:
- MYSQL_ROOT_PASSWORD=1234
- MYSQL_DATABASE=db
env_file
패스워드 등의 보안상으 이유로 Docker Compose에 직접 작성을 하지 않고, 환경 변수 설정들을 파일을 통해 작성하여 env_file 옵션으로 읽어들이는 방식으로도 사용되는 경우도 많다.
services:
db:
image: mysql:5.7
restart: always
volumes:
- ./mysqldata:/bar/lib/mysql
env_file:
- ./mysql.env
- cf. mysql.env의 내용 ( $ cat mysql.env )
MYSQL_ROOT_PASSWORD=1234
MYSQL_DATABASE=db
cf. mysql_env.txt 형식으로도 사용해도 별 문제는 없지만, 공식적인 파일 형식은 .env 이다.
ports
호스트의 포트와 컨테이너 내의 포트를 연결하여 외부에서 컨테이너에 접근할 수 있도록 하는 옵션이다. docker run의 -p 옵션과 동일한 역할을 한다.
port:
- "3306:3306"
YAML 문법에서 xx:YY와 같이 작성시, 시간으로 해석되기 때문에 쌍따옴표("")를 붙여주어야 한다.