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!

Geluid naar Tekst OnlineGeluid naar Tekst GratisGeluid naar Tekst ConverterGeluid naar Tekst MP3Geluid naar Tekst WAVGeluid naar Tekst met TijdstempelsSpraak naar tekst voor vergaderingenSound to Text Multi LanguageGeluid naar Tekst OndertitelsWAV naar tekst converterenStem naar TekstStem naar Tekst OnlineSpraak naar TekstMP3 naar Tekst ConverterenSpraakopname naar tekst converterenOnline SpraaktypenStem naar Tekst met TijdstempelsStem naar Tekst in RealtimeStem naar Tekst voor Lange AudioStem naar Tekst voor VideoSpraak naar Tekst voor YouTubeSpraak naar Tekst voor VideobewerkingSpraak naar Tekst voor OndertitelsSpraak naar Tekst voor PodcastsSpraak naar Tekst voor InterviewsInterview Audio naar TekstSpraak naar Tekst voor OpnamesSpraak naar Tekst voor VergaderingenSpraak naar Tekst voor CollegesSpraak naar Tekst voor NotitiesStem naar Tekst MeertaligStem naar Tekst NauwkeurigStem naar Tekst SnelPremiere Pro Stem naar Tekst AlternatiefDaVinci Stem naar Tekst AlternatiefVEED Stem naar Tekst AlternatiefInVideo Stem naar Tekst AlternatiefOtter.ai Stem naar Tekst AlternatiefDescript Stem naar Tekst AlternatiefTrint Stem naar Tekst AlternatiefRev Stem naar Tekst AlternatiefSonix Stem naar Tekst AlternatiefHappy Scribe Stem naar Tekst AlternatiefZoom Stem naar Tekst AlternatiefGoogle Meet Stem naar Tekst AlternatiefMicrosoft Teams Stem naar Tekst AlternatiefFireflies.ai Stem naar Tekst AlternatiefFathom Stem naar Tekst AlternatiefFlexClip Stem naar Tekst AlternatiefKapwing Stem naar Tekst AlternatiefCanva Stem naar Tekst AlternatiefSpraak naar Tekst voor Lange AudioAI Spraak naar TekstGratis Spraak naar TekstSpraak naar Tekst zonder ReclameSpraak naar Tekst voor Lawaaierige AudioSpraak naar Tekst met TijdOndertitels Genereren uit AudioPodcast Transcriptie OnlineKlantgesprekken TranscriberenTikTok Stem naar TekstTikTok Audio naar TekstYouTube Spraak naar TekstYouTube Audio naar TekstSpraakmemo naar TekstWhatsApp Spraakbericht naar TekstTelegram Spraakbericht naar TekstDiscord Oproep TranscriptieTwitch Spraak naar TekstSkype Spraak naar TekstMessenger Spraak naar TekstLINE Spraakbericht naar TekstVlogs naar Tekst TranscribenSermoen Audio naar Tekst ConverterenSpraak naar Schrijven ConverterenAudio naar Tekst VertalenAudio Notities naar Tekst ConverterenSpraak TypenSpraak Typen voor VergaderingenSpraak Typen voor YouTubeSpreek om te TypenHandenvrij TypenStem naar WoordenSpraak naar WoordenSpraak naar Tekst OnlineOnline Transcription SoftwareSpraak naar Tekst voor VergaderingenSnelle Spraak naar TekstReal Time Speech to TextLive Transcription AppSpraak naar Tekst voor TikTokGeluid naar Tekst voor TikTokPraten naar WoordenSpraak naar TekstTalk to Text FreeTalk to Text OnlineTalk to Text for YouTubeTalk to Text for SubtitlesTalk to Text for Content CreatorsTalk to Text for MeetingsAudio naar TypenGeluid naar TekstSpraak SchrijftoolSpraak SchrijftoolSpraakdicteeJuridische Transcriptie ToolMedische Dictatie ToolJapanse Audio TranscriptieKoreaanse Meeting TranscriptieMeeting Transcriptie ToolMeeting Audio naar TekstCollege naar Tekst ConverterCollege Audio naar TekstVideo naar Tekst TranscriptieOndertitel Generator voor TikTokCallcenter TranscriptieReels Audio naar Tekst ToolMP3 naar Tekst TranscriberenWAV-bestand naar tekst transcriberenCapCut Spraak naar TekstCapCut Spraak naar TekstVoice to Text in EnglishAudio naar Tekst EngelsVoice to Text in SpanishVoice to Text in FrenchAudio naar Tekst FransVoice to Text in GermanAudio naar Tekst DuitsVoice to Text in JapaneseAudio naar Tekst JapansVoice to Text in KoreanAudio naar Tekst KoreaansVoice to Text in PortugueseVoice to Text in ArabicVoice to Text in ChineseVoice to Text in HindiVoice to Text in RussianWeb Voice Typing ToolVoice Typing Website