Backend study/Backend theory

Docker - Docker Compose

adulty22 2024. 9. 6. 10:01

도커 컴포즈(Docker Compose)란?

도커 컴포즈(Docker Compose)는 여러 개의 컨테이너를 사용하여 복잡한 애플리케이션을 쉽게 정의하고 실행할 수 있도록 도와주는 도구이다. 도커 컴포즈를 사용하면 단일 YAML 파일에 애플리케이션의 서비스 정의를 작성하고, 이 파일을 기반으로 여러 컨테이너를 한 번에 설정하고 실행할 수 있다. 특히 마이크로서비스 아키텍처에서 여러 독립적인 컨테이너(서비스)를 관리하고 실행하는 데 매우 유용하다.

 

도커 컴포즈의 주요 개념

도커 컴포즈는 주로 YAML 파일을 사용하여 애플리케이션을 정의하고, 이를 통해 도커 컴포즈가 자동으로 필요한 컨테이너들을 생성, 연결, 관리한다. 도커 컴포즈의 주요 개념은 아래와 같다.

  1. 서비스(Services): 도커 컴포즈에서 서비스는 컨테이너의 정의이다. 서비스는 특정 이미지로부터 컨테이너를 실행하며, 각 서비스는 독립적인 애플리케이션 역할을 할 수 있다. 예를 들어, 웹 서버와 데이터베이스를 각각 하나의 서비스로 정의할 수 있다.
  2. 네트워크(Networks): 도커 컴포즈는 서비스 간의 통신을 쉽게 하기 위해 네트워크를 자동으로 구성한다. 기본적으로 컴포즈는 각 서비스에 격리된 네트워크를 설정하여 서비스 간의 안전한 통신을 보장한다.
  3. 볼륨(Volumes): 볼륨을 사용하여 서비스 간의 데이터를 영구적으로 저장하고, 컨테이너가 삭제되더라도 데이터를 유지할 수 있다. 이를 통해 데이터베이스와 같은 애플리케이션의 데이터를 안전하게 보존할 수 있다.

 

도커 컴포즈의 사용 목적

  • 복잡한 애플리케이션 환경의 정의: 마이크로서비스 기반 애플리케이션은 여러 컨테이너로 구성되는 경우가 많다. 예를 들어, 프론트엔드, 백엔드, 데이터베이스를 각각 다른 컨테이너로 실행해야 할 경우, 도커 컴포즈를 통해 각 서비스의 설정을 쉽게 관리할 수 있다.
  • 자동화된 컨테이너 관리: docker-compose up 명령을 사용하면, 한 번에 여러 컨테이너를 설정하고 실행할 수 있다. 각 컨테이너의 시작 순서나 종속성을 설정할 수도 있다.
  • 개발 환경의 일관성: 컴포즈 파일을 사용하면 동일한 환경을 개발, 테스트, 프로덕션에서도 쉽게 복제할 수 있다. 모든 개발자가 동일한 환경에서 작업할 수 있도록 지원한다.

 

도커 컴포즈 YAML 파일 예시

다음은 도커 컴포즈를 사용해 여러 개의 컨테이너를 정의하는 간단한 예시이다. 이 예시는 웹 서버(Nginx)와 데이터베이스(MySQL)를 포함한 애플리케이션을 정의한다.

docker-compose.yml

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./web:/usr/share/nginx/html
    networks:
      - app-network

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: examplepassword
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepassword
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - app-network

networks:
  app-network:

volumes:
  db-data:

설명:

  • version: 도커 컴포즈 파일의 버전을 지정한다. 여기서는 '3' 버전을 사용하고 있다.
  • services: 각 서비스는 하나의 컨테이너를 의미하며, web과 db라는 두 개의 서비스가 정의되어 있다.
    • web: Nginx 웹 서버를 정의한다. ports 설정을 통해 로컬 머신의 8080 포트를 컨테이너의 80 포트에 매핑한다.
    • db: MySQL 데이터베이스를 정의한다. environment 키를 사용해 MySQL 초기 환경 변수를 설정하고, volumes를 사용해 데이터베이스 데이터를 영구 저장한다.
  • networks: 두 서비스가 같은 네트워크(app-network)에 연결되어 서로 통신할 수 있도록 설정한다.
  • volumes: MySQL 데이터베이스의 데이터를 영구적으로 저장하는 볼륨을 설정다.

 

도커 컴포즈 명령어

도커 컴포즈는 여러 유용한 명령어를 제공한다.

  1. docker-compose up: docker-compose.yml 파일을 기반으로 정의된 모든 서비스를 생성하고 실행한다. 이 명령어를 사용하면 정의된 컨테이너들이 네트워크와 함께 실행된다.
  2. docker-compose up
  3. docker-compose down: 현재 실행 중인 모든 서비스를 중지하고, 생성된 네트워크 및 볼륨을 삭제한다.
  4. docker-compose down
  5. docker-compose ps: 현재 실행 중인 서비스들의 상태를 확인할 수 있다.
  6. docker-compose ps
  7. docker-compose logs: 실행 중인 컨테이너의 로그를 확인할 수 있다.
  8. docker-compose logs

 

도커 컴포즈의 장점

  1. 여러 컨테이너를 쉽게 관리: YAML 파일 하나로 여러 컨테이너를 정의하고, 단일 명령어로 전체 애플리케이션을 실행할 수 있다.
  2. 복잡한 설정을 간소화: 각 컨테이너의 네트워크, 볼륨, 환경 변수를 쉽게 정의하고 관리할 수 있다. 이를 통해 복잡한 컨테이너 간의 상호작용을 간편하게 설정할 수 있다.
  3. 개발 환경의 일관성: 모든 설정이 파일에 기록되어 있으므로, 팀원 간의 환경 설정 차이를 줄일 수 있다. 한 번 작성한 컴포즈 파일로 다양한 환경에 동일한 설정을 적용할 수 있다.
  4. 재사용 가능성: 컴포즈 파일을 여러 환경에서 쉽게 재사용할 수 있으며, 코드베이스의 일부로 관리할 수 있어 유지 보수가 용이하다.

 

도커 컴포즈는 복잡한 멀티 컨테이너 애플리케이션을 간단하게 정의하고 실행할 수 있는 강력한 도구이다. 여러 서비스들이 서로 어떻게 상호작용하고 통신할지를 한눈에 파악할 수 있으며, 간단한 명령어로 이를 실행할 수 있기 때문에 매우 효율적이다. 마이크로서비스 아키텍처나 복잡한 애플리케이션을 구축하는 개발자에게 필수적인 도구이다.

728x90