Docker = 도시락 통
음식 (프로그램)을 도시락 통 (컨테이너)에 담으면, 어떤 컴퓨터에서도 똑같이 실행됩니다
내 컴퓨터에선 되는데 왜 안되지? 문제를 해결해줌
Docker Compose란 ?
Docker Compose = 도시락 세트
실세 서비스는 여러 프로그램이 함께 돌아감
예를 들어 쇼핑몰 하나를 만들면,
- 손님이 보는 화면 (프론트 엔트)
- 주문을 처리하는 서버 (백엔드)
- 상품 정보를 저장하는 데이터베이스
쇼핑몰 = 프론트엔드 + 백엔드 + DB + 캐시 + ...
이 세가지가 동시에, 함께 실행되야함
Docker Compose 는 이것들을 한 번에 켜고 끄게 해주는 도구
이 모든 걸 하나의 파일로 정의하고, 명령어 하나로 실행 하는게 compose
핵심 요약
여러 프로그램을 한 번에 실행하고 싶을 때, 설정 파일 하나에 다 적어두면,
명령어 하나로 전부 켜고 끌 수 있게 해주는 도구
docker compose up # 전부 켜기
docker compose down # 전부 끄기
docker-compose.yml 구조
services:
web: # 서비스 이름 (자유롭게 지정)
image: nginx # 사용할 이미지
ports:
- "80:80" # 호스트:컨테이너 포트 매핑
volumes:
- ./html:/usr/share/nginx/html # 파일 마운트
depends_on:
- app # app이 먼저 실행된 후 실행
app:
build: . # 현재 디렉토리 Dockerfile로 빌드
environment:
- DB_HOST=db # 환경변수 주입
- DB_PORT=5432
restart: always # 죽으면 자동 재시작
db:
image: postgres:15
volumes:
- db_data:/var/lib/postgresql/data # 데이터 영속성
volumes:
db_data: # 볼륨 선언
자주 쓰는 명령어
docker compose up # 실행 (포그라운드)
docker compose up -d # 실행 (백그라운드, 실무에서 주로 사용)
docker compose down # 종료 + 컨테이너 삭제
docker compose down -v # 종료 + 볼륨까지 삭제 (DB 초기화)
docker compose logs -f # 전체 로그 실시간 확인
docker compose logs app -f # 특정 서비스 로그만
docker compose ps # 실행 중인 서비스 상태 확인
docker compose exec app bash # 컨테이너 안으로 직접 접속
docker compose build # 이미지 다시 빌드
docker compose up --build # 빌드 후 바로 실행
한 문장 요약
: Docker Compose는 여러 서비스를 하나의 파일로 정의해서 명령어 하나로 전체 환경을 올리고 내리는 도구, 개발 환경 표준화와 온보딩 효율화에 바로 효과가 남