본문 바로가기

프로그래밍/docker

Docker Compose의 필요성과 기본 사용법

반응형

Docker는 컨테이너 기술을 통해 애플리케이션을 가볍고 효율적으로 실행할 수 있는 환경을 제공한다.

하지만 실제 프로젝트에서 단일 컨테이너만 사용하는 경우는 드물고, 보통 여러 개의 컨테이너가 협업하는 구조가 된다.

데이터베이스, 백엔드 API, 프론트엔드 등 각 구성 요소가 독립된 컨테이너로 실행될 때, 이를 효율적으로 관리하기 위해 Docker Compose가 필요하다.

Docker Compose가 필요한 이유

1. 멀티 컨테이너 관리의 편의성

여러 개의 컨테이너를 하나하나 docker run으로 실행하고 설정하는 것은 번거롭다.

Docker Compose를 사용하면 YAML 파일 하나로 모든 컨테이너 설정을 정의하고, docker-compose up 한 줄로 모든 서비스를 실행할 수 있다.

 

2. 일관된 환경 구성

팀원들이 동일한 환경에서 개발하고 테스트할 수 있다.

YAML 파일에 정의된 설정 덕분에, 누구나 같은 명령어만 실행하면 동일한 컨테이너 환경을 구축할 수 있다.

 

3. 의존성 관리

서비스 간 의존성을 쉽게 설정할 수 있다.

예를 들어 웹 애플리케이션이 데이터베이스에 의존할 때, Docker Compose는 데이터베이스 컨테이너가 준비될 때까지 웹 애플리케이션 컨테이너 실행을 대기시킬 수 있다.

 

4. 편리한 네트워크 구성

Docker Compose는 각 컨테이너에 자동으로 네트워크를 설정해주고, 서비스 이름으로 쉽게 컨테이너 간 통신이 가능하다. 별도의 네트워크 설정 없이 db, web 같은 이름으로 접근할 수 있다.

 

Docker Compose 기본 사용법

 

1. Docker Compose 설치 확인

Docker가 설치되어 있다면 보통 Docker Compose도 함께 설치된다. 버전을 확인해보자.

docker-compose --version

 

2. YAML 파일 작성

docker-compose.yml 파일을 생성하고 아래와 같은 형식으로 여러 컨테이너의 설정을 정의한다.

version: '3'
services:
  web:
    image: nginx
    ports:
      - "8080:80"
  app:
    build: ./app
    volumes:
      - ./app:/usr/src/app
    environment:
      NODE_ENV: development
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - db_data:/var/lib/mysql
volumes:
  db_data:

 

3. docker-compose.yml 기본 문법

  • version: Docker Compose 파일의 버전을 명시한다.
  • services: 컨테이너화할 각 서비스의 정의다.
  • image: 사용할 도커 이미지다.
  • build: 로컬의 Dockerfile을 사용해 이미지를 빌드한다.
  • ports: 호스트와 컨테이너 간의 포트 매핑이다.
  • volumes: 호스트와 컨테이너 간의 디렉터리 마운트를 설정한다.
  • environment: 환경 변수를 설정한다.
  • volumes(루트 항목): 서비스에서 사용할 볼륨을 정의한다.

4. 컨테이너 실행

정의한 서비스를 실행한다.백그라운드에서 실행하고 싶다면 -d 옵션을 붙인다.

docker-compose up

docker-compose up -d

 

5. 컨테이너 중지 및 삭제

docker-compose down

개인적인 의견

Docker Compose는 개발자에게 정말 큰 효율성을 제공한다.

특히 팀 프로젝트에서 같은 환경을 손쉽게 재현할 수 있다는 점은 디버깅과 협업에 엄청난 장점이 된다.

필자의 경우 Node.js, Redis, MySQL이 필요한 실시간 채팅 프로젝트에서 Docker Compose를 사용해 컨테이너 간 네트워크를 손쉽게 설정하고, 데이터베이스 초기화 스크립트까지 자동화해 정말 많은 시간을 절약했다.

 

또한 로컬 환경뿐만 아니라 CI/CD 환경에서도 동일한 설정으로 테스트와 배포를 진행할 수 있다는 점도 Docker Compose의 큰 매력이다.

 

개인 프로젝트든 회사 프로젝트든 Docker Compose를 익혀두면 정말 강력한 무기가 되리라 확신한다.

반응형