반응형

Docker Compose 사용법과 예시: 효율적인 컨테이너 관리 도구

Docker는 애플리케이션을 컨테이너로 격리하여 실행하는 강력한 도구입니다. 여러 컨테이너로 구성된 애플리케이션을 쉽게 관리하고 실행하기 위해 Docker Compose라는 도구가 제공됩니다. Docker Compose는 여러 컨테이너의 설정을 YAML 파일로 정의하고, 한 번의 명령으로 손쉽게 컨테이너를 관리할 수 있습니다.

이번 글에서는 Docker Compose의 사용법, 예시 파일, 환경 변수 파일(.env) 사용법, 그리고 단일 이미지 vs. Docker Compose의 장단점에 대해 설명해 보겠습니다.


Docker Compose란?

Docker Compose는 여러 개의 Docker 컨테이너를 정의하고, 이 컨테이너들을 한 번에 실행하고 관리할 수 있는 도구입니다. **docker-compose.yml**이라는 설정 파일에 컨테이너 구성을 정의하고, docker-compose up 명령어로 전체 서비스를 실행할 수 있습니다. 이를 통해 개발자들은 복잡한 애플리케이션의 컨테이너를 일일이 실행할 필요 없이, 간편하게 일괄 관리할 수 있습니다.


Docker Compose 예시 파일

아래는 Node.js 애플리케이션MySQL 데이터베이스를 포함한 간단한 Docker Compose 파일의 예시입니다.

#docker-compose.yaml

version: '3'

services:
  web:
    image: node:14
    container_name: node_web
    volumes:
      - ./app:/usr/src/app
    working_dir: /usr/src/app
    command: npm start
    ports:
      - "3000:3000"
    env_file:
      - .env
    depends_on:
      - db

  db:
    image: mysql:5.7
    container_name: mysql_db
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: mydatabase
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    ports:
      - "3306:3306"
    volumes:
      - db_data:/var/lib/mysql

volumes:
  db_data:

설명:

  • version: Compose 파일의 버전을 지정합니다.
  • services: 컨테이너를 정의하는 부분으로, web과 db 두 개의 서비스가 있습니다.
    • web: Node.js 컨테이너를 정의하며, .env 파일을 사용하여 환경 변수를 설정합니다.
    • db: MySQL 데이터베이스 컨테이너로, 환경 변수로 데이터베이스 설정을 지정합니다.
  • volumes: 컨테이너의 데이터를 유지할 수 있는 볼륨을 정의하여, 컨테이너가 종료되더라도 데이터가 유지되도록 설정합니다.

환경 변수 파일 (.env) 사용법

환경 변수 파일을 사용하면 민감한 정보나 설정 값을 코드에서 분리할 수 있어 보안성과 가독성을 높일 수 있습니다. 예를 들어, .env 파일을 작성하여 다음과 같이 환경 변수를 설정할 수 있습니다:

#.env file
MYSQL_ROOT_PASSWORD=rootpassword
MYSQL_DATABASE=mydatabase
MYSQL_USER=user
MYSQL_PASSWORD=password

Compose 파일 내에서 env_file 지시어를 통해 이 파일을 참조함으로써, 환경 변수를 손쉽게 적용할 수 있습니다. 이는 유지보수를 용이하게 하고, 환경 설정을 보다 유연하게 관리할 수 있도록 도와줍니다.


Docker Compose 사용법

Docker Compose의 사용법은 매우 간단합니다. 아래는 기본적인 사용 명령어입니다.

Docker Compose 파일 작성: docker-compose.yml 파일을 작성합니다.

서비스 실행:이 명령어를 실행하면 docker-compose.yml에 정의된 모든 서비스가 실행됩니다.

docker-compose logs

백그라운드에서 실행:-d 옵션을 사용하면 컨테이너가 백그라운드에서 실행됩니다.

docker-compose down

서비스 중지:모든 서비스를 중지하고 컨테이너를 삭제합니다.

docker-compose up -d

로그 확인:각 컨테이너에서 발생하는 로그를 확인할 수 있습니다.

docker-compose up

Docker Compose의 장점

  1. 간편한 멀티 컨테이너 관리: 여러 컨테이너를 동시에 관리할 수 있어 복잡한 애플리케이션 구성도 쉽게 실행 가능합니다.
  2. YAML 파일을 통한 설정: docker-compose.yml 파일로 구성 요소를 쉽게 정의하고 관리할 수 있습니다.
  3. 환경 의존성 제거: 로컬 개발 환경에서도 쉽게 컨테이너를 실행할 수 있으며, 배포 환경에서도 동일한 설정을 사용할 수 있습니다.
  4. 컨테이너 간 의존성 관리: depends_on 옵션을 사용해 컨테이너 간 의존성을 쉽게 정의할 수 있어, 서비스 실행 순서를 보장합니다.
  5. 데이터 유지: 볼륨을 정의해 데이터를 영구적으로 저장할 수 있어 컨테이너 종료 후에도 데이터가 유지됩니다.

Docker Compose의 단점

  1. 복잡한 설정 관리: 많은 컨테이너와 설정이 포함된 경우, docker-compose.yml 파일이 복잡해질 수 있습니다.
  2. 성능 이슈: 다수의 컨테이너를 로컬에서 실행할 경우, 시스템 리소스를 많이 소모할 수 있습니다.
  3. 초기 설정 어려움: 도커와 Compose에 익숙하지 않은 사용자에게는 초기 설정 과정이 다소 어려울 수 있습니다.
  4. 네트워크 이슈: Docker Compose의 기본 네트워크 설정으로 인한 포트 충돌이 발생할 수 있으며, 복잡한 네트워크 설정이 필요한 경우 추가적인 조정이 필요합니다.

단일 Docker 이미지 vs. Docker Compose

단일 Docker 이미지 사용의 장점

  1. 간편한 배포: 하나의 이미지만 있으면 배포가 용이합니다.
  2. 단순한 설정: 단일 애플리케이션을 실행할 때 설정이 간단합니다.
  3. 리소스 관리: 리소스 소모가 상대적으로 적습니다.

단일 Docker 이미지 사용의 단점

  1. 확장성 부족: 여러 서비스나 데이터베이스와의 연결이 필요할 경우 복잡해질 수 있습니다.
  2. 환경 관리 어려움: 각 서비스의 환경 설정을 별도로 관리해야 합니다.

Docker Compose 사용의 장점

  1. 복잡한 애플리케이션 구성: 여러 서비스를 쉽게 연결하고 관리할 수 있습니다.
  2. 환경 설정 통합: 모든 서비스의 환경 설정을 하나의 YAML 파일로 관리할 수 있습니다.
  3. 서비스 간 의존성 처리: 서비스 간의 실행 순서를 관리할 수 있습니다.

Docker Compose 사용의 단점

  1. 복잡한 설정 관리: 설정이 많아질수록 YAML 파일이 복잡해질 수 있습니다.
  2. 성능 소모: 여러 컨테이너를 동시에 실행하면 시스템 리소스 사용량이 증가할 수 있습니다.

결론

Docker Compose는 여러 컨테이너로 이루어진 애플리케이션을 손쉽게 관리하고 실행할 수 있는 강력한 도구입니다. YAML 파일을 통한 설정 관리와 환경 변수 파일을 활용한 민감한 정보 보호로 개발 환경과 운영 환경에서의 일관성을 유지할 수 있습니다. 복잡한 컨테이너 의존성도 간단히 관리할 수 있으며, 다양한 프로젝트에 적용해 보시기 바랍니다.

Docker Compose를 통해 개발과 운영 환경에서의 생산성을 크게 향상시킬 수 있으므로, 효율적인 컨테이너 관리를 위한 도구로 적극 활용해 보세요!

반응형

'Computer Science > linux' 카테고리의 다른 글

Argo workflow 설치와 예제  (0) 2024.09.22
Dockerfile 작성하기  (1) 2024.09.15
Docker 사용하기  (0) 2024.09.15
Slurm 설치  (0) 2024.06.05
사용자 계정 관리 및 조직의 구조화 툴 (LDAP)  (0) 2024.05.17

+ Recent posts