📌 도커 컴포즈에 대해 다룹니다.
여러 개의 컨테이너가 하나의 애플리케이션으로 동작할 때 매번 run 명령어를 실행하는 것은 불편하다.
👉 도커 컴포즈(Docker Compose)는 여러 개의 컨테이너를 하나의 프로젝트로서 다룰 수 있는 작업 환경을 제공한다.
도커 컴포즈는 컨테이너의 설정이 정의된 YAML 파일을 읽어 도커 엔진을 통해 도커 컨테이너를 생성한다.
기본적으로 어떠한 설정도 하지 않으면 도커 컴포즈는 현재 디렉터리의 docker-compose.yml 파일을 읽어 로컬의 도커 엔진에게 컨테이너 생성을 요청한다.
docker-compose.yml 파일을 생성한 후 docker-compose up -d
명령어로 컨테이너를 생성한다.
docker-compose.yml 예시
version: '3.0'
services:
web:
image: alicek106/composetest:web
ports:
- "80:80"
links:
- mysql:db
command: apachectl -DFOREGROUND
mysql:
image: alicek106/composetest:mysql
command: mysqld
도커 컴포즈는 컨테이너를 프로젝트 및 서비스 단위로 구분하므로 컨테이너의 이름은 일반적으로 다음과 같은 형식으로 정해진다.
[프로젝트 이름]_[서비스 이름]_[서비스 내에서 컨테이너의 번호]
하나의 프로젝트는 여러 개의 서비스로 구성되고, 각 서비스는 여러 개의 컨테이너로 구성된다.
docker-compose scale
명령어로 컨테이너를 추가적으로 생성할 수 있다.
생성된 프로젝트는 docker-compose down
명령어로 삭제할 수 있다. 프로젝트를 삭제하면 서비스의 컨테이너 또한 전부 정지된 뒤 삭제된다.
도커 컴포즈는 기본적으로 현재 디렉터리의 이름으로 된 프로젝트를 제어한다. 예를 들어 /home/ubuntu 디렉터리에 docker-compose.yml 파일이 있고, docker-compose down
명령어를 사용하면 ubuntu라는 이름을 가진 프로젝트를 삭제한다. 그러나 -p
옵션을 사용하게 되면 제어할 프로젝트의 이름을 명시할 수 있다.
YAML 파일은 크게 버전 정의, 서비스 정의, 볼륨 정의, 네트워크 정의의 4가지 항목으로 구성된다. 이 중 많이 사용하는 것은 서비스 정의이며, 볼륨 정의와 네트워크 정의는 서비스로 생성된 컨테이너에 선택적으로 사용된다.
version: '3.0'
services:
my_container_1:
image: ...
my_container_2:
image: ...