Whisper Docker-setup: complete gids voor OpenAI Whisper in Docker

Whisper Docker-setup: complete gids voor OpenAI Whisper in Docker

Eric King

Eric King

Author


Inleiding

OpenAI Whisper in Docker-containers draaien geeft een consistente, geïsoleerde omgeving die implementatie vereenvoudigt en problemen zoals «het werkt op mijn machine» voorkomt. Met Docker kunt u:
  • Overal uitrollen – dezelfde container op elk Docker-compatibel platform
  • Afhankelijkheden isoleren – conflicten met systeempakketten vermijden
  • Eenvoudig schalen – meerdere containers voor parallelle verwerking
  • Versies beheren – specifieke Whisper-versies en configuraties vastzetten
  • Implementatie vereenvoudigen – één commando voor alles
Deze gids behandelt alles wat u nodig heeft om Whisper in Docker in te richten, van basiscontainers tot productieklare configuraties met GPU-ondersteuning.

Waarom Docker voor Whisper?

Voordelen van containerisatie

1. Consistentie
  • dezelfde omgeving in ontwikkeling, staging en productie
  • geen afhankelijkheidsconflicten
  • reproduceerbare builds
2. Portabiliteit
  • draaien op elk platform met Docker
  • eenvoudige migratie tussen servers
  • cloud-onafhankelijke implementatie
3. Isolatie
  • geen interferentie met het hostsysteem
  • schone verwijdering (container verwijderen)
  • veiligheid door isolatie
4. Schaalbaarheid
  • horizontaal schalen is eenvoudig
  • load balancing over containers
  • resource-limieten per container
5. DevOps-integratie
  • past in CI/CD-pipelines
  • Kubernetes-klaar
  • geschikt voor cloud-implementaties

Vereisten

Zorg voordat u begint dat u het volgende heeft:
  • Docker geïnstalleerd (versie 20.10+)
  • Docker Compose (optioneel, voor multi-container setups)
  • NVIDIA Docker (optioneel, voor GPU-ondersteuning)
  • basiskennis van Docker-commando’s

Docker installeren

macOS:
# Install Docker Desktop from docker.com
# Or using Homebrew
brew install --cask docker
Ubuntu/Debian:
sudo apt update
sudo apt install docker.io docker-compose
sudo systemctl start docker
sudo systemctl enable docker
Windows: Download Docker Desktop van docker.com

Installatie controleren

docker --version
docker-compose --version

Basis-Dockerfile voor Whisper

We beginnen met een eenvoudig Dockerfile voor Whisper:
FROM python:3.10-slim

# Set working directory
WORKDIR /app

# Install system dependencies
RUN apt-get update && apt-get install -y \
    ffmpeg \
    git \
    && rm -rf /var/lib/apt/lists/*

# Install Python dependencies
RUN pip install --no-cache-dir \
    openai-whisper \
    torch \
    torchaudio

# Copy application code (if you have custom scripts)
# COPY . .

# Set default command
CMD ["whisper", "--help"]

Image bouwen

docker build -t whisper:latest .

Basiscontainer uitvoeren

docker run --rm whisper:latest whisper --version

Dockerfile met API-server

Voor productie wilt u vaak een API-server. Hier is een vollediger Dockerfile:
FROM python:3.10-slim

WORKDIR /app

# Install system dependencies
RUN apt-get update && apt-get install -y \
    ffmpeg \
    git \
    curl \
    && rm -rf /var/lib/apt/lists/*

# Install Python dependencies
RUN pip install --no-cache-dir \
    openai-whisper \
    torch \
    torchaudio \
    fastapi \
    uvicorn \
    python-multipart

# Create directories for audio and output
RUN mkdir -p /app/audio /app/output

# Copy application code
COPY app.py .
COPY requirements.txt .

# Expose API port
EXPOSE 8000

# Health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
    CMD curl -f http://localhost:8000/health || exit 1

# Run API server
CMD ["uvicorn", "app.py:app", "--host", "0.0.0.0", "--port", "8000"]

Voorbeeld-API-server (app.py)

from fastapi import FastAPI, File, UploadFile
from fastapi.responses import JSONResponse
import whisper
import os

app = FastAPI()

# Load Whisper model (can be configured via env)
model_name = os.getenv("WHISPER_MODEL", "base")
model = whisper.load_model(model_name)

@app.get("/health")
def health():
    return {"status": "healthy"}

@app.post("/transcribe")
async def transcribe(file: UploadFile = File(...)):
    # Save uploaded file
    file_path = f"/app/audio/{file.filename}"
    with open(file_path, "wb") as f:
        content = await file.read()
        f.write(content)
    
    # Transcribe
    result = model.transcribe(file_path)
    
    # Clean up
    os.remove(file_path)
    
    return JSONResponse(content={
        "text": result["text"],
        "language": result["language"]
    })

requirements.txt

fastapi==0.104.1
uvicorn[standard]==0.24.0
python-multipart==0.0.6
openai-whisper
torch
torchaudio

Docker Compose-setup

Voor een complete setup met meerdere services gebruikt u Docker Compose:

docker-compose.yml

version: '3.8'

services:
  whisper-api:
    build: .
    container_name: whisper-api
    ports:
      - "8000:8000"
    volumes:
      - ./audio:/app/audio
      - ./output:/app/output
    environment:
      - WHISPER_MODEL=base
      - CUDA_VISIBLE_DEVICES=0
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

  # Optional: Redis for queue management
  redis:
    image: redis:7-alpine
    container_name: whisper-redis
    ports:
      - "6379:6379"
    volumes:
      - redis-data:/data
    restart: unless-stopped

volumes:
  redis-data:

Uitvoeren met Docker Compose

# Start services
docker-compose up -d

# View logs
docker-compose logs -f whisper-api

# Stop services
docker-compose down

GPU-ondersteuning met Docker

Voor GPU-acceleratie heeft u de NVIDIA Docker-runtime nodig:

NVIDIA Docker installeren

Ubuntu/Debian:
# Add NVIDIA Docker repository
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
    sudo tee /etc/apt/sources.list.d/nvidia-docker.list

# Install
sudo apt-get update
sudo apt-get install -y nvidia-docker2
sudo systemctl restart docker

Dockerfile met GPU-ondersteuning

FROM nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04

WORKDIR /app

# Install Python
RUN apt-get update && apt-get install -y \
    python3.10 \
    python3-pip \
    ffmpeg \
    git \
    curl \
    && rm -rf /var/lib/apt/lists/*

# Install Python dependencies with CUDA support
RUN pip3 install --no-cache-dir \
    openai-whisper \
    torch \
    torchaudio \
    --index-url https://download.pytorch.org/whl/cu118

# Install API dependencies
RUN pip3 install --no-cache-dir \
    fastapi \
    uvicorn \
    python-multipart

COPY app.py .
EXPOSE 8000

CMD ["uvicorn", "app.py:app", "--host", "0.0.0.0", "--port", "8000"]

Uitvoeren met GPU

# Using docker run
docker run --gpus all -p 8000:8000 whisper-gpu:latest

# Using docker-compose

docker-compose.yml met GPU

version: '3.8'

services:
  whisper-api:
    build: .
    container_name: whisper-api-gpu
    runtime: nvidia
    environment:
      - NVIDIA_VISIBLE_DEVICES=all
    ports:
      - "8000:8000"
    volumes:
      - ./audio:/app/audio
      - ./output:/app/output
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]

Geoptimaliseerd Dockerfile voor productie

Hier is een productieklare Dockerfile met optimalisaties:
# Multi-stage build for smaller image
FROM python:3.10-slim as builder

WORKDIR /app

# Install build dependencies
RUN apt-get update && apt-get install -y \
    gcc \
    g++ \
    git \
    && rm -rf /var/lib/apt/lists/*

# Install Python packages
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt

# Final stage
FROM python:3.10-slim

WORKDIR /app

# Install runtime dependencies only
RUN apt-get update && apt-get install -y \
    ffmpeg \
    curl \
    && rm -rf /var/lib/apt/lists/* \
    && apt-get clean

# Copy Python packages from builder
COPY --from=builder /root/.local /root/.local

# Make sure scripts in .local are usable
ENV PATH=/root/.local/bin:$PATH

# Create non-root user for security
RUN useradd -m -u 1000 whisper && \
    mkdir -p /app/audio /app/output && \
    chown -R whisper:whisper /app

USER whisper

# Copy application code
COPY --chown=whisper:whisper app.py .
COPY --chown=whisper:whisper requirements.txt .

EXPOSE 8000

HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
    CMD curl -f http://localhost:8000/health || exit 1

CMD ["uvicorn", "app.py:app", "--host", "0.0.0.0", "--port", "8000"]

Voordelen van multi-stage build

  • Kleinere image – alleen runtime-afhankelijkheden in de uiteindelijke image
  • Snellere builds – build-afhankelijkheden apart cachen
  • Betere veiligheid – non-root-gebruiker, kleinere aanvalsvector

Omgevingsvariabelen

Maak uw Docker-setup configureerbaar met omgevingsvariabelen:

Dockerfile

FROM python:3.10-slim

WORKDIR /app

RUN apt-get update && apt-get install -y \
    ffmpeg \
    git \
    curl \
    && rm -rf /var/lib/apt/lists/*

RUN pip install --no-cache-dir \
    openai-whisper \
    torch \
    torchaudio \
    fastapi \
    uvicorn \
    python-multipart

COPY app.py .

# Environment variables with defaults
ENV WHISPER_MODEL=base
ENV MAX_FILE_SIZE=100MB
ENV LOG_LEVEL=INFO

EXPOSE 8000

CMD ["uvicorn", "app.py:app", "--host", "0.0.0.0", "--port", "8000"]

docker-compose.yml met omgevingsvariabelen

version: '3.8'

services:
  whisper-api:
    build: .
    ports:
      - "8000:8000"
    volumes:
      - ./audio:/app/audio
      - ./output:/app/output
    environment:
      - WHISPER_MODEL=small
      - MAX_FILE_SIZE=200MB
      - LOG_LEVEL=DEBUG
      - CUDA_VISIBLE_DEVICES=0
    env_file:
      - .env
    restart: unless-stopped

.env-bestand

WHISPER_MODEL=small
MAX_FILE_SIZE=200MB
LOG_LEVEL=INFO
CUDA_VISIBLE_DEVICES=0

Volumbeheer

Juiste volumeconfiguratie zorgt voor gegevenspersistentie:

docker-compose.yml met volumes

version: '3.8'

services:
  whisper-api:
    build: .
    ports:
      - "8000:8000"
    volumes:
      # Bind mount for development
      - ./audio:/app/audio
      - ./output:/app/output
      
      # Named volume for model cache (persists across containers)
      - whisper-models:/root/.cache/whisper
      
      # Config volume
      - ./config:/app/config:ro
    environment:
      - WHISPER_MODEL=base

volumes:
  whisper-models:
    driver: local

Voordelen

  • Modelcache – modellen één keer downloaden, hergebruik tussen containers
  • Gegevenspersistentie – uitvoerbestanden overleven containerherstarts
  • Configuratie – configs bijwerken zonder opnieuw te bouwen

Health checks en monitoring

Dockerfile met health check

FROM python:3.10-slim

WORKDIR /app

RUN apt-get update && apt-get install -y \
    ffmpeg \
    curl \
    && rm -rf /var/lib/apt/lists/*

RUN pip install --no-cache-dir \
    openai-whisper \
    fastapi \
    uvicorn

COPY app.py .

# Health check endpoint
HEALTHCHECK --interval=30s \
            --timeout=10s \
            --start-period=40s \
            --retries=3 \
            CMD curl -f http://localhost:8000/health || exit 1

EXPOSE 8000
CMD ["uvicorn", "app.py:app", "--host", "0.0.0.0", "--port", "8000"]

Health-check-endpoint

from fastapi import FastAPI
import whisper

app = FastAPI()
model = whisper.load_model("base")

@app.get("/health")
def health():
    try:
        # Quick test transcription
        return {"status": "healthy", "model": "base"}
    except Exception as e:
        return {"status": "unhealthy", "error": str(e)}, 503

Veelvoorkomende use cases

Use case 1: ontwikkelomgeving

version: '3.8'

services:
  whisper-dev:
    build:
      context: .
      dockerfile: Dockerfile.dev
    volumes:
      - .:/app
      - /app/__pycache__
    ports:
      - "8000:8000"
    environment:
      - WHISPER_MODEL=tiny
      - DEBUG=true
    command: uvicorn app.py:app --reload --host 0.0.0.0 --port 8000

Use case 2: productie met wachtrij

version: '3.8'

services:
  whisper-api:
    build: .
    ports:
      - "8000:8000"
    environment:
      - REDIS_URL=redis://redis:6379
      - WHISPER_MODEL=small
    depends_on:
      - redis
      - worker

  worker:
    build: .
    command: python worker.py
    environment:
      - REDIS_URL=redis://redis:6379
      - WHISPER_MODEL=small
    volumes:
      - ./audio:/app/audio
    depends_on:
      - redis

  redis:
    image: redis:7-alpine
    volumes:
      - redis-data:/data

volumes:
  redis-data:

Use case 3: multi-model setup

version: '3.8'

services:
  whisper-fast:
    build: .
    ports:
      - "8001:8000"
    environment:
      - WHISPER_MODEL=tiny
      - PORT=8000

  whisper-balanced:
    build: .
    ports:
      - "8002:8000"
    environment:
      - WHISPER_MODEL=base
      - PORT=8000

  whisper-accurate:
    build: .
    ports:
      - "8003:8000"
    environment:
      - WHISPER_MODEL=large
      - PORT=8000

Best practices

1. Specifieke basisimages gebruiken

Slecht:
FROM python:latest
Goed:
FROM python:3.10-slim

2. Lagen minimaliseren

Slecht:
RUN apt-get update
RUN apt-get install -y ffmpeg
RUN apt-get install -y git
Goed:
RUN apt-get update && apt-get install -y \
    ffmpeg \
    git \
    && rm -rf /var/lib/apt/lists/*

3. .dockerignore gebruiken

Maak .dockerignore:
__pycache__
*.pyc
*.pyo
*.pyd
.Python
.env
.venv
venv/
.git
.gitignore
README.md
*.md
.DS_Store

4. Resourcelimieten instellen

services:
  whisper-api:
    build: .
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 4G
        reservations:
          cpus: '1'
          memory: 2G

5. Health checks gebruiken

Neem altijd health checks op voor productiecontainers:
HEALTHCHECK --interval=30s --timeout=10s CMD curl -f http://localhost:8000/health || exit 1

6. Non-root-gebruiker

Draai containers als non-root:
RUN useradd -m -u 1000 whisper
USER whisper

7. Modellen cachen

Gebruik volumes om gedownloade modellen te cachen:
volumes:
  - whisper-models:/root/.cache/whisper

Veelvoorkomende problemen oplossen

Probleem 1: container stopt direct

Probleem: container start en stopt meteen
Oplossing:
# Check logs
docker logs <container-id>

# Run interactively to debug
docker run -it whisper:latest /bin/bash

Probleem 2: GPU niet beschikbaar

Probleem: GPU wordt niet gedetecteerd in de container
Oplossing:
# Verify NVIDIA Docker
docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi

# Check runtime
docker info | grep -i runtime

Probleem 3: geen geheugen meer

Probleem: container raakt zonder geheugen
Oplossing:
# Increase memory limit
deploy:
  resources:
    limits:
      memory: 8G

Probleem 4: trage modeldownload

Probleem: modellen worden bij elke start opnieuw gedownload
Oplossing:
# Use volume for model cache
volumes:
  - whisper-models:/root/.cache/whisper

Probleem 5: toegang geweigerd

Probleem: kan niet naar volumes schrijven
Oplossing:
# Fix permissions in Dockerfile
RUN chown -R whisper:whisper /app

Prestatie-optimalisatie

1. Model voorladen

Laad modellen voor in het Dockerfile:
# Download model during build
RUN python -c "import whisper; whisper.load_model('base')"

2. Faster-Whisper gebruiken

Voor betere prestaties: faster-whisper:
RUN pip install --no-cache-dir faster-whisper

3. Multithreading

Configureer worker-processen:
CMD ["uvicorn", "app.py:app", "--host", "0.0.0.0", "--port", "8000", "--workers", "4"]

4. Resource-toewijzing

Wijs passende resources toe:
deploy:
  resources:
    limits:
      cpus: '4'
      memory: 8G

Beveiliging

1. Officiële basisimages gebruiken

FROM python:3.10-slim  # Official Python image

2. Scannen op kwetsbaarheden

docker scan whisper:latest

3. Images bijwerken

Werk basisimages en afhankelijkheden regelmatig bij:
FROM python:3.10-slim  # Use latest patch version
RUN pip install --upgrade pip

4. Netwerktoegang beperken

services:
  whisper-api:
    build: .
    networks:
      - internal
    # No external ports if accessed via reverse proxy

Conclusie

Whisper in Docker zetten levert een robuuste, schaalbare oplossing voor spraak-naar-teksttranscriptie. Belangrijkste punten:
  1. Eenvoudig beginnen – met een basis-Dockerfile
  2. Docker Compose gebruiken – multi-service setups vereenvoudigen
  3. GPU inschakelen – voor productieprestaties
  4. Best practices volgen – beveiliging, optimalisatie, monitoring
  5. Grondig testen – vóór productie-implementatie
Met een goede Docker-setup kunt u Whisper consistent in elke omgeving uitrollen, van lokale ontwikkeling tot cloudproductie.

Volgende stappen

  • Bouw uw eerste container – begin met het basis-Dockerfile
  • Voeg GPU-ondersteuning toe – als u NVIDIA-GPU’s heeft
  • Stel Docker Compose in – voor de volledige applicatiestack
  • Deploy naar de cloud – containerdiensten (ECS, GKE, AKS)
Voor meer implementatiestrategieën, zie onze gidsen Whisper Cloud Deployment en Whisper API vs Local Deployment.

Probeer het nu gratis

Probeer nu onze AI‑oplossing voor spraak, audio en video. Je profiteert niet alleen van zeer nauwkeurige spraak‑naar‑tekst‑transcriptie, meertalige vertaling en slimme sprekerherkenning, maar ook van automatische ondertitelgeneratie voor video, intelligente audio‑ en videobewerking en gesynchroniseerde audio‑visuele analyse. Het dekt alle scenario’s: vergaderverslagen, short‑video creatie, podcastproductie en meer. Start vandaag nog je gratis proefperiode!