도커 컴포즈는 다중 컨테이너 설정을 쉽게 관리할 수 있습니다.
모든 서비스와 모든 컨테이너를 즉시 시작하고 필요하다면 필요한 이미지를 빌드하는 것을 하나의 명령어를 사용하여 모든 것을 시작하거나 중단할 수 있습니다.(오케스트레이션)
docker build
와 docker run
명령을 대체할 수 있는 도구입니다.docker build
& docker run
명령을 하나의 구성 파일로 가집니다.프로젝트 루트 경로에서 docker-compose.yaml
파일을 만듭니다.
docker-compose.yaml
파일은 들여 쓰기를 사용하여 구성 옵션 간의 종속성을 표현합니다.version: "3.8" // 항상 도커 컴포즈 사양 버전을 정의하는 것으로 시작(컴포즈 파일에서 사용할 수 있는 기능에 영향을 미침)
services: // 다음 줄은 들여쓰기를 사용하여 종속성 표현 (children(컨테이너))
mongodb: // 예로 사용할 컨테이너가 3개 라면 services 아래에 3개의 하위 요소로 컨테이너에 레이블을 지정하기 위해 컨테이너 이름을 지정
image: 'mongo' // 이미지 명시
volumes: // (다중 볼륨이 있다면 목록으로 작성)
- data:/data/db (<볼륨 이름>:<매핑할 컨테이너 내부 경로>)
# containter_name: mongoeb (컨테이너 이름을 지정할 수 있음)
environment:
MONGO_INITDB_ROOT_USERNAME: max (# 을 추가하여 주석처리 할 수 있습니다.)
MONGO_INITDB_ROOT_PASSWORD: secret
or
env_file:
- <해당 env파일 상대 경로>
networks: // 자체 네트워크 관리 (디폴트 네트워크를 많이 사용)
- <네트워크>
backend:
build: <Dockrfile을 보유하는 폴더 상대 경로>
# context: <Dockrfile을 보유하는 폴더 상대 경로>
# dockerfile: Dockerfile
# args:
# some-arg: 1
port:
- '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 // 인터렉티브 모드 (-it)
tty: true (-it)
depends_on:
- backend
volumes: // 명명된 볼륨 지정(익명 볼륨 및 바인드 마운트는 지정할 필요 없음)
data:
logs:
docker-compose up
docker-compose up --build (--build옵션으로 강제 이미지 빌드)
docker-compose down
docker-compose down -v (-v 옵션으로 데이터 볼륨 제거)