docker-compose 파일
파일 이름: docker-compose.yaml
작성 시 주의할 점
커맨드를 다르게 적으면 안 된다.
두 칸 공백을 주면 하위 요소로 들어가는 것이다.
들여쓰기를 이용해 각 명령의 수준(레벨)을 정한다.
compose 파일 예시
version: "3.8"
services:
mongodb:
image: 'mongo'
volumes:
- data:/data/db
environment:
MONGO_INITDB_ROOT_USERNAME: max
MONGO_INITDB_ROOT_PASSWORD: secret
backend:
build: ./backend
ports:
- '80:80'
volumes:
- logs:/app/logs
- ./backend:/app
- /app/node_modules
environment:
MONGODB_USERNAME: max
MONGODB_PASSWORD: secret
depends_on:
- mongodb
fronted:
build: ./frontend
ports:
- '3000:3000'
volumes:
- ./frontend/src:/app/src
stdin_open: true
tty: true
depends_on:
- backend
volumes:
data:
logs:
1. version
도커 컴포즈 버전 지정
이 버전은 컴포즈 파일의 버전이며 버전에 따라 사용 가능한 명령이 달라진다.
버전을 지정하지 않으면 '1.0'으로 작동한다.
여러 개의 Compose 파일을 사용하는 경우 각 파일의 버전이 같아야 한다.
2. services
컨테이너의 서비스
컨테이너의 이름을 정하는 레이블을 자유롭게 작성한다. e.g.backend, fronted, webserver..
1. 컨테이너에 필요한 image 지정
로컬에 생성되어있는 커스텀 이미지도 사용할 수 있다.
로컬에 이미지를 생성하여 사용하고 싶다면 build 명령을 사용하여 dockerfile의 위치를 알려준다.
2. networks
컨테이너의 네트워크
네트워크를 따로 작성하지 않아도 도커 컴포즈 파일이 실행되면 도커가 해당 컴포즈 파일에 작성된 모든 컨테이너를 같은 네트워크에 추가한다.
3. volumes
컨테이너의 볼륨
- 볼륨 이름:컨테이너 내부 위치(네임드 볼륨)
4. environment
컨테이너에 작업할 환경 변수
- env_file을 사용하여 환경 변수 파일을 따로 작성하여 import할 수 있다.
5. ports
'로컬 포트: 컨테이너 포트'
6. depends_on
의존성 표현
컨테이너의 실행 순서를 지정하기 위해 사용한다.
먼저 실행시켜야 할 서비스를 적는다.(먼저 실행시킬 서비스에 적는 것이 아니라 추후에 실행시킬 서비스의 명령으로 들어가야 한다.)
7. stdin_open: true
개방형 입력 연결이 필요할 경우 true 옵션을 주어 도커에게 알린다.
8. tty: true
컨테이너에 터미널 연결
3. volumes
네임드 볼륨을 사용하기 위해서는 도커에게 볼륨을 생성해야 한다는 것을 알려주기 위해 services와 같은 수준에 볼륨 이름을 지정해주어야 한다.(변수선언 같이)
익명 볼륨과 바인드 마운트는 한 번 더 작성하지 않아도 된다.
같은 볼륨 이름을 사용한다면 다른 컨테이너에서도 같은 볼륨을 사용할 수 있다.
docker-compose 실행과 중지
docker-compose up 실행 (-d 옵션으로 detach 모드로 실행 가능)
docker-compose down 중지 (-v 옵션으로 volume까지 한 번에 삭제 가능)