Docker Compose란?

📌  Docker Compose는 여러 개의 Docker 컨테이너를 정의하고 관리하기 위한 도구입니다. 각 컨테이너를 하나의 설정 파일(docker-compose.yaml)에 정의하여, 개발, 테스트, 배포 환경에서 쉽게 관리할 수 있습니다.


Docker Compose를 사용하는 이유

  1. 편리한 설정 관리:
    • 여러 컨테이너를 한 파일에 정의해 관리. 각 컨테이너의 이미지, 포트, 환경 변수 등을 설정.
  2. 자동화된 배포:
    • 설정 파일 기반으로 docker compose up 명령만으로 여러 컨테이너를 자동으로 생성 및 실행.
  3. 의존성 관리:
    • 컨테이너 간의 의존성을 정의하고, 필요한 순서에 따라 실행.
  4. 유지보수 간편화:
    • 설정 파일 하나로 컨테이너를 관리, 수정 시 파일만 업데이트하면 반영.
  5. 일관성 있는 환경 제공:
    • 개발, 테스트, 운영 환경에서 동일한 설정 파일을 사용하여 환경 차이 제거.
  6. 보안 강화:
    • 네트워크를 격리하여 컨테이너 간 통신을 외부로부터 차단 가능.

Docker Compose 사용 환경

  1. 개발 환경:
    • 애플리케이션과 의존 서비스(DB, Redis 등)를 쉽게 설정하고 실행.
    • 팀원이 동일한 환경에서 작업 가능.
  2. 테스트 환경:
    • 자동화된 테스트 환경을 빠르게 생성 및 제거.
    • 예제:
      docker compose up -d
      ./run_tests
      docker compose down
      
  3. 단일 호스트 배포:
    • 단일 서버에서 여러 컨테이너를 관리하고 실행.
    • 운영 환경에서도 간단한 애플리케이션 배포 가능.

Docker Compose의 특장점

특장점 설명
한 번에 여러 컨테이너 관리 여러 컨테이너를 한 파일에 정의해 간단히 관리 가능.
빠른 실행 설정 파일에서 변경된 부분만 재실행하여 속도 개선.
같은 네트워크에서 쉽게 연결 컨테이너들이 자동으로 동일 네트워크에 연결되어 통신 설정 간편.
일관성 있는 환경 제공 개발, 테스트, 배포 환경에서 동일한 설정 파일을 사용해 환경 차이 제거.
의존성 처리 컨테이너 간 의존성을 명시하고, 의존 컨테이너를 우선 실행.

Docker Compose 실행 방법

  1. 각 애플리케이션의 Dockerfile 작성:
    • 애플리케이션 실행에 필요한 Dockerfile 작성.
    • 예: 웹 서버용 Dockerfile, 데이터베이스 컨테이너는 기본 이미지를 사용.
  2. docker-compose.yaml 파일 작성:
    • 여러 컨테이너와 네트워크, 볼륨, 환경 변수를 정의.
    • 예:
      version: "3.8"
      services:
        web:
          build: .
          ports:
            - "5000:5000"
          volumes:
            - .:/code
        db:
          image: postgres
          environment:
            POSTGRES_USER: user
            POSTGRES_PASSWORD: password
      
  3. 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 같은 도구가 필요.
빠른 배포와 테스트 환경 생성 일부 고급 설정(로드 밸런싱 등)은 기본적으로 지원하지 않음.
컨테이너 간 네트워크 설정 자동화 추가적인 학습 곡선이 필요.
일관된 개발/운영 환경 제공 단일 호스트에 적합하며, 멀티 호스트 지원이 제한적.
환경 변수와 볼륨 관리 편리 네트워크 보안 설정을 세부적으로 구성하려면 추가 작업 필요.

부가적으로 알아야 할 정보

  1. YAML 파일 형식:
    • Docker Compose 설정은 YAML 형식으로 작성되며, 들여쓰기가 중요.
    • 버전에 따라 일부 기능의 지원 여부가 달라질 수 있음.
  2. Compose 파일 버전:
    • version은 Compose 파일 형식의 버전을 지정.
    • 일반적으로 최신 버전(3.8)을 사용하는 것이 좋음.
  3. Docker Compose와 Kubernetes:
    • Docker Compose는 단일 호스트에서 관리하기 적합.
    • Kubernetes는 다중 호스트와 복잡한 배포 환경에 적합.
  4. 네트워크와 볼륨:
    • Compose 파일에서 네트워크와 볼륨을 정의해 데이터와 통신을 효율적으로 관리.

 

 

Docker Compose 파일 실전 예제

  • ▶️ 실전에서 쓰이는 예제
    • ▶️ fastapi app
      • Dockrfile
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

 

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 연결 테스트

'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

+ Recent posts