데이터베이스, 백엔드, 프론트엔드 이 세 서버의 통신을 위해 같은 네트워크에 올리고, 데이터 저장을 위해 볼륨을 지정하는 등의 방식은 개발자가 많은 커맨드를 작성해야하는 점이 불편하다.
Docker Compose를 사용하면 이러한 불편함을 해소할 수 있다.
Docker Compose는 기본적으로 다음의 3스텝의 프로세스를 사용한다.
- 각각의 컨테이너의 Dockerfile 작성
- docker-compose.yml 파일을 작성하고, 각각 독립된 컨테이너의 실행 정의를 실시
$] docker-compose up
실행하여 docker-compose.yml 파일로 정의한 컨테이너 개시
강의에서 사용된 docker-compose.yml 샘플은 다음와 같다.
version: "3.8"
services:
mongodb:
image: 'mongo'
volumes:
- data:/data/db
env_file:
- ./env/mongo.env
backend:
build: ./backend
ports:
- '80:80'
volumes:
- logs:/app/logs
- ./backend:/app
- /app/node_modules
env_file:
- ./env/backend.env
depends_on:
- mongodb
frontend:
build: ./frontend
ports:
- '3000:3000'
volumes:
- ./frontend/src:/app/src
stdin_open: true
tty: true
depends_on:
- backend
volumes:
data:
logs:
$] docker-compose up
: docker-compose 실행$] docker-compose stop
: docker-compose 중지$] docker-compose down
: docker-compose 삭제$] docker-compose logs
: docker container 의 모든 로그 확인$] docker-compose config
: 실행중인 docker compose의 .yml 파일 설정 확인$] docker-compose exec
컨테이너명 명령 : 실행중인 docker container에 명령어를 실행