`docker compose`를 사용할 때 알아두면 유용한 핵심 명령어와 문법, 그리고 주요 옵션

imtaejong·6일 전
0
post-thumbnail

아래는 docker compose를 사용할 때 알아두면 유용한 핵심 명령어와 문법, 그리고 주요 옵션들에 대한 자세한 설명이다.
마지막에 요약 정리 있음 🌸

Docker Compose 개요

Docker Compose는 다중 컨테이너 애플리케이션을 정의하고 실행하기 위한 도구다. docker-compose.yml 파일을 통해 서비스 정의, 네트워크, 볼륨, 환경 변수 등의 설정을 명시하고, 명령어 한
번으로 애플리케이션의 전체 스택을 구동, 중지, 확인할 수 있다. 기존에는 docker-compose CLI를 사용했으나, Docker CLI 통합 이후 docker compose 명령어로도 동일한 작업을
수행할 수 있다(버전에 따라 차이가 있으나, 최근 버전에서는 docker compose 사용이 권장된다).

기본 명령어

  1. docker compose up

    • 정의한 모든 서비스(컨테이너)를 생성 및 시작한다.
      • -d 또는 --detach: 백그라운드에서 실행.
      • --build: 컨테이너 시작 전 이미지를 재빌드.
      • --force-recreate: 이미 존재하는 컨테이너를 중지 후 재생성.
      • --no-deps: 해당 서비스 시작 시 종속된 다른 서비스는 시작하지 않음.
  2. docker compose down

    • 실행 중인 모든 서비스(컨테이너)를 중지하고 네트워크, 볼륨(옵션에 따라), 이미지(옵션에 따라) 등을 제거한다.
      • -v 또는 --volumes: 애플리케이션과 연결된 익명 볼륨도 삭제.
      • --remove-orphans: 정의되지 않은 컨테이너(오펀 컨테이너)도 제거.
      • --rmi all|local: 사용된 이미지도 제거(all: 모든 이미지, local: docker-compose.yml이 참조한 이미지).
  3. docker compose build

    • docker-compose.yml에 정의된 서비스들의 이미지 빌드 수행.
      • --no-cache: 이미지 빌드시 캐시를 사용하지 않음.
      • --pull: 항상 최신 이미지를 pull 후 빌드.
  4. docker compose run [service][command]

    • 지정한 서비스 컨테이너를 새로 하나 생성하여 명령어를 실행.
      • --rm: 명령 실행 후 컨테이너 제거.
      • -T: pseudo-TTY 할당을 비활성화.
      • -d: 백그라운드로 컨테이너 실행.

    (참고: up과 달리 run은 일회성 실행에 주로 사용)

  5. docker compose exec [service][command]

    • 이미 실행 중인 서비스 컨테이너 안에서 명령어 실행.
      • -it: 인터랙티브 모드 및 TTY 할당(기본적으로 -T가 없으면 TTY 할당됨).
  6. docker compose ps

    • 현재 실행 중인 서비스들의 상태를 표시.
      • --services: 서비스 이름만 표시.
      • --all: 중지된 컨테이너까지 모두 표시.
  7. docker compose logs

    • 서비스 컨테이너의 로그 출력.
      • -f 또는 --follow: 실시간 로그 추적.
      • --tail N: 마지막 N라인만 표시.
      • -t 또는 --timestamps: 타임스탬프 포함.
  8. docker compose stop

    • 실행 중인 모든(또는 지정한) 서비스 컨테이너 중지.
      • [SERVICE_NAME]: 특정 서비스만 중지 가능.
  9. docker compose start

    • 중지된 컨테이너를 재시작.
      • [SERVICE_NAME]: 특정 서비스만 시작 가능.
  10. docker compose restart

    • 실행 중인 컨테이너 재시작.
      • [SERVICE_NAME]: 특정 서비스만 재시작 가능.
  11. docker compose pull

    • 서비스에서 사용하는 이미지 pull.
      • --ignore-pull-failures: pull 실패한 경우에도 다른 이미지 pull 진행.
      • --parallel: 병렬로 이미지 pull.
  12. docker compose config

    • docker-compose.yml 파일의 구성 검증 및 병합 결과 출력.
      • --services: 서비스 이름만 출력.
      • --volumes: 볼륨만 출력.

docker-compose.yml 주요 문법 및 필드

  • version: Compose 파일의 버전을 지정(Compose V2에서는 생략 가능).
  • services: 컨테이너화된 서비스 정의하는 상위 키.
    • image: 사용할 이미지명.
    • build: Dockerfile 경로를 지정하거나 빌드 컨텍스트를 지정.
    • command: 컨테이너 시작 시 실행할 명령.
    • environment: 환경 변수 설정. (예: environment: [ "APP_ENV=production", "DB_HOST=db" ] 또는 map 형태)
    • ports: 호스트와 컨테이너 포트 매핑 (예: "8080:80").
    • volumes: 호스트 디렉토리 또는 이름된 볼륨을 컨테이너 경로와 매핑.
    • depends_on: 서비스 의존성 정의(예: 웹 서비스는 DB 서비스보다 뒤에 시작).
    • restart: 컨테이너 재시작 정책(예: always, on-failure, no).
    • networks: 서비스가 속할 네트워크 지정.
  • volumes: 이름 있는 볼륨 정의.
  • networks: 사용자 정의 네트워크 정의.
  • configs, secrets (Swarm/Compose v3 관련): 외부 설정값, 시크릿 자료를 컨테이너에 마운트.

자주 쓰는 옵션 및 키워드 정리

  • -d/--detach: 백그라운드 실행.
  • --build: 서비스 시작 전 빌드 수행.
  • --force-recreate: 기존 컨테이너 삭제 후 재생성.
  • -f/--file: docker-compose.yml 외 다른 compose 파일을 지정.

최종 요약 테이블

명령어/키설명주요 옵션/예시
docker compose up정의된 모든 서비스 시작-d 백그라운드 모드, --build 빌드 후 시작, --force-recreate 재생성
docker compose down모든 서비스 중지 & 관련 리소스 제거-v 볼륨 제거, --remove-orphans 정의되지 않은 컨테이너 제거, --rmi all 이미지 제거
docker compose build모든 서비스 이미지 빌드--no-cache 캐시 미사용, --pull 최신 이미지 pull
docker compose run [서비스][명령]일회용 컨테이너로 명령 실행--rm 실행 후 컨테이너 제거, -T TTY 비활성화
docker compose exec [서비스][명령]실행 중인 컨테이너에서 명령 실행-it 상호작용 모드
docker compose ps현재 서비스 상태 조회--services 서비스명만 표시, --all 중지된 컨테이너 포함
docker compose logs서비스 로그 조회-f 실시간 로그, --tail N 마지막 N라인, -t 타임스탬프
docker compose stop서비스 컨테이너 중지[SERVICE_NAME] 특정 서비스만 중지 가능
docker compose start중지된 서비스 재시작[SERVICE_NAME] 특정 서비스만 시작 가능
docker compose restart서비스 재시작[SERVICE_NAME] 특정 서비스만 재시작
docker compose pull서비스용 이미지 pull--parallel 병렬 pull, --ignore-pull-failures 실패 무시
docker compose configcompose 파일 검증/출력--services 서비스명만, --volumes 볼륨명만

docker-compose.yml 주요 키

설명예시
versionCompose 파일 버전version: "3.9" (V2에서 생략 가능)
services서비스 정의 상위 키services:
image서비스 사용할 이미지image: nginx:latest
buildDockerfile 빌드 지정build: ./app
command컨테이너 시작 명령command: ["npm", "start"]
environment환경 변수 지정environment: ["APP_ENV=prod"]
ports호스트:컨테이너 포트 매핑ports: ["8080:80"]
volumes호스트/볼륨 마운트volumes: ["mydata:/var/lib/data"]
depends_on의존 서비스 지정depends_on: ["db"]
restart재시작 정책restart: always
networks서비스 연결 네트워크networks: ["frontend"]
volumes(상위)글로벌 볼륨 정의volumes: { mydata: {} }
networks(상위)사용자 정의 네트워크networks: { frontend: {} }

치트시트 같은거니 참고..

0개의 댓글