Docker Compose?

  • 다중 컨테이너 앱을 관리하기 좋은 툴
  • Dockerfile처럼 docker-compose.yaml 파일로 관리 가능함

docker-compose.yaml

  • 이 분이 너무 설명을 잘 해주심
  • 예시 파일을 위에서 언급한 분 파일로 설명 진행할 예정
version: "3.9"  # optional since v1.27.0
 
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - README.md:/docs/README.md
      - logvolume01:/var/log
    networks:
      - service-network
  redis:
    image: redis
    networks:
      - service-network
 
volumes:
  logvolume01: {}
networks:
  service-network: {}

version

  • compose 파일의 버전
  • 버전마다 문법이 조금 다를 수 있기 때문에 주의 필요

service

  • docker compose로 관리하고자 하는 서비스 (컨테이너) 명세

image

  • 사용할 이미지 파일

build

  • 이미지를 직접 빌드하기 위한 용도
  • 같은 디렉토리에 있는 Dockerfile을 참조하는게 기본
  • 필요하면 지정할 수 있음
  • image 옵션을 따로 주지 않으면 ${service}:latest 라는 이름이 기본적으로 붙음

port

  • 포트 매핑
  • ${호스트 포트}:{컨테이너 포트}

volume

  • 두 방법이 있음
  1. 호스트의 파일을 컨테이너 안에 마운트
  2. 도커 볼륨을 따로 만들어서 그걸 컨테이너 안에 마운트
version: "3.9"
services:
  web:
    # ...
    volumes:
      - README.md:/docs/README.md # 호스트의 README.md 파일을 컨테이너 내부 /docs/README.md에 마운트   
      - logvolume01:/var/log # 선언된 도커 볼륨 logvolume01을 컨테이너 내부 /var/log에 마운트
# ...
volumes:
  logvolume01: {} # 도커볼륨 logvolume01 선언

network

  • 서비스(컨테이너) 가 포함될 네트워크 정의
  • 서비스끼리 같은 네트워크에 들어가 있는게 아니면 기본적으로 통신이 안됨!