Docker compose가 무엇인지, 왜 사용하고 어떻게 사용하는지 알아보자.
Docker Compose는 여러 컨테이너 앱을 정의하고 공유하는데 도움을 주는 툴입니다.
Docker Compose를 사용하면 yaml파일로 여러 컨테이너 서비스를 정의하고 단일 명령으로 한 번에 시작하거나 종료할 수 있습니다.
Docker Compose의 장점은 애플리케이션 스택을 파일에 정의하여 프로젝트 저장소의 루트에 보관할 수 있는 점입니다.
이는, Github나 GitLab에 Compose 파일을 보관하고, 리포지토리를 클론하고 Compose를 사용하여 앱을 간단하게 시작하는 것이 가능하다는 것을 의미합니다.
프로젝트 루트에 compose.yaml 파일을 정의합니다.
version: '3.8'
services:
app:
image: node:18-alpine
command: sh -c "yarn install && yarn run dev"
ports:
- "127.0.0.1:3000:3000"
working_dir: /app
volumes:
- ./:/app
environment:
MYSQL_HOST: mysql
MYSQL_USER: root
MYSQL_PASSWORD: secret
MYSQL_DB: todos
docker 명령어로 컨테이너를 띄웠을 때의 옵션과 전부 동일합니다.
services:
app:
# 앱 서비스 정의
mysql:
image: mysql:8.0
volumes:
- todo-mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: todos
volumes:
todo-mysql-data:
🚨docker run
을 사용하여 컨테이너를 실행할 때 Docker가 자동으로 name volume을 생성해줬는데, compose를 사용하여 실행할 때는 상위 수준의 volumes
섹션에 볼륨을 정의한 다음 서비스 설정에서 마운트 포인트를 지정해야 합니다.
services:
app:
image: node:18-alpine
command: sh -c "yarn install && yarn run dev"
ports:
- 127.0.0.1:3000:3000
working_dir: /app
volumes:
- ./:/app
environment:
MYSQL_HOST: mysql
MYSQL_USER: root
MYSQL_PASSWORD: secret
MYSQL_DB: todos
mysql:
image: mysql:8.0
volumes:
- todo-mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: todos
volumes:
todo-mysql-data:
docker compose up -d
docker compose가 볼륨과 네트워크를 생성했습니다. 기본적으로 docker compose는 애플리케이션 스택을 위해 특별히 네트워크를 자동으로 생성합니다.
이전에 docker run
으로 여러 컨테이너를 실행할 때 한 네트워크에 묶기 위해 network를 생성했는데, compose는 자동으로 network를 생성해주기 때문에 compose 파일에서 network를 정의하지 않아도 됩니다.(원하는 이름의 네트워크를 compose 파일에 명시해도 됩니다.)
docker 대시보드를 확인하면 getting-started-app이라는 그룹을 볼 수 있습니다.
이는 Docker Compose의 프로젝트 이름으로 컨테이너를 함께 그룹화하는데 사용됩니다. 기본적으로 프로젝트 이름은, compose.yaml 파일이 위치한 디렉토리의 이름과 같습니다.
docker compose down
기본적으로 compose 파일에 지정된 볼륨은 docker compose down
을 실행할 때 제거되지 않습니다.
볼륨을 제거하려면 --volmes
플래그를 추가해야 합니다.
Docker Compose를 여러 컨테이너를 정의하고 한 번에 실행할 수 있도록 도와주는 도구입니다.
https://docs.docker.com/compose/
https://docs.docker.com/compose/compose-file/
https://docs.docker.com/compose/reference/