[Docker] docker-compose - Section 6

liljoon·2023년 12월 22일
0

이 글은 Udemy의 "【한글자막】 Docker & Kubernetes : 실전 가이드" 강의의 학습 노트입니다.
https://www.udemy.com/course/docker-kubernetes-2022/

직전 섹션에서 했던 다중 컨테이너를 더욱 편리하게 관리하기 위해 docker-compose를 이용해서 다시 작성해본다.


Docker compose 란?

하나의 호스트에서 사용하기 좋은 컨테이너 오케스트레이션 툴이다.
즉, 다중 컨테이너 설정을 더 쉽게 관리하고 동작시켜준다.
Dockerfile을 대체하는 개념이 아닌, 같이 사용하는 개념이다.

mac, window에서는 docker 설치 시 같이 설치되지만, linux의 경우에는 따로 직접 설치해줘야 한다.


docker-compose.yaml

기본적으로 yaml 파일 형식으로 탭을 통해 구분한다.

version: "3.8"
services:
  mongodb:
    image: "mongo"
    volumes:
      - data:/data/db
    env_file:
      - ./env/mongo.env
  backend:
    build: ./backend
    ports:
      - 80:80
    volumes:
      - ./backend/logs:/app/logs
    env_file:
      - ./env/backend.env
    depends_on:
      - mongodb
  frontend:
    build: ./frontend
    ports:
      - 3000:3000
    stdin_open: true
    tty: true
    depends_on:
      - backend

volumes:
  data:
  • version 을 통해 docker-compose 버전을 지정한다. 현재 최신버전인 3.8로 했다.
  • services를 통해 각 컨테이너에 대해 설정한다. service 이름 하위에 image를 통해 기존 이미지를 가져오거나, build를 통해 Dockerfile을 빌드한다.
  • port, volume, env_file 등을 편리하게 설정한다.
  • depends_on을 통해 각 서비스 간의 의존성을 나타낸다.
  • stdin_open, tty를 통해 리액트 개발서버에서 필요한 인터렉티브 모드를 실행시킨다.
  • 최상위에 volumes에서 named volume에 대해 설정한다.(익명 볼륨, 바인드 마운트는 필요없음)

추가 내용

  • 기본적으로 --rm -d 옵션은 들어가있다고 생각하면 된다.
  • network 설정은 따로 하지 않아도 도커가 자동으로 해당 컴포즈 내의 서비스들을 기본 네트워크에 생성하여 포함시킨다. 자체적으로 만드는 것도 가능하다.

실행법

docker-compose up 을 통해 여러 개의 컨테이너를 전부 시작한다. -d 옵션을 붙이면 docker-compose 자체를 detached mode로 한다.

docker-compose down을 통해 모든 컨테이너를 종료하고 네트워크도 지운다. 하지만 볼륨, 이미지는 남아있다. -v 옵션을 넣으면 볼륨도 지운다.


추가 내용

  • docker compose를 통해 실행하면 실제 컨테이너 이름은 service 이름과 다르다. 하지만 소스코드 내부에서 service 이름으로 지정하면 자동으로 연결된다.
  • 기본적으로 이미지를 리빌드하지 않는다. dockerfile에 변화가 생기면 리빌드한다. 소스코드X

추가 옵션

docker-compose up --build : 이미지 리빌드 강제
docker-compose build : 실행은 안하고 빌드만.
catainer_name:<name> : 컨테이너 이름을 수동으로 지정가능

0개의 댓글