일반적으로 하나의 애플리케이션은 여러개의 서비스로 구성되어 있습니다. 이를 도커로 관리하기 위해서 서비스마다 run 명령어를 사용할수도 있지만 docker-comose.yaml 파일을 사용한다면 여러 컨테이너를 하나의 파일에서 쉽게 관리할 수 있습니다
예시 및 간단한 설명
version: '3' # 버전에 따라 지원하는 도커 엔진 버전이 달라지는데 일반적으로 3을 사용한다
services: # 실행할 컨테이너들 정의
nginx: # 컨테이너(서비스) 이름
image: nginx:latest # 이미지 정보 [저장소이름]/[이미지이름]:[태그]
ports: # host-container 간 포트를 연결 [host포트]:[container포트]
- "60080:80"
volumes: # .는 현재 디렉토리를 의미하며 현재 디렉토리와 컨테이너의 디렉토리를 연결해 데이터를 host쪽에 저장
- .:/usr/share/nginx/html/
restart: always # 컨테이너가 예기치 않게 종료 되었을 때 어떻게 할 지 결정 (no(default)/always/on-failure)
environment: # 컨테이너에서 사용할 환경변수들
- KEY = VALUE
django:
build: # 별도의 Dokerfile에서 이미지 빌드 후 사용
context: . # docker build 명령을 실행할 디렉터리 경로
dockerfile: ./compose/django/Dockerfile-dev # 이미지를 빌드할 dockerfile 지정
volumes:
- db_data:/app
links: # 다른 컨테이너와 연결하기 위한 설정 [연결할 컨테이너 이름]:[해당 컨테이너에서 참조할 이름]
- mysql:db # version 3부터 links를 사용하지 않더라도 한 네트워크 안에 있는 서비스끼리 서로 통신 가능
depends_on: # 컨테이너의 의존 관계를 명시
- mysql # mysql 컨테이너 실행 후 django 컨테이너 실행
network_mode: host # bridge:해당 네트워크 안에서만 통신
# host:호스트와 똑같은 네트워크 환경
# none: 네트워크 사용 x
# 도커가 관리하는 볼륨 생성, 컨테이너에서 해당 볼륨에 데이터 저장 가능
volumes:
db_data: {}