docker-compose

HelloPong·2025년 8월 8일

공부

목록 보기
20/39
post-thumbnail

🐳 Docker Compose 설정 정리

컨테이너 환경을 코드로 관리할 수 있는 docker-compose.yml은
개발 뿐만 아니라 운영 환경에서도 매우 강력한 도구입니다.

🔧 기본 구조

version: "3.8"

services:
  my-service:
    image: my-app:latest
    container_name: my-app-container

🧠 1. 메모리 & CPU 제한

    deploy:
      resources:
        limits:
          memory: 512m
          cpus: "1.0"
        reservations:
          memory: 256m
          cpus: "0.5"
  • limits: 최대로 허용할 리소스
  • reservations: 최소 보장 리소스
  • ⚠️ Swarm 모드에서만 적용됨. 일반 Compose에서는 무시될 수 있습니다.

💾 2. Swap 제한

Compose에서는 --memory-swap 옵션을 직접 지원하지 않아요.
💡 workaround: docker run 또는 Swarm mode를 이용해야 설정 가능

🔄 3. 컨테이너 재시작 정책

    restart: unless-stopped
정책설명
no자동 재시작 없음 (기본값)
always무조건 재시작 (직접 중단 제외)
on-failure비정상 종료 시에만 재시작
unless-stopped항상 재시작, 단 수동 중지는 예외

🌐 4. 포트 & 네트워크

    ports:
      - "8080:80"

    networks:
      - my-bridge
  • ports: host:container 포트 매핑
  • networks: 사용자 정의 네트워크로 컨테이너 연결 가능
networks:
  my-bridge:
    driver: bridge

📁 5. 볼륨 마운트

    volumes:
      - ./data:/app/data
  • 호스트와 컨테이너의 파일/디렉토리 연결
  • 데이터 영속화, 실시간 개발 등에 필수!

🕒 6. 시간대(Timezone) 설정

    environment:
      - TZ=Asia/Seoul
    volumes:
      - /etc/localtime:/etc/localtime:ro
  • TZ: 환경변수로 설정
  • localtime: 호스트 시간과 동기화 (읽기 전용 권장)

🧪 7. 헬스체크 (Healthcheck)

    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost/health"]
      interval: 30s
      timeout: 10s
      retries: 3
  • 컨테이너의 상태를 주기적으로 확인
  • 실패 시 재시작 정책과 연동 가능 (restart: on-failure 등)

🔐 8. 환경변수 & 시크릿 주입

    environment:
      - SPRING_PROFILES_ACTIVE=prod
      - DB_PASSWORD=${DB_PASSWORD}
  • .env 파일과 연동 가능
  • 민감 정보는 따로 관리하는 것이 보안에 유리

🔒 9. 루트 파일시스템 읽기 전용

    read_only: true
  • 컨테이너 내부 루트 디렉토리 수정 방지
  • 보안 강화, 실수 방지에 유용

🧷 10. depends_on – 컨테이너 의존성 설정

version: "3.8"

services:
  web:
    image: nginx
    depends_on:
      - app
      - db

  app:
    image: my-app
    depends_on:
      - db

  db:
    image: mysql

🚨 주의 – 건강상태는 고려하지 않음!

0개의 댓글