Docker Compose란
인터넷에서 다양한 설명이 있지만 좀 쉽게 한 문장으로 설명하면
여러 도커 컨테이너를 하나로 통합해서 관리할 수 있게 도와주는 도구이다.
특히 Compose라는 영어 단어가 '구성하다'라는 뜻을 가지는것을 생각하면 이해가 더 쉽다.
Docker Compose를 사용하는 이유
그래서 이제 왜 Docker Compose를 사용하면 좋은가는 Web 서비스의 3-Tier를 통해 설명할 수 있다.
3Tier 아키텍쳐는 보통 Presentation(Client 측 혹은 프론트엔드) Logic Tier(백엔드)와 Data Tier(DB)로 이루어져 있다.
여기서 각 계층을 하나의 독립된 docker container로 뛰울 수도 있지만, docker-compose로 구성하면 단일 네트워크에서 쉽게 관리할 수 있다.
예시
예를들어 docker를 통해 하나의 EC2 서버에 Spring 백엔드 서버와 MySQL 서버를 뛰운다고 가정해보자.
docker 실행
docker run -d --name mysql-container \
-e MYSQL_ROOT_PASSWORD=rootpassword \
-e MYSQL_DATABASE=mydb \
-e MYSQL_USER=myuser \
-e MYSQL_PASSWORD=mypassword \
-p 3306:3306 \
--restart unless-stopped \
mysql:8
Spring Boot 실행
docker run -d --name spring-container \
-e SPRING_DATASOURCE_URL=jdbc:mysql://mysql-container:3306/mydb \
-e SPRING_DATASOURCE_USERNAME=myuser \
-e SPRING_DATASOURCE_PASSWORD=mypassword \
-p 8080:8080 \
--restart unless-stopped \
--network bridge \
my-spring-app
이런식으로 총 두번에 걸쳐서 각각 실행을 해야하는 번거로움이 있다.
하지만, docker compose를 사용하면 어떻게 되는지 보자.
docker-compose.yaml
version: '3.8'
services:
mysql:
image: mysql:8
container_name: mysql-container
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: mydb
MYSQL_USER: myuser
MYSQL_PASSWORD: mypassword
ports:
- "3306:3306"
spring-app:
build: .
container_name: spring-container
restart: unless-stopped
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/mydb
SPRING_DATASOURCE_USERNAME: myuser
SPRING_DATASOURCE_PASSWORD: mypassword
ports:
- "8080:8080"
depends_on:
- mysql
image/container: 빌드할 이미지의 이름 지정
build: 빌드할 위치(. 일경우 현재 디렉토리)
port: 호스트의 포트:컨테이너 포트(8080에서 8080으로 포트 연결)
depends_on: 특정 서비스가 실행되기 전 실행되어야하는 서비스
environment: 환경 변수
이후 실행은 아래 up 명령어를 통해 한번에 서비스를 돌릴 수 있다.
docker-compose up -d
훨씬 간편한것을 확인할 수 있다.
물론 굳이 compose 없이 해줄 수도 있지만, 훨씬 편하기에 프로젝트 개발할때 유용하게 사용하고 있다.
끝!
'DevOps&Cloud' 카테고리의 다른 글
Reverse Proxy, LoadBalancer의 차이 알아보기 (0) | 2025.04.14 |
---|---|
Kubernetes의 Ingress Controller와 LoadBalancer 역할 이해하기 (0) | 2025.04.10 |
Serverless 아키텍쳐를 쓰면 좋은 이유(feat: Baas, Fass) (0) | 2025.03.13 |
MSA: Micro Service Architecture 적용기(2) (1) | 2025.01.10 |
CORS: 원리와 파훼법 (0) | 2025.01.05 |