Server/Container 기술

docker-compose란?

건담아빠 2024. 12. 9. 17:08

오랜만에 docker-compose로 환경을 구성하면서 정리해 두려고 한다.
 

주요기능

1. 멀티 컨테이너 애플리케이션 관리

  • 여러 개의 Docker 컨테이너를 하나의 구성 파일로 정의하고 실행 가능하다.
  • 웹 애플리케이션, 데이터베이스, 캐시서버 등 단일 명령으로 실행 가능하다.

2. 의존성 관리

  • 컨테이너 간의 의존성을 정의하고 자동으로 순서를 조정할 수 있다.
  • 예: 데이터베이스 컨테이너가 준비될 때까지 웹 컨테이너 대기한다.

3. 간편한 실행

  • 단일 명령으로 모든 컨테이너를 시작, 중지, 재시작 가능하다.

4. 환경 파일 지원

  • .env 파일을 사용하여 환경 변수를 정의하고 재사용이 가능하다.

5. 네트워크와 볼륨 관리

  • 네트워크 : 컨테이너 간 통신을 위한 네트워크를 자동 생성 및 관리 할 수 있다.
  • 볼륨 : 컨테이너의 데이터를 호스트에 영구적으로 저장이 가능하다.

 

docker-compose.yml 파일 예제

version: '3.9'
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./nginx:/usr/share/nginx/html
    networks:
      - app-network

  app:
    build:
      context: ./app
    ports:
      - "3000:3000"
    networks:
      - app-network
    depends_on:
      - db

  db:
    image: postgres:13
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - app-network

volumes:
  db-data:

networks:
  app-network:

 

주요 요소 설명

1. services

  • 실행할 컨테이너를 정의할 수 있다.

2. networks

  • 컨테이너 간 통신을 위한 네트워크를 정의할 수 있다.

3. volumes

  • 데이터 영속성을 위해 호스트와 컨테이너 간의 디렉토리를 공유 할 수 있다.

4. depends_on

  • 컨테이너의 실행 순서를 정의할 수 있다.
  • 예: app는 db가 실행된 후 실행되어야 한다.

 

docker-compose 주요 명령어

1. 컨테이너 시작

$ docker-compose up

2. 컨테이너 백그라운드 실행

$ docker-compose up -d

3. 컨테이너 중지

$ docker-compose down

4. 로그 확인

$ docker-compose logs

5. 컨테이너 재시작

$ docker-compose restart

6. 기타

$ docker-compose up --build
$ docker-compose -f docker-compose.local.yml up -d --build

 

Docker Compose의 장점

  • 간결한 관리 : YAML 파일로 복잡한 설정을 간단히 정리 가능하다.
  • 이식성 : 다른 개바자와 환경을 쉽게 공유 가능하다.
  • 의존성 해결 : 서비스 간의 의존성을 자동으로 처리 가능하다.
  • 유지보수 용이 : 설정 변경과 업데이트가 쉽고 명확하다.

 
GTP등 여러 리서치 결과물들을 가지고 다시한번 머릿속에 정리하는 시간을 가져 보았다.