DevOps 환경에서 컨테이너 기술은 점점 더 많은 기업과 개발자에게 필수적인 요소로 자리 잡고 있습니다. 특히 Docker는 애플리케이션을 컨테이너화하여 일관된 개발 및 배포 환경을 제공하는 데 큰 도움을 줍니다. 그러나 복잡한 애플리케이션을 구성할 때 여러 서비스 간의 종속성 문제는 종종 발생합니다. 이때 Docker Compose를 사용하면 문제를 간단하게 해결할 수 있습니다.
Docker Compose란?
Docker Compose는 여러 개의 Docker 컨테이너를 정의하고 실행할 수 있는 도구입니다. YAML 파일을 사용하여 애플리케이션의 서비스, 네트워크, 볼륨 등을 정의할 수 있으며, 이를 통해 각 서비스 간의 종속성을 쉽게 관리할 수 있습니다.
Docker Compose 설치하기
Docker Compose를 설치하는 방법은 여러 가지가 있지만, 일반적으로 Docker가 설치된 환경이라면 아래와 같은 명령어로 설치할 수 있습니다:
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
# 설치 확인
docker-compose --version
Docker Compose 파일 구성하기
Docker Compose 파일은 docker-compose.yml이라는 이름으로 프로젝트 루트 디렉토리에 위치해야 합니다. 아래는 간단한 예제를 통해 웹 애플리케이션과 데이터베이스 간의 종속성을 설정하는 방법을 살펴보겠습니다.
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "8080:80"
depends_on:
- db
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: test_db
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
위의 예제에서 web 서비스는 nginx 이미지를 사용하고, db 서비스는 MySQL을 사용합니다. depends_on 키워드를 사용하여 web 서비스가 db 서비스가 시작된 후에 시작되도록 설정합니다. 이로 인해 데이터베이스가 준비될 때까지 웹 서버가 기다리도록 만들 수 있습니다.
종속성 관리하기
Docker Compose의 가장 큰 장점 중 하나는 다양한 서비스를 한 번에 쉽게 관리할 수 있다는 것입니다. 예를 들어, 위의 구성 파일을 사용하여 아래 명령어로 모든 서비스를 시작할 수 있습니다.
docker-compose up
이 명령어를 실행하면 Docker Compose는 필요한 이미지를 다운로드하고, 컨테이너를 생성 및 실행합니다. -d 플래그를 추가하면 백그라운드에서 실행 가능합니다.
docker-compose up -d
또한, 컨테이너의 상태를 확인하려면 다음 명령어를 사용할 수 있습니다.
docker-compose ps
환경 변수 사용하기
실제 애플리케이션에서는 환경 변수를 사용하여 설정을 관리하는 경우가 많습니다. Docker Compose 파일에서도 간단하게 환경 변수를 설정할 수 있습니다. 아래와 같이 .env 파일을 만들어 환경 변수를 설정하고 Docker Compose 파일에서 사용할 수 있습니다.
.env 파일 예시:
MYSQL_ROOT_PASSWORD=example
MYSQL_DATABASE=test_db
docker-compose.yml 파일 수정하기:
version: '3.8'
services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
이렇게 하면 보안성이 향상되고, 코드 관리가 쉬워집니다.
마무리
Docker Compose는 복잡한 애플리케이션의 종속성 문제를 해결하는 데 매우 유용한 도구입니다. 서비스 간의 관계를 정의하고, 환경 변수를 관리하며, 컨테이너를 통합적으로 운영할 수 있는 기능을 제공합니다. 이 글을 통해 Docker Compose를 효과적으로 사용하는 방법을 익히셨기를 바랍니다. 다양한 서비스를 조합하여 강력한 애플리케이션을 구축해 보세요!