도커(Docker)는 애플리케이션을 컨테이너라는 독립적인 단위로 패키징하고 배포하는 데 매우 유용한 플랫폼입니다. 그러나 복잡한 멀티 컨테이너 애플리케이션을 구축할 때는 여러 개의 컨테이너를 조율하고 관리하는 것이 어려울 수 있습니다. 이 문제를 해결하기 위해 Docker Compose를 사용할 수 있습니다. 이번 글에서는 Docker Compose를 통해 복잡한 멀티 컨테이너 애플리케이션을 관리하는 과정을 살펴보겠습니다.
Docker Compose란?
Docker Compose는 여러 개의 도커 컨테이너를 정의하고 실행하기 위한 도구입니다. YAML 파일을 사용하여 애플리케이션의 서비스, 네트워크, 볼륨 등을 정의할 수 있으며, docker-compose 명령어를 통해 한 번에 모든 서비스를 시작하고 중지할 수 있습니다.
Docker Compose 설정하기
여러분이 간단한 웹 애플리케이션과 데이터베이스를 사용하는 예제를 통해 Docker Compose를 설정해보겠습니다. 이 예제에서는 Flask 웹 애플리케이션과 PostgreSQL 데이터베이스를 사용할 것입니다.
1. 디렉토리 구조 만들기
먼저 프로젝트 디렉토리를 생성합니다.
myapp/
├── app/
│ ├── Dockerfile
│ └── app.py
└── docker-compose.yml
2. Flask 애플리케이션 작성하기
app/app.py 파일을 생성하고 아래의 코드를 작성합니다.
from flask import Flask
import os
import psycopg2
app = Flask(__name__)
@app.route('/')
def hello():
conn = psycopg2.connect(
dbname=os.environ['POSTGRES_DB'],
user=os.environ['POSTGRES_USER'],
password=os.environ['POSTGRES_PASSWORD'],
host='db'
)
return "Hello, Docker Compose!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
3. Dockerfile 작성하기
app/Dockerfile 파일을 생성하고 아래의 내용을 작성합니다.
FROM python:3.8-slim
# 작업 디렉토리 설정
WORKDIR /app
# 의존성 설치
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
# 코드 복사
COPY . .
# 애플리케이션 실행
CMD ["python", "app.py"]
4. requirements.txt 파일 생성하기
Flask와 psycopg2를 설치하기 위해 app/requirements.txt 파일을 생성합니다.
Flask2.0.1
psycopg2-binary2.9.1
5. Docker Compose 파일 작성하기
마지막으로 docker-compose.yml 파일을 작성합니다.
version: '3.8'
services:
web:
build: ./app
ports:
- "5000:5000"
environment:
POSTGRES_DB: mydb
POSTGRES_USER: user
POSTGRES_PASSWORD: password
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_DB: mydb
POSTGRES_USER: user
POSTGRES_PASSWORD: password
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
6. Docker Compose 실행하기
이제 모든 설정이 완료되었습니다. 아래의 명령어를 통해 Docker Compose를 실행합니다.
docker-compose up --build
이 명령을 실행하면 Docker Compose가 두 개의 컨테이너를 생성하게 됩니다. 하나는 Flask 웹 애플리케이션을 위한 컨테이너이고, 다른 하나는 PostgreSQL 데이터베이스를 위한 컨테이너입니다.
7. 애플리케이션 테스트하기
브라우저에서 http://localhost:5000 주소에 접속하여 웹 애플리케이션이 잘 작동하는지 확인합니다. "Hello, Docker Compose!"라는 메시지가 나타나면 성공적으로 설정된 것입니다.
마무리
Docker Compose를 사용하면 복잡한 멀티 컨테이너 애플리케이션을 손쉽게 정의하고 관리할 수 있습니다. 이번 글에서는 Flask 웹 애플리케이션과 PostgreSQL 데이터베이스를 예로 들어 Docker Compose를 설정하는 방법을 살펴보았습니다. 다양한 서비스가 필요한 프로젝트에서 Docker Compose를 활용하면 개발 환경을 더욱 효율적으로 관리할 수 있습니다. 앞으로도 다양한 도커와 DevOps 관련 기술을 탐구해보시기 바랍니다.