들어가며
실제 서비스를 만들다 보면 하나의 컨테이너만 사용하는 경우는 드뭅니다.
예를 들어 웹 애플리케이션을 만든다면?
- Web 서버 (Spring Boot) -JAVA
- Database (MySQL)
- Redis (캐시)
- Nginx (Reverse Proxy)
이런 식으로 서로 다른 역할의 컨테이너들을 동시에 실행하고 관리해야 하죠.
이걸 일일이 docker run으로 띄운다면… 너무 복잡하고 번거롭습니다.
그래서 등장한 게 바로 Docker Compose입니다!
Docker Compose란?
Docker Compose는
여러 개의 컨테이너를 정의하고, 한번에 실행할 수 있도록 도와주는 도구입니다.
YAML 파일로 컨테이너 설정을 정의하고
docker-compose up 한 줄로 모든 컨테이너를 실행합니다.
기본 구조
Docker Compose는 docker-compose.yml이라는 파일을 사용합니다.
.yml 파일은 루트 디렉토리에 작성하시면 됩니다.
예시 구조
my-project/
├── docker-compose.yml
├── app/
│ └── Dockerfile
└── db/
docker-compose.yml 예제
version: '3.8' # Compose 파일의 버전
services:
app:
build: ./app
ports:
- "8080:8080"
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: testdb
ports:
- "3306:3306"
각 설정 설명
설정 | 설명 |
services | 실행할 컨테이너들을 정의하는 블록 |
app / db | 각각의 컨테이너 이름 (서비스명) |
build | Dockerfile이 위치한 경로 |
image | 사용할 이미지 (Docker Hub에서 가져옴) |
ports | 외부:내부 포트 매핑 |
environment | 컨테이너 환경 변수 설정 |
depends_on | 의존하는 서비스 지정 (앱이 DB보다 나중에 시작됨) |
사용 방법
# 1. 실행
docker-compose up
# 2. 백그라운드 실행
docker-compose up -d
# 3. 종료
docker-compose down
Compose의 장점
✅ 여러 컨테이너를 한 번에 실행/종료
✅ 환경 설정을 버전으로 관리 (YAML)
✅ 서비스 간 연결이 쉬움 (같은 네트워크에서 자동으로 통신)
✅ 테스트/배포 환경 구성에 유리
💡 Tip: .env 파일과 함께 쓰기
MYSQL_ROOT_PASSWORD=root
MYSQL_DATABASE=testdb
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
환경 변수를 외부로 분리하여 보안성과 재사용성을 높일 수 있다.
.env 파일은 compose.yml 이랑 같은 디렉토리에 두면 됩니다.
다음 글 추천
'Docker' 카테고리의 다른 글
[Docker] Docker Network - 컨테이너 간 통신 제어 (0) | 2025.04.17 |
---|---|
[Docker] docker-compose.override.yml 개념 및 사용법 (0) | 2025.04.17 |
[Docker] Dockerfile 작성법 및 이미지 만들기 (0) | 2025.04.17 |
[Docker] 도커 설치부터 실행하여 기본 사용법을 알아보자 (0) | 2025.04.17 |
[Docker] 도커란? 도커의 핵심개념 파헤치기 (0) | 2025.04.17 |