Docker Compose

전종원·2022년 11월 22일
0

1. Docker Compose란?

  • 다중 컨테이너 애플리케이션을 실행 시 각각의 컨테이너들을 개별적으로 실행하는 것이 아닌 한번에 실행할 수 있도록 설정하는 것

2. Docker Compose 파일 구성

docker-compose.yaml

version: "3.8"
services:
  mongodb:
    image: 'mongo'
    volumes: 
      - data:/data/db
    # environment: 
    #   MONGO_INITDB_ROOT_USERNAME: max
    #   MONGO_INITDB_ROOT_PASSWORD: secret
      # - MONGO_INITDB_ROOT_USERNAME=max
    env_file: 
      - ./env/mongo.env
  backend:
    build: ./backend
    # build:
    #   context: ./backend
    #   dockerfile: Dockerfile
    #   args:
    #     some-arg: 1
    ports:
      - '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
    tty: true
    depends_on: 
      - backend

volumes: 
  data:
  logs:
  • version: docker compose version
  • services: 애플리케이션 내에서 실행될 컨테이너들과 각 컨테이너들의 설정들
    • image: 컨테이너에 쓰이는 base image
    • volumes: 생성할 볼륨들 나열(anonymous, named, bind mount)
    • env_file: 환경변수들을 적은 파일
    • ports: 루컬머신에 노출시킬 포트번호
  • build: Dockerfile 경로를 주어 커스텀 이미지를 생성하도록 설정
    • context: Dockerfile이 있는 경로이자 이미지가 참조할 모든 파일들이 있어야 하는 경로. 만약 Dockerfile이 다른 폴더의 내용을 참조해야 한다면 참조해야할 다른 폴더가 있는 최상위 폴더경로를 지정해야 한다.
    • dockerfile: Dockerfile 이름
    • args: 이미지 빌드 시 사용되는 ARG 태그 갯수 지정
  • depends_on: 의존할 컨테이너
  • network는 docker-compose 내에서 default 네트워크를 자체적으로 생성하여 따로 설정할 필요 없다.
  • container_name: 컨테이너 이름
  • stdin_open: 개방형 터미널을 여는지 여부를 결정
  • tty: 개방형 터미널에 접근할지 여부를 결정
  • stdin + tty -> -it 옵션
  • 컴포즈를 종료하면 생성했던 컨테이너들은 자동으로 삭제된다.(--rm옵션이 자동으로 붙음)
  • 컴포즈 실행 시 자동으로 detach mode로 실행된다 (-d 옵션이 자동으로 붙음)

3. Docker Compose Up/Down

  • docker-compose.yaml파일이 있는 경로로 이동
  • docker-compose up -d 명령어를 통해 detach mode로 실행
    • docker-compose build: 이미지 리빌딩이 필요할때 리빌딩만 하는 명령어
  • docker-compose down -v 를 통해 컴포즈 종료(뒤에 -v를 붙이면 생성했던 볼륨까지 삭제된다.)

0개의 댓글