inblog logo
|
LifeLog, DevLog
    Docker

    docker-compose

    KYJTHEYJ's avatar
    KYJTHEYJ
    Feb 23, 2026
    docker-compose
    Contents
    docker-composedocker-compose.yml 키워드 정리

    docker-compose

    여러 컨테이너를 한번에 실행하기 위해 사용해야하는 오케스트레이션 툴

    docker-compose.yml 키워드 정리

    • services

      • 실행할 컨테이너들을 정의하는 블록

    services:
    	app: .. (로드되는 컨테이너 이름)
    	db: ..
    	redis: ..
    
    • volumes

      • 컨테이너가 지워져도 데이터 유지를 위해 사용

      • 데이터의 영속성 유지

    volumes:
      db-data:    # named volume 선언
      
    # 개발에선 보통 bind mount로 선언
    services:
      mysql:
        container_name: mysql-demo
        image: mysql:8.0
    		...
        volumes:
          - ./db-data:/var/lib/mysql # bind mount
    
    • networks

      • 컨테이너 간 통신

    networks:
      spring-demo-net:
      
      # 개발에선 보통 bind mount로 선언
    services:
      mysql:
        container_name: mysql-demo
        image: mysql:8.0
    		...
        volumes:
          - ./db-data:/var/lib/mysql # bind mount
        networks:
    	    spring-demo-net: # 따로 선언되는 컨테이너에 붙여줘서 묶음
    
    • image, build

      • 이미지를 가져오거나 직접 빌드 할 때 상황으로 둘 중 하나 사용

    • ports

      • 호스트 포트 : 컨테이너 포트

    • environment

      • 환경 변수를 설정

    • depends_on

      • 실행 순서를 제어

        • 추가로 condition 키워드로 조건 명시 가능

          • services_started → 도커에서 컨테이너가 시작만 되면 통과

          • services_healthy → 도커에서 컨테이너 상태가 healty 일 경우면 통과

          • service_completed_successfully → 컨테이너가 정상 종료되어야 통과

    • healthcheck

    services:
      app:
        image: nginx          # Docker Hub에서 이미지를 가져올 때
        build: .              # Dockerfile로 직접 빌드할 때 (둘 중 하나만 씀)
    
        ports:
          - "8080:8080"       # "호스트포트:컨테이너포트"
    
        environment:          # 환경변수 설정
          - DB_HOST=db
          - DB_PORT=3306
    
        depends_on:           # 실행 순서 제어
          db:
            condition: service_healthy
    
        healthcheck:          # 컨테이너 상태 체크
          test: ["CMD", "curl", "-f", "<http://localhost:8080>"]
          interval: 10s
          timeout: 5s
          retries: 3
    
        networks:             # 연결할 네트워크
          - my-network
    
        volumes:              # 마운트할 볼륨
          - ./logs:/app/logs
    
      db:
        image: mysql:8.4.8
        environment:
          - MYSQL_ROOT_PASSWORD=test1234tested
          - MYSQL_DATABASE=kyjtheyj_world_db
        healthcheck:
          test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
          interval: 10s
          timeout: 5s
          retries: 7
        volumes:
          - ./db-data:/var/lib/mysql
        networks:
          kyjtheyj_world_network:
    

    Share article
    Contents
    docker-composedocker-compose.yml 키워드 정리

    LifeLog, DevLog - https://github.com/KYJTHEYJ

    RSS·Powered by Inblog