# mlflow-full MLFlow docker container with support for Postgres. Implements extra environment variables for convenience. ## Running the Container ### Basic Usage ```bash # Run with default settings docker run -p 5000:5000 gitea.gt-proj.com/brian/mlflow-full:latest ``` ### With PostgreSQL Backend ```bash # Using environment variables docker run -p 5000:5000 \ -e MLFLOW_BACKEND_STORE_URI="postgresql://user:password@host:5432/mlflow" \ -e MLFLOW_DEFAULT_ARTIFACT_ROOT="s3://my-bucket/mlflow-artifacts" \ gitea.gt-proj.com/brian/mlflow-full:latest ``` ### Complete Example with Docker Compose ```yaml version: '3.8' services: postgres: image: postgres:15 environment: POSTGRES_DB: mlflow POSTGRES_USER: mlflow POSTGRES_PASSWORD: mlflow_password volumes: - postgres_data:/var/lib/postgresql/data ports: - "5432:5432" mlflow: image: gitea.gt-proj.com/brian/mlflow-full:latest ports: - "5000:5000" environment: MLFLOW_BACKEND_STORE_URI: postgresql://mlflow:mlflow_password@postgres:5432/mlflow MLFLOW_DEFAULT_ARTIFACT_ROOT: /mlflow/artifacts MLFLOW_HOST: 0.0.0.0 MLFLOW_PORT: 5000 volumes: - mlflow_artifacts:/mlflow/artifacts depends_on: - postgres volumes: postgres_data: mlflow_artifacts: ``` ### Environment Variables | Variable | Description | Default | |----------|-------------|---------| | `MLFLOW_BACKEND_STORE_URI` | Database connection string | `sqlite:///mlflow.db` | | `MLFLOW_DEFAULT_ARTIFACT_ROOT` | Artifact storage location | `./mlruns` | | `MLFLOW_HOST` | Host to bind the server | `0.0.0.0` | | `MLFLOW_PORT` | Port to bind the server | `5000` | ### Advanced Examples #### With S3 Artifact Storage ```bash docker run -p 5000:5000 \ -e MLFLOW_BACKEND_STORE_URI="postgresql://user:password@host:5432/mlflow" \ -e MLFLOW_DEFAULT_ARTIFACT_ROOT="s3://my-mlflow-bucket/artifacts" \ -e AWS_ACCESS_KEY_ID="your-access-key" \ -e AWS_SECRET_ACCESS_KEY="your-secret-key" \ -e AWS_DEFAULT_REGION="us-west-2" \ gitea.gt-proj.com/brian/mlflow-full:latest ``` #### With Custom Server Arguments ```bash docker run -p 5000:5000 \ -e MLFLOW_BACKEND_STORE_URI="postgresql://user:password@host:5432/mlflow" \ gitea.gt-proj.com/brian/mlflow-full:latest \ --host 0.0.0.0 \ --port 5000 \ --workers 4 \ --expose-prometheus /metrics ``` ### Kubernetes Deployment ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: mlflow-server spec: replicas: 1 selector: matchLabels: app: mlflow-server template: metadata: labels: app: mlflow-server spec: containers: - name: mlflow-server image: gitea.gt-proj.com/brian/mlflow-full:latest ports: - containerPort: 5000 env: - name: MLFLOW_BACKEND_STORE_URI value: "postgresql://mlflow:password@postgres-service:5432/mlflow" - name: MLFLOW_DEFAULT_ARTIFACT_ROOT value: "s3://mlflow-artifacts" --- apiVersion: v1 kind: Service metadata: name: mlflow-service spec: selector: app: mlflow-server ports: - port: 5000 targetPort: 5000 type: LoadBalancer ``` ## Features - 🐘 **PostgreSQL Support**: Pre-installed `psycopg2-binary` for PostgreSQL connectivity - 🏷️ **OCI Labels**: Fully compliant with OCI image specification - 🔄 **Auto-updates**: Daily builds when the base MLflow image is updated - 📦 **Lightweight**: Based on official MLflow container ## Building Locally ```bash # Clone the repository git clone https://gitea.gt-proj.com/brian/mlflow-full.git cd mlflow-full # Build the image docker build -t mlflow-full:local . # Run your local build docker run -p 5000:5000 mlflow-full:local ```