Een AI-applicatie die lokaal werkt maar in productie crasht vanwege afhankelijkheidsproblemen is een klassiek scenario. Containerisatie lost dat op: je verpakt je applicatie inclusief alle afhankelijkheden in een image die overal hetzelfde draait.
Docker is al jaren de standaard voor het containeriseren van webapplicaties. Voor AI-applicaties gelden dezelfde voordelen, maar er zijn extra overwegingen: grotere images vanwege ML-bibliotheken, GPU-ondersteuning bij on-premise modellen, en de manier waarop je omgevingsvariabelen en secrets injecteert. Dit artikel beschrijft de aanpak.
Containerisatie biedt drie hoofdvoordelen:
Voor AI-applicaties is reproduceerbaarheid extra waardevol: ML-bibliotheken hebben complexe afhankelijkheden en kleine versieverschillen kunnen leiden tot andere modelgedrag of crashes.
Een eenvoudige Dockerfile ziet er zo uit:
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "main.py"]
Gebruik slim-images om de imagegrootte te beperken. Installeer dependencies voor het kopiëren van de rest van de code zodat Docker de layer kan cachen: als je code verandert maar je dependencies niet, hoeft Docker alleen de bovenste laag opnieuw te bouwen.
Als je modellen lokaal draait op een GPU, heb je een andere base image nodig. NVIDIA biedt nvidia/cuda-images die CUDA-ondersteuning bevatten. Combineer dat met torch of transformers voor de modelinfrastructuur.
GPU-containers vereisen ook dat de Docker runtime op de host GPU-toegang heeft. Bij NVIDIA GPU's gebruik je de NVIDIA Container Toolkit. In een Kubernetes-omgeving gebruik je de device plugin van NVIDIA.
Dit is complexer dan gewone CPU-containers en vereist specifieke infrastructuur. Zorg dat je dit vroeg in het project uitzoekt, niet op het moment van deployment.
Secrets nooit in de Docker image bakken. Injecteer ze altijd bij runtime via:
docker run -e OPENAI_API_KEY=... myapp.env-bestand via docker run --env-file .env myappControleer je .dockerignore-bestand: het moet je .env-bestand uitsluiten zodat dat niet per ongeluk in de image belandt.
Voor productie wil je zo klein mogelijke images. Multi-stage builds helpen daarbij: je bouwt in een grote builder-image en kopieert alleen de benodigde bestanden naar een slanke productie-image.
FROM python:3.11 AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt
FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY . .
CMD ["python", "main.py"]
Eenmaal gecreëerd, kun je Docker images deployen via:
Voor de meeste kleinere AI-applicaties is een managed service zoals Cloud Run de meest eenvoudige keuze: je pusht een image en het platform regelt de rest.
Voeg een health check endpoint toe aan je applicatie zodat het platform kan controleren of de container gezond is. Bij AI-applicaties kan opstarttijd langer zijn door het laden van modellen of het initialiseren van verbindingen.
Implementeer ook graceful shutdown: zorg dat lopende AI-aanroepen worden afgerond voordat de container stopt, in plaats van abrupt afgebroken te worden.
Containerisatie is geen luxe maar een professionele standaard voor AI-applicaties in productie. Bij Mach8 deployen we AI-systemen standaard via containers zodat ze reproduceerbaar, draagbaar en eenvoudig bij te werken zijn.
Wil je weten hoe Mach8 AI-applicaties naar productie brengt? Bekijk onze AI-agents service of neem contact op.
Wij helpen je van strategie naar implementatie. Plan een vrijblijvend gesprek.
Plan een gesprek