1. Docker Compose란?
- 다중 컨테이너 애플리케이션을 실행 시 각각의 컨테이너들을 개별적으로 실행하는 것이 아닌 한번에 실행할 수 있도록 설정하는 것
2. Docker Compose 파일 구성
docker-compose.yaml
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:
- version: docker compose version
- services: 애플리케이션 내에서 실행될 컨테이너들과 각 컨테이너들의 설정들
- image: 컨테이너에 쓰이는 base image
- volumes: 생성할 볼륨들 나열(anonymous, named, bind mount)
- env_file: 환경변수들을 적은 파일
- ports: 루컬머신에 노출시킬 포트번호
- build: Dockerfile 경로를 주어 커스텀 이미지를 생성하도록 설정
- context: Dockerfile이 있는 경로이자 이미지가 참조할 모든 파일들이 있어야 하는 경로. 만약 Dockerfile이 다른 폴더의 내용을 참조해야 한다면 참조해야할 다른 폴더가 있는 최상위 폴더경로를 지정해야 한다.
- dockerfile: Dockerfile 이름
- args: 이미지 빌드 시 사용되는
ARG
태그 갯수 지정
- depends_on: 의존할 컨테이너
- network는 docker-compose 내에서 default 네트워크를 자체적으로 생성하여 따로 설정할 필요 없다.
- container_name: 컨테이너 이름
- stdin_open: 개방형 터미널을 여는지 여부를 결정
- tty: 개방형 터미널에 접근할지 여부를 결정
- stdin + tty ->
-it
옵션
- 컴포즈를 종료하면 생성했던 컨테이너들은 자동으로 삭제된다.(
--rm
옵션이 자동으로 붙음)
- 컴포즈 실행 시 자동으로 detach mode로 실행된다 (
-d
옵션이 자동으로 붙음)
3. Docker Compose Up/Down
- docker-compose.yaml파일이 있는 경로로 이동
docker-compose up -d
명령어를 통해 detach mode로 실행
docker-compose build
: 이미지 리빌딩이 필요할때 리빌딩만 하는 명령어
docker-compose down -v
를 통해 컴포즈 종료(뒤에 -v
를 붙이면 생성했던 볼륨까지 삭제된다.)