아래는 docker compose
를 사용할 때 알아두면 유용한 핵심 명령어와 문법, 그리고 주요 옵션들에 대한 자세한 설명이다.
마지막에 요약 정리 있음 🌸
Docker Compose는 다중 컨테이너 애플리케이션을 정의하고 실행하기 위한 도구다. docker-compose.yml
파일을 통해 서비스 정의, 네트워크, 볼륨, 환경 변수 등의 설정을 명시하고, 명령어 한
번으로 애플리케이션의 전체 스택을 구동, 중지, 확인할 수 있다. 기존에는 docker-compose
CLI를 사용했으나, Docker CLI 통합 이후 docker compose
명령어로도 동일한 작업을
수행할 수 있다(버전에 따라 차이가 있으나, 최근 버전에서는 docker compose
사용이 권장된다).
docker compose up
-d
또는 --detach
: 백그라운드에서 실행.--build
: 컨테이너 시작 전 이미지를 재빌드.--force-recreate
: 이미 존재하는 컨테이너를 중지 후 재생성.--no-deps
: 해당 서비스 시작 시 종속된 다른 서비스는 시작하지 않음.docker compose down
-v
또는 --volumes
: 애플리케이션과 연결된 익명 볼륨도 삭제.--remove-orphans
: 정의되지 않은 컨테이너(오펀 컨테이너)도 제거.--rmi all|local
: 사용된 이미지도 제거(all: 모든 이미지, local: docker-compose.yml이 참조한 이미지).docker compose build
docker-compose.yml
에 정의된 서비스들의 이미지 빌드 수행.--no-cache
: 이미지 빌드시 캐시를 사용하지 않음.--pull
: 항상 최신 이미지를 pull 후 빌드.docker compose run [service][command]
--rm
: 명령 실행 후 컨테이너 제거.-T
: pseudo-TTY 할당을 비활성화.-d
: 백그라운드로 컨테이너 실행.(참고: up
과 달리 run
은 일회성 실행에 주로 사용)
docker compose exec [service][command]
-it
: 인터랙티브 모드 및 TTY 할당(기본적으로 -T가 없으면 TTY 할당됨).docker compose ps
--services
: 서비스 이름만 표시.--all
: 중지된 컨테이너까지 모두 표시.docker compose logs
-f
또는 --follow
: 실시간 로그 추적.--tail N
: 마지막 N라인만 표시.-t
또는 --timestamps
: 타임스탬프 포함.docker compose stop
[SERVICE_NAME]
: 특정 서비스만 중지 가능.docker compose start
[SERVICE_NAME]
: 특정 서비스만 시작 가능.docker compose restart
[SERVICE_NAME]
: 특정 서비스만 재시작 가능.docker compose pull
--ignore-pull-failures
: pull 실패한 경우에도 다른 이미지 pull 진행.--parallel
: 병렬로 이미지 pull.docker compose config
docker-compose.yml
파일의 구성 검증 및 병합 결과 출력.--services
: 서비스 이름만 출력.--volumes
: 볼륨만 출력.environment: [ "APP_ENV=production", "DB_HOST=db" ]
또는 map 형태)"8080:80"
).always
, on-failure
, no
).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 config | compose 파일 검증/출력 | --services 서비스명만, --volumes 볼륨명만 |
docker-compose.yml 주요 키
키 | 설명 | 예시 |
---|---|---|
version | Compose 파일 버전 | version: "3.9" (V2에서 생략 가능) |
services | 서비스 정의 상위 키 | services: |
image | 서비스 사용할 이미지 | image: nginx:latest |
build | Dockerfile 빌드 지정 | 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: {} } |
치트시트 같은거니 참고..