D: Docker Compose는 여러 개의 Docker 컨테이너를 하나의 애플리케이션으로 정의하고 관리할 수 있는 강력한 도구입니다. 복잡한 멀티 컨테이너 애플리케이션을 쉽게 구성하고 실행할 수 있도록 도와주죠! 이 글에서는 Docker Compose의 기본 개념부터 핵심 기능까지 상세하게 알아보겠습니다. 🚀
1. Docker Compose란?
Docker Compose는 YAML 파일을 사용해 여러 컨테이너를 한 번에 정의하고 실행하는 도구입니다. 예를 들어, 웹 서버, 데이터베이스, 캐시 서버 등이 함께 동작해야 하는 애플리케이션을 단일 명령어(docker-compose up
)로 실행할 수 있습니다.
✅ 왜 필요할까요?
- 로컬 개발 환경을 쉽게 구성할 수 있습니다.
- 테스트 및 배포 시 일관된 환경을 보장합니다.
- 복잡한 인프라 설정을 코드로 관리할 수 있습니다. (Infrastructure as Code)
2. Docker Compose의 핵심 기능
(1) YAML 파일로 서비스 정의하기
docker-compose.yml
파일에서 서비스(컨테이너), 네트워크, 볼륨을 정의합니다.
예시:
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "80:80"
db:
image: postgres:13
environment:
POSTGRES_PASSWORD: mysecretpassword
📌 web
과 db
서비스가 정의되었고, ports
와 environment
로 설정이 가능합니다.
(2) 서비스 간 의존성 관리
depends_on
을 사용해 특정 서비스가 먼저 실행되도록 할 수 있습니다.
예시:
services:
web:
depends_on:
- db
📌 web
서비스는 db
가 실행된 후에 시작됩니다.
(3) 볼륨(Volume)을 이용한 데이터 관리
로컬 디렉토리와 컨테이너 내부 디렉토리를 연결해 데이터를 유지할 수 있습니다.
예시:
services:
db:
volumes:
- ./data:/var/lib/postgresql/data
📌 호스트의 ./data
디렉토리가 컨테이너의 PostgreSQL 데이터 디렉토리와 연결됩니다.
(4) 환경 변수(.env) 사용
.env
파일에서 환경 변수를 관리할 수 있습니다.
예시 (.env
):
DB_PASSWORD=mysecretpassword
docker-compose.yml
에서 사용:
db:
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
3. 실전 예제: 웹 애플리케이션 + DB 구성하기
Node.js 웹 서버와 PostgreSQL DB를 Docker Compose로 실행해봅시다!
Step 1: docker-compose.yml
작성
version: "3.8"
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_PASSWORD: mypassword
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
Step 2: Dockerfile
(웹 서버용)
FROM node:14
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
Step 3: 실행하기
docker-compose up -d # 백그라운드 실행
docker-compose logs # 로그 확인
🎉 이제 http://localhost:3000
에서 웹 서버에 접근할 수 있습니다!
4. 자주 사용하는 Docker Compose 명령어
명령어 | 설명 |
---|---|
docker-compose up |
서비스 시작 |
docker-compose down |
서비스 중지 및 삭제 |
docker-compose ps |
실행 중인 컨테이너 확인 |
docker-compose logs |
로그 출력 |
docker-compose build |
이미지 재빌드 |
5. 마무리
Docker Compose를 사용하면 복잡한 멀티 컨테이너 애플리케이션도 쉽게 관리할 수 있습니다. � 개발, 테스트, 배포 환경을 일관되게 유지할 수 있어 DevOps 워크플로우에 큰 도움이 됩니다.
이제 여러분도 docker-compose.yml
파일을 작성해 보세요! 🚀