본문 바로가기
Docker/docker

도커 Compose로 애플리케이션 관리하기

by 노마드 산코디 2023. 10. 17.
728x90

안녕하세요. 오늘은 도커의 Compose에 대한 내용을 주제로 포스팅하려고 합니다. Compose는 도커 애플리케이션의 멀티-컨테이너 관리를 단순화하는 도구로, 다양한 주제를 다룰 수 있습니다. Compose 파일 작성, 멀티-컨테이너 애플리케이션 구축, 환경 변수 및 네트워크 설정, 볼륨 관리, Compose 스케일링, Compose를 사용한 로컬 개발 환경 구축 등이 있습니다.

 

 




1. 도커 Compose란?

도커 컴포즈(Docker Compose)는 도커(Docker) 기반의 멀티-컨테이너 애플리케이션을 정의하고 실행하기 위한 도구입니다. Compose는 YAML 파일 형식으로 애플리케이션의 구조, 서비스, 네트워크, 볼륨 등을 정의하며, 이 파일을 사용하여 여러 개의 컨테이너를 쉽게 생성하고 관리할 수 있습니다.


도커 컴포즈의 특징

  • 멀티-컨테이너 애플리케이션 관리
    컴포즈
    를 사용하면 여러 개의 컨테이너로 이루어진 멀티-컨테이너 애플리케이션을 정의하고 관리할 수 있습니다. 이 컨테이너들은 서로 연결되고 협력하여 애플리케이션을 구성합니다.


  • YAML 파일로 정의
    애플리케이션의 구조, 서비스, 네트워크, 볼륨, 환경 변수 등을 YAML 파일 형식으로 정의합니다. 이러한 정의 파일을 통해 애플리케이션을 손쉽게 설명하고 공유할 수 있습니다.


  • 설치 및 구성의 단순화
    컴포즈
    는 컨테이너의 생성, 구성, 실행을 자동화하므로 개발자와 관리자는 복잡한 작업을 간소화하고 빠르게 환경을 구성할 수 있습니다.


  • 컨테이너 간 의존성 관리
    컴포즈
     파일에서 서비스 간 의존성을 정의하고, 한 서비스가 다른 서비스를 기다리도록 설정할 수 있습니다. 이를 통해 애플리케이션 구성을 단순화하고 의존성 문제를 방지할 수 있습니다.


  • 환경 변수 및 볼륨 관리
    컴포즈
    를 사용하여 각 서비스의 환경 변수를 설정하고, 데이터 볼륨을 관리할 수 있습니다. 이를 통해 서비스 간 환경 변수 공유와 데이터 공유를 쉽게 구현할 수 있습니다.


  • 스케일링
    컴포즈
    를 통해 서비스의 인스턴스 수를 확장하거나 축소할 수 있습니다. 이로써 서비스의 부하를 분산하고 성능을 향상시킬 수 있습니다.


  • 로컬 개발 환경 구축
    개발 환경을 컴포즈 파일로 정의하고 로컬 머신에서 실행하여 개발 및 테스트를 진행할 수 있습니다. 이는 개발자들 간 환경 일관성을 유지하는 데 도움이 됩니다.


  • 다양한 환경 지원
    하나의 컴포즈 파일로 여러 환경(개발, 테스트, 스테이징, 프로덕션 등)에서 애플리케이션을 배포하고 관리할 수 있으며, 환경별로 설정을 구분하여 관리할 수 있습니다.


  • 프로덕션 배포용
    컴포즈
    를 사용하여 로컬 환경에서 개발한 애플리케이션을 프로덕션 서버로 배포할 수 있으며, 보다 안정적이고 확장 가능한 배포를 지원합니다.


  • 커뮤니티 지원
    도커 컴포즈는 활발한 개발 및 커뮤니티 지원을 받고 있으며, 다양한 플러그인과 확장 기능을 활용할 수 있습니다.



도커 컴포즈는 멀티-컨테이너 애플리케이션을 쉽게 정의하고 관리하기 위한 도구로, 도커 환경에서 애플리케이션 배포와 관리를 단순화하는 데 큰 도움을 줍니다.

 

 

 

 


2. Compose의 설치 및 설정



1. 도커 설치
먼저 도커가 설치되어 있어야 합니다. 도커 공식 웹사이트에서 운영체제에 맞는 도커 설치 방법을 확인하고 설치합니다.


2. 도커 컴포즈 설치

  • Linux
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

 

  • macOS
    Docker Desktop을 설치하면 도커 컴포즈도 함께 설치됩니다.

  • Windows
    Docker Desktop을 설치하면 도커 컴포즈도 함께 설치됩니다.

  • 다른 운영체제의 경우 공식 설치 가이드를 참고하여 설치합니다.



3. 도커 컴포즈 버전 확인
설치가 완료되면 다음 명령어로 도커 컴포즈 버전을 확인합니다.

docker-compose --version



4. 도커 컴포즈 파일 생성
도커 컴포즈를 사용하려면 애플리케이션의 구성을 정의하는 docker-compose.yml 파일을 생성합니다. 이 파일은 서비스, 네트워크, 볼륨, 환경 변수 등을 설정할 수 있습니다.


5. 도커 컴포즈 명령어 실행
생성한 docker-compose.yml 파일이 있는 디렉토리에서 다양한 도커 컴포즈 명령어를 실행할 수 있습니다.

  • 애플리케이션 시작
docker-compose up

 

  • 백그라운드에서 애플리케이션 시작
docker-compose up -d

 

  • 애플리케이션 종료
docker-compose down

 

  • 로그 확인
docker-compose logs




도커 컴포즈를 설치하고 설정하면 멀티-컨테이너 애플리케이션을 간단하게 관리하고 배포할 수 있습니다. 컴포즈 파일을 편집하여 원하는 애플리케이션 구성을 정의하고, 명령어를 통해 애플리케이션을 시작하거나 중지할 수 있습니다.

 

 

 

 


3. Compose의 명령어

도커 컴포즈(Docker Compose)는 여러 컨테이너로 구성된 애플리케이션을 관리하고 배포하기 위한 다양한 명령어를 제공합니다.

  • docker-compose up
    컴포즈 파일에 정의된 서비스를 시작하고 컨테이너를 생성합니다.
    사용 예시) docker-compose up [options] [SERVICE...]


  • docker-compose down
    컴포즈 파일에 정의된 서비스의 컨테이너를 중지하고 삭제합니다.
    사용 예시) docker-compose down [options]

  • docker-compose start
    중지된 서비스를 시작합니다.
    사용 예시) docker-compose start [SERVICE...]

  • docker-compose stop
    실행 중인 서비스를 중지합니다.
    사용 예시) docker-compose stop [SERVICE...]

  • docker-compose restart
    서비스를 재시작합니다.
    사용 예시) docker-compose restart [SERVICE...]

  • docker-compose pause
    실행 중인 서비스를 일시 중지합니다.
    사용 예시) docker-compose pause [SERVICE...]

  • docker-compose unpause
    중지된 서비스를 다시 실행합니다.
    사용 예시) docker-compose unpause [SERVICE...]

  • docker-compose logs
    서비스의 로그를 확인합니다.
    사용 예시) docker-compose logs [options] [SERVICE...]

  • docker-compose ps
    현재 실행 중인 컨테이너의 상태를 확인합니다.
    사용 예시) docker-compose ps [options] [SERVICE...]

  • docker-compose exec
    컨테이너 내에서 명령어를 실행합니다.
    사용 예시) docker-compose exec [options] SERVICE COMMAND [ARGS...]

  • docker-compose build
    이미지를 빌드합니다. 컴포즈 파일의 변경 사항이나 새로운 이미지를 만들 때 사용합니다.
    사용 예시) docker-compose build [options] [SERVICE...]

  • docker-compose pull
    컴포즈 파일에 정의된 서비스의 이미지를 다시 가져옵니다.
    사용 예시) docker-compose pull [SERVICE...]

  • docker-compose config
    컴포즈 파일을 구문 분석하고 구성을 확인합니다.
    사용 예시) docker-compose config [options]

  • docker-compose version
    도커 컴포즈 버전을 확인합니다.
    사용 예시) docker-compose version

  • docker-compose top
    컨테이너의 프로세스 목록을 표시합니다.
    사용 예시) docker-compose top [options] [SERVICE...]

  • docker-compose scale
    서비스의 컨테이너 개수를 조절합니다.
    사용 예시) docker-compose scale SERVICE=NUM [SERVICE=NUM...]

  • docker-compose events
    이벤트 스트림을 모니터링하여 이벤트를 확인합니다.
    사용 예시) docker-compose events [options] [SERVICE...]

  • docker-compose down -v
    컴포즈 파일에 정의된 서비스의 컨테이너와 볼륨을 모두 중지하고 삭제합니다.

 

이 명령어들은 도커 컴포즈를 사용하여 멀티-컨테이너 애플리케이션을 관리하는 데 유용합니다. 








4. Compose의 활용 예제



1. 간단한 웹 애플리케이션 구성
아래는 도커 컴포즈를 사용하여 Python과 Redis로 간단한 웹 애플리케이션을 구성하는 예제입니다.


docker-compose.yml 파일 작성

version: '3'
services:
  web:
    image: python:3.9
    ports:
      - "5000:5000"
    volumes:
      - ./app:/app
    depends_on:
      - redis
    environment:
      REDIS_HOST: redis
  redis:
    image: "redis:alpine"


위의 구성에서는 두 개의 서비스, web 및 redis를 정의합니다. web 서비스는 Python 3.9 이미지를 기반으로 하며, 5000번 포트를 외부에 노출하고 현재 디렉터리의 app 폴더를 컨테이너 내 /app로 마운트합니다. 또한 Redis 서비스(redis)에 의존합니다.


Python 웹 애플리케이션 코드 작성

# app/app.py

from flask import Flask
from redis import Redis

app = Flask(__name__)
redis = Redis(host='redis', port=6379)

@app.route('/')
def hello():
    redis.incr('hits')
    return 'Hello Docker Compose! This page has been visited %s times.' % redis.get('hits')

if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True)




2. 애플리케이션 실행

아래 명령어로 도커 컴포즈를 실행합니다.

docker-compose up


웹 애플리케이션은 http://localhost:5000에서 접속할 수 있으며, Redis가 사용되어 방문자 수가 기록됩니다.




3. 애플리케이션 종료

테스트가 끝나면 컨테이너를 중지하려면 Ctrl+C를 누르고, 모든 컨테이너와 네트워크를 삭제하려면 아래 명령어를 실행합니다.

docker-compose down


위의 예제에서는 간단한 웹 애플리케이션을 도커 컴포즈를 사용하여 구성하고 실행하는 방법을 보여줍니다. 도커 컴포즈를 사용하면 멀티-컨테이너 애플리케이션을 쉽게 관리하고 배포할 수 있습니다.

도커 컴포즈(Docker Compose)를 사용하여 간단한 웹 애플리케이션을 구성하는 예제를 통해 활용 방법을 살펴보겠습니다.








5. Compose 사용시 주의사항



1. 호스트 자원 고려
도커 컴포즈로 여러 컨테이너를 실행할 때 호스트 시스템의 자원(CPU, 메모리, 디스크 공간)을 고려해야 합니다. 자원 부족으로 성능 저하나 컨테이너 충돌을 방지하기 위해 호스트의 가용 자원을 확인하고 적절히 할당하는 것이 좋습니다.

2. 이미지 관리
도커 이미지는 컨테이너 실행에 필요한 모든 정보를 포함하므로 이미지 크기가 크면 다운로드와 저장에 시간이 걸릴 수 있습니다. 필요한 패키지만 포함한 경량 이미지를 사용하고 이미지를 정기적으로 정리하여 관리하는 것이 좋습니다.

3. 네트워크 설정
도커 컴포즈는 컨테이너 간 통신을 위한 기본 네트워크를 자동으로 생성합니다. 네트워크 충돌을 방지하려면 컨테이너 이름 및 포트 설정에 유의해야 합니다.

4. 보안
컨테이너 간 통신이나 데이터베이스 비밀번호와 같은 중요한 정보는 환경 변수나 시크릿 관리 도구를 사용하여 안전하게 관리해야 합니다. 민감한 정보를 소스 코드에 노출하지 않아야 합니다.

5. 백업 및 복구
중요한 데이터는 정기적으로 백업하고, 컨테이너와 데이터 볼륨을 쉽게 복원할 수 있는 백업 및 복구 전략을 갖추어야 합니다.

6. 로그 모니터링
컨테이너에서 생성되는 로그를 적절히 모니터링하고 저장해야 합니다. 중요한 로그 이벤트를 놓치지 않도록 로그 관리를 설정하는 것이 좋습니다.

7. 도커 컴포즈 버전 호환성
도커 컴포즈 파일의 버전과 도커 엔진 버전이 호환되어야 합니다. 도커 컴포즈 파일의 버전을 도커 엔진 버전에 맞게 설정해야 합니다.

8. 도커 컴포즈 문서 확인
도커 컴포즈 공식 문서를 확인하여 명령어 및 옵션에 대한 자세한 정보를 참고하는 것이 좋습니다. 문서는 도커 컴포즈의 기능과 사용법을 잘 설명하고 있습니다.

9. 테스트 및 모니터링
도커 컴포즈를 사용하여 애플리케이션을 배포하기 전에 테스트를 수행하고, 실행 중인 컨테이너 및 애플리케이션 상태를 모니터링하는 것이 좋습니다.

10. 버전 관리
도커 컴포즈 파일을 버전 관리 시스템(Git 등)에 저장하고 변경 사항을 기록하세요. 이를 통해 이전 상태로 롤백하거나 협업할 때 유용합니다.



도커 컴포즈를 사용하면 멀티-컨테이너 애플리케이션을 쉽게 관리하고 배포할 수 있지만, 위의 주의사항을 준수하여 안정적으로 운영할 수 있도록 해야 합니다.

 

 

 

 


최종 정리

오늘은 도커 컴포즈에 대한 기본적인 내용을 주제로 정리해 보았습니다. 다. 도커 컴포즈는 멀티-컨테이너 애플리케이션을 효율적으로 관리하고 배포하는 데 매우 유용한 도구입니다. 이를 통해 개발 환경을 설정하고, 복잡한 애플리케이션 스택을 정의하며, 여러 컨테이너를 함께 실행할 수 있습니다. 도커 컴포즈를 사용하면 애플리케이션의 배포와 관리 과정을 단순화하고, 확장성을 높일 수 있습니다.

감사합니다.

 

 

 

728x90
반응형