MLflow는 머신러닝 실험(Experiment) 관리 도구로, 모델 학습 실험 기록을 체계적으로 저장하고 추적할 수 있게 해줍니다.
이때 MLflow가 저장하는 메타데이터(모델 이름, 파라미터, 실험 결과 등)를 관리하기 위해 백엔드 저장소(Backend Store) 로 MySQL을 자주 사용합니다.
이 글에서는 Docker Compose를 사용해
- mlflow 서버
- mysql 데이터베이스
두 컨테이너를 한 번에 실행하는 환경을 구성합니다.
docker-compose.yml
services:
mlflow:
image: ghcr.io/mlflow/mlflow:v2.20.2
container_name: mlflow
ports:
- "5000:5000"
volumes:
- ./mlruns:/mlflow/mlruns
environment:
- GIT_PYTHON_REFRESH=quiet
- MLFLOW_TRACKING_URI=http://0.0.0.0:5000
- BACKEND_STORE_URI=mysql+pymysql://root:rootpassword@db/mlflow
command: >
/bin/sh -c "pip install pymysql cryptography &&
mlflow server --backend-store-uri mysql+pymysql://root:rootpassword@db/mlflow \
--default-artifact-root /mlflow/mlruns --host 0.0.0.0 --port 5000"
depends_on:
- db
db:
image: mysql:8.0
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: mlflow
ports:
- "3307:3306"
volumes:
- ./db_data:/var/lib/mysql
서비스 개요
| 서비스 | 역할 | 주요 포트 | 데이터 저장 경로 |
| mlflow | 실험 추적 및 관리 서버 | 5000 | ./mlruns |
| db (MySQL) | MLflow 메타데이터 저장용 DB | 3307 → 3306 | ./db_data |
주요 설정
| 설정 항목 | 내용 | 비고 |
| image | ghcr.io/mlflow/mlflow:v2.20.2 / mysql:8.0 | MLflow와 MySQL 공식 이미지 |
| ports | 5000:5000, 3307:3306 | 로컬 3306 충돌 방지를 위해 MySQL은 3307 사용 |
| volumes | ./mlruns, ./db_data | 컨테이너 삭제 시에도 데이터 유지 |
| BACKEND_STORE_URI | mysql+pymysql://root:rootpassword@db/mlflow | MLflow가 MySQL DB와 연결되는 URI |
| depends_on | db | MLflow 실행 전에 DB가 먼저 구동되도록 설정 |
실행 명령어 해석
| 명령어 | 설명 |
| /bin/sh -c | 컨테이너 시작 시 쉘 명령어 실행 |
| pip install pymysql cryptography | MySQL 연동과 보안 패키지 설치 |
| mlflow server --backend-store-uri ... | MLflow 서버 구동 명령 |
| --default-artifact-root /mlflow/mlruns | 실험 결과 저장 경로 |
| --host 0.0.0.0 --port 5000 | 외부 접근 허용 및 포트 설정 |
정리하면
- 이번 구성은 MLflow 서버와 MySQL 데이터베이스를 Docker Compose로 함께 실행하는 방법을 다루었습니다.
MLflow는 머신러닝 실험을 관리하고 추적하는 서버로, 실험 결과를 로컬 디렉터리(./mlruns)에 저장하며,
실험 메타데이터(파라미터, 성능 지표 등)는 MySQL 데이터베이스(./db_data)에 보관합니다. - 로컬 환경에서 이미 MySQL이 3306 포트를 사용 중일 수 있기 때문에,
이 설정에서는 호스트 포트 3307을 MySQL 컨테이너 내부의 3306 포트로 매핑하여 충돌을 피했습니다.
MLflow는 5000번 포트로 열리며, 브라우저에서 http://localhost:5000 으로 접근할 수 있습니다. - 백엔드 저장소 URI는 mysql+pymysql://root:rootpassword@db/mlflow 형식으로 지정되어,
MLflow가 내부 네트워크에서 db(MySQL 컨테이너 이름)로 접근하도록 설정되어 있습니다.
컨테이너 간 통신은 Docker Compose 네트워크를 통해 자동으로 이루어지므로 별도의 네트워크 설정은 필요하지 않습니다. - 마지막으로, docker compose up -d 명령으로 컨테이너를 실행하고,
docker compose down 으로 중지할 수 있으며,
데이터까지 완전히 초기화하려면 docker compose down -v 명령을 사용합니다. - 이 구성을 통해 MLflow 실험 관리 환경을 손쉽게 컨테이너 기반으로 재현할 수 있으며,
로컬 환경에서도 안정적으로 실험 로그를 저장하고 관리할 수 있습니다.
'MLOps·머신러닝 운영 > MLflow를 활용한 머신러닝 실험 관리' 카테고리의 다른 글
| MLflow Tracking 실험 관리 — 파라미터, 메트릭, 아티팩트, 태그 기록하기 (1) | 2025.10.22 |
|---|---|
| MLflow Run (0) | 2025.10.22 |
| MLflow Autolog 확장하기: Custom Logging으로 세부 실험 데이터 관리 (0) | 2025.10.21 |
| MLflow로 랜덤포레스트 분류 모델 자동 추적하기 (0) | 2025.10.21 |
| MLflow 설치와 환경 구축 실습 가이드 (0) | 2025.10.20 |