Docker Compose란?
📌 Docker Compose는 여러 개의 Docker 컨테이너를 정의하고 관리하기 위한 도구입니다. 각 컨테이너를 하나의 설정 파일(docker-compose.yaml)에 정의하여, 개발, 테스트, 배포 환경에서 쉽게 관리할 수 있습니다.
Docker Compose를 사용하는 이유
- 편리한 설정 관리:
- 여러 컨테이너를 한 파일에 정의해 관리. 각 컨테이너의 이미지, 포트, 환경 변수 등을 설정.
- 자동화된 배포:
- 설정 파일 기반으로 docker compose up 명령만으로 여러 컨테이너를 자동으로 생성 및 실행.
- 의존성 관리:
- 컨테이너 간의 의존성을 정의하고, 필요한 순서에 따라 실행.
- 유지보수 간편화:
- 설정 파일 하나로 컨테이너를 관리, 수정 시 파일만 업데이트하면 반영.
- 일관성 있는 환경 제공:
- 개발, 테스트, 운영 환경에서 동일한 설정 파일을 사용하여 환경 차이 제거.
- 보안 강화:
- 네트워크를 격리하여 컨테이너 간 통신을 외부로부터 차단 가능.
Docker Compose 사용 환경
- 개발 환경:
- 애플리케이션과 의존 서비스(DB, Redis 등)를 쉽게 설정하고 실행.
- 팀원이 동일한 환경에서 작업 가능.
- 테스트 환경:
- 자동화된 테스트 환경을 빠르게 생성 및 제거.
- 예제:
docker compose up -d ./run_tests docker compose down
- 단일 호스트 배포:
- 단일 서버에서 여러 컨테이너를 관리하고 실행.
- 운영 환경에서도 간단한 애플리케이션 배포 가능.
Docker Compose의 특장점
특장점 | 설명 |
한 번에 여러 컨테이너 관리 | 여러 컨테이너를 한 파일에 정의해 간단히 관리 가능. |
빠른 실행 | 설정 파일에서 변경된 부분만 재실행하여 속도 개선. |
같은 네트워크에서 쉽게 연결 | 컨테이너들이 자동으로 동일 네트워크에 연결되어 통신 설정 간편. |
일관성 있는 환경 제공 | 개발, 테스트, 배포 환경에서 동일한 설정 파일을 사용해 환경 차이 제거. |
의존성 처리 | 컨테이너 간 의존성을 명시하고, 의존 컨테이너를 우선 실행. |
Docker Compose 실행 방법
- 각 애플리케이션의 Dockerfile 작성:
- 애플리케이션 실행에 필요한 Dockerfile 작성.
- 예: 웹 서버용 Dockerfile, 데이터베이스 컨테이너는 기본 이미지를 사용.
- docker-compose.yaml 파일 작성:
- 여러 컨테이너와 네트워크, 볼륨, 환경 변수를 정의.
- 예:
version: "3.8" services: web: build: . ports: - "5000:5000" volumes: - .:/code db: image: postgres environment: POSTGRES_USER: user POSTGRES_PASSWORD: password
- Compose 명령 실행:
- docker compose up: 컨테이너 실행.
- docker compose down: 실행 중인 컨테이너 종료 및 네트워크 제거.
Docker Compose 명령어 요약
명령어 | 설명 |
docker compose up | docker-compose.yaml에 정의된 컨테이너를 생성하고 실행. |
docker compose down | 컨테이너 종료 및 네트워크 제거. |
docker compose ps | 현재 실행 중인 컨테이너 목록 표시. |
docker compose logs | 컨테이너의 로그 출력. |
docker compose build | Dockerfile을 기반으로 이미지를 빌드. |
docker compose stop | 실행 중인 컨테이너 정지. |
docker compose restart | 컨테이너를 재시작. |
Docker Compose의 장단점
장점 | 단점 |
복잡한 애플리케이션 관리 용이 | 대규모 분산 환경에서는 Kubernetes 같은 도구가 필요. |
빠른 배포와 테스트 환경 생성 | 일부 고급 설정(로드 밸런싱 등)은 기본적으로 지원하지 않음. |
컨테이너 간 네트워크 설정 자동화 | 추가적인 학습 곡선이 필요. |
일관된 개발/운영 환경 제공 | 단일 호스트에 적합하며, 멀티 호스트 지원이 제한적. |
환경 변수와 볼륨 관리 편리 | 네트워크 보안 설정을 세부적으로 구성하려면 추가 작업 필요. |
부가적으로 알아야 할 정보
- YAML 파일 형식:
- Docker Compose 설정은 YAML 형식으로 작성되며, 들여쓰기가 중요.
- 버전에 따라 일부 기능의 지원 여부가 달라질 수 있음.
- Compose 파일 버전:
- version은 Compose 파일 형식의 버전을 지정.
- 일반적으로 최신 버전(3.8)을 사용하는 것이 좋음.
- Docker Compose와 Kubernetes:
- Docker Compose는 단일 호스트에서 관리하기 적합.
- Kubernetes는 다중 호스트와 복잡한 배포 환경에 적합.
- 네트워크와 볼륨:
- Compose 파일에서 네트워크와 볼륨을 정의해 데이터와 통신을 효율적으로 관리.
Docker Compose 파일 실전 예제
- ▶️ 실전에서 쓰이는 예제
- ▶️ fastapi app
- Dockrfile
- ▶️ fastapi app
FROM python:3.10
RUN pip install pipenv
WORKDIR /app
ADD . /app/
RUN pipenv --python 3.10
RUN pipenv run pip install poetry
RUN pipenv sync
RUN pipenv run pip install certifi
ARG STAGE
RUN sh -c 'echo "STAGE=$STAGE" > .env'
RUN sh -c 'echo "PYTHONPATH=." >> .env'
# ENV PYTHONPATH=/app
RUN chmod +x ./scripts/run.sh
RUN chmod +x ./scripts/run-worker.sh
# ENV PYTHONPATH=/app
CMD ["./scripts/run.sh"]
- docker-compoe.yaml
version: "3"
services:
channel-api:
image: xxxx.dkr.ecr.ap-northeast-2.amazonaws.com/reaction-channel:${AWS_ENV_STAGE:-dev}-${TAG:-latest}
build:
context: .
dockerfile: dockerfile
args:
STAGE: ${STAGE:-develop}
ports:
- "8000:8000"
environment:
- NEW_RELIC_CONFIG_FILE=newrelic.ini
- NEW_RELIC_ENVIRONMENT=ecs-${STAGE:-develop}
logging:
driver: awslogs
options:
awslogs-stream-prefix: channel
awslogs-group: /ecs/reaction/${AWS_ENV_STAGE:-dev}/channel-api
awslogs-region: ap-northeast-2
reverseproxy:
image: xxxxx.dkr.ecr.ap-northeast-2.amazonaws.com/reverseproxy:prod-channel-latest
ports:
- "80:80"
- "81:81"
logging:
driver: awslogs
options:
awslogs-stream-prefix: reverseproxy
awslogs-group: /ecs/reaction/${AWS_ENV_STAGE:-dev}/reverseproxy
awslogs-region: ap-northeast-2
- 실습: 개발환경에서 Docker Compose 사용하기
- https://github.com/nbcdocker/spring-boot-sample
- 해당 코드를 clone
cd ~
git clone https://github.com/nbcdocker/spring-boot-sample.git
- docker-compose 로 실행
cd ~/spring-boot-sample
docker-compose up -d
docker-compose logs -f
- mysql, redis 를 Docker Compose로 실행하여 코드에서 사용
- redis: 26379
- mysql: 23306
- redis 연결 테스트
- http://localhost:8080/test-cache 에 redis 를 사용한 5초 단위 캐시 적용 확인
'Docker > Docker' 카테고리의 다른 글
[Docker] Docker Volume (0) | 2025.02.05 |
---|---|
[Docker] Docker 모니터링&로깅 (0) | 2025.02.04 |
[Docker] Dockerfile (1) | 2025.02.01 |
[CI/CD] Github Actions CI (0) | 2025.01.31 |
[Docker] Docker+CI/CD (0) | 2025.01.30 |