docker compose syntax

  • 다수의 도커 컨테이너를 일괄적으로 정의하고 제어하는 도구이다.

  • 확장자는 .yml 또는 .yaml 을 사용한다.

  • ex) docker-compose.yml

⚡️ docker commpose file syntax 구성

  • version: 도커 컴포즈 버전 명시

  • services: 실행하려는 컨테이너들을 정의하는 역할

    • image: 이미지명 지정

    • environment: 환경 변수 설정

    • build: 빌드할 이미지에 대한 설정

      • context: 도커 컨텍스트 경로 지정

      • dockerfile: 도커 파일 경로 지정

    • command: 컨테이너가 실행될 때 수행할 명령어

    • ports: 개방할 포트 지정, docker run 명령어의 -p와 동일

    • depends_on: 컨테이너 간 의존성 주입. 명시된 컨테이너가 먼저 생성되고 실행

    • expose: 링크로 연계된 컨테이너에게만 공개할 포트 설정

    • volumes: 컨테이너에 볼룸을 마운트

    • restart: 컨테이너가 종료될 때 재시작 정책

      • no: 재시작하지 않음

      • always: 외부에 의해 종료되었을 때 항상 재시작

      • on-failure: 오류가 있을 시 재시작

  • network

  • volume

  • config

  • secret

docker-compose up [options] [SERVICE...]

컴포즈 파일을 기반으로 컨테이너를 빌드하고 실행한다.

  • -f, --file: 파일 경로 지정

    • docker compose -f /path/to/docker-compose.yml up

  • -d, --detach: 컨테이너를 백그라운드에서 실행

  • --build: 항상 컨테이너를 빌드. 이미지가 없을 경우에도 빌드

  • --no-build: 이미지를 빌드하지 않고 기존에 있는 이미지를 사용

  • --force-recreate: 변경된 설정을 무시하고 컨테이너를 재생성

  • --abort-on-container-exit: 한 컨테이너가 종료되면 모든 컨테이너를 중지

docker-compose down [options] [SERVICE...]

컨테이너들을 중지하고 연결된 네트워크, 볼륨등을 제거하는데 사용된다.

  • -v, --volumes: 컨테이너에 연결된 볼륨도 함께 삭제

  • --remove-orphans: 파일에서 정의되지 않은 서비스의 컨테이너를 함께 제거

  • --timeout TIMEOUT: 컨테이너를 중지할 때 대기하는 시간을 지정

docker-compose start, restart, stop

컴포즈 파일에 정의된 서비스를 시작/재시작/정지

📚 down, stop 차이점

  • down 은 컨테이너를 정지 + 컨테이와 관련된 모든 리소스 제거

  • stop 은 컨테이너 정지

docker-compose run

  • 새로운 컨테이너를 생성하고 명령 실행

  • 특정 서비스를 실행하는 것이 목적

  • 컴포즈 파일에 정의된 서비스 중 하나만 실행하며, 즉석에서 컨테이너를 시작

📚 up 과의 차이점

  • up 은 컴포즈 파일에 정의된 모든 서비스를 시작하며, 컨테이너를 빌드하고 시작한다.

  • 서비스 간의 의존성을 고려하여 모든 서비스를 함께 시작한다.

docker-compose logs

  • docker-compose logs [options] [service...]

    • -f, --follow: 실시간으로 로그를 출력합니다.

    • --tail="all": 최신 로그 몇 줄을 출력합니다. 숫자를 지정하여 출력할 줄 수를 조절할 수 있습니다.

    • --timestamps: 로그에 타임스탬프를 추가하여 출력합니다.

    • --no-color: 로그에 색상을 사용하지 않습니다.

    • --service-logs: 서비스 이름을 로그에 표시합니다.

    • --no-prefix: 로그에 서비스 이름을 표시하지 않습니다.

ETC

  • docker-compose pause, unpause

  • docker-compose ps

  • docker-compose images

  • docker-compose config

  • docker-compose version

  • docker-compose help

실습

❓Q1

docker-compose의 service 외부와 내부에서 정의하는 volume 의 차이

서비스 내에서 정의하는 volume

  • 해당 서비스에만 적용

  • 서비스의 컨테이너는 해당 볼륨을 사용하여 데이터를 공유하거나 저장

  • 서비스가 실행되는 동안에만 유효하며, 서비스가 중지되면 삭제될 수 있음

서비스 밖에서 정의하는 volume

  • 모든 서비스에서 공유/재사용 할 수 있음

  • 여러 서비스에서 동일한 데이터를 공유하거나 유지하기 위해 사요됨

  • 컨테이너가 종료되어도 유지되며, 다른 서비스에서도 사용할 수 있음

Last updated