Docker

Docker - Compose

최 수빈 2025. 2. 19. 02:57

 

Docker Compose

 

여러 개의 컨테이너를 하나의 구성 파일(docker-compose.yml)로 관리

docker-compose up 한 번으로 여러 컨테이너 실행 가능

 

 

  • Django + PostgreSQL 같이 여러 개의 컨테이너를 운영할 때 사용
  • docker-compose.yml 파일을 활용, 컨테이너 설정을 자동화

 

.dockerignore

 

불필요한 파일이 이미지에 포함되는 것을 방지(예: node_modules, .git)

Dockerfile과 동일한 디렉토리에 위치

__pycache__/
*.pyc
node_modules/
.env

 

 

예제: Django + PostgreSQL 컨테이너 설정

 

Docker Compose 설정 파일 (docker-compose.yml)

version: '3.8'

services:
  web:
    build:
      context: .
    ports:
      - "8000:8000"
    volumes:
      - /Users/choisubin/back_to_the_zero:/back_to_the_zero
    environment:
      - DJANGO_SETTINGS_MODULE=back_to_the_zero.settings
      - DATABASE_URL=postgres://postgres:password@db:5432/postgres
    depends_on:
      - db

  db:
    image: postgres:13
    volumes:
      - db_data:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
      POSTGRES_DB: postgres

volumes:
  db_data:
  • web: Django 애플리케이션 서비스
  • db: PostgreSQL 데이터베이스 서비스
  • depends_on: db가 먼저 실행된 후 web 실행

 

 

Docker Compose 실행

 

컨테이너 실행

docker-compose up -d

 -d 옵션을 추가하면 백그라운드 실행

 

컨테이너 중지

docker-compose down

 

실행 중인 컨테이너 확인

docker-compose ps

 

docker-compose up docker-compose.yml에 정의된 모든 컨테이너 실행
docker-compose down 모든 컨테이너 중지 및 네트워크 삭제
docker-compose ps 실행 중인 서비스 확인
docker-compose logs 서비스명 특정 서비스 로그 확인
docker-compose exec 서비스명 bash 서비스 내부 접속

 

 

*Volume (데이터 저장)

컨테이너는 기본적으로 휘발성(삭제되면 데이터도 사라짐)

Volume을 사용하면 데이터를 영구적으로 저장가능

volumes:
  db_data:

 

호스트 경로와 컨테이너 내부 경로 매핑

volumes:
  - ./myapp:/myapp
volumes:
  - ./로컬경로:/컨테이너내부경로

호스트의 myapp 폴더와 컨테이너의 /myapp 폴더를 동기화

 

 

DB 컨테이너 활용

 

DB 이미지는 공식적으로 제공되므로 별도의 빌드 없이 바로 사용 가능

  db:
    image: postgres:13
    volumes:
      - db_data:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
      POSTGRES_DB: postgres

첫 push한 dockerfile