De CI-pijplijn ging van twaalf naar vier minuten: het team schakelde over naar php:8.3-alpine, verwijderde de geschikte lagen en verkleinde de afbeelding van 680 MB naar 95 MB. De fusie wordt gevierd. Drie dagen later laadt de GD-extensie niet langer een TrueType-lettertype (musl en bibliotheken ontbreken) en produceert de miniatuurgenerator lege PNG's.
Lichtgewicht afbeeldingen versnel trekken, inzetten en koude start. Ze vereenvoudigen uw aanvraag niet automatisch. Het verwarren van “klein Dockerfile” en “stack inbegrepen” leidt tot images die snel opstarten maar geruisloos mislukken in een productierandgeval.
Grootte, lagen en wat echt tijd kost
Docker verzendt incrementele lagen. Een "zware" image met een goede lokale cache kan sneller worden geïmplementeerd dan een "lichte" image die alles bij elke commit ongeldig maakt, omdat COPY. . is te hoog geplaatst.
| Hendel | Typische winst | Risico |
|---|---|---|
| Alpenbasis/slank | −50 tot 80% grootte | Libc-incompatibiliteiten, ontbrekende pakketten |
| Multi-stage | Toolchain uit runtime verwijderen | Vergeet een runtime-lib (ssl, tzdata) |
| .dockerignore | Stabielere cache | Sluit een vereist bestand uit van de build |
| Combineert RUN apt | Minder lagen | Afbeeldingen moeilijk regel voor regel te patchen |
Meet de pull + starttijd op uw register en uw host - niet alleen op docker-images lokaal.
Een slecht getest lichtgewicht image besteedt de kosten van nachtelijke foutopsporing uit.
Meertraps: afzonderlijke build en runtime
Klassiek PHP/Node-patroon:
- Stage builder: composer-installatie, npm run build, compilatie-extensies.
- Stage runtime: kopieer
vendor/,public/build/, alleen gecompileerde binaire bestanden.
Vermijd het kopiëren van .git, tests, node_modules dev of documentatie. Controleer of de PHP-runtime-extensies (pdo_mysql, intl, opcache) zijn geïnstalleerd in de final, en niet alleen in builder.
Bij hosting met een privéregister (Scaleway, GitLab, Harbor) verlagen compacte eindimages ook de rekening voor opslag en uitgaand verkeer, vooral met tien microservices.
Alpine, slank, distributieloos: kies voor de libc
Alpine (musl): zeer klein, pakketten via apk. Veelvoorkomende problemen met wkhtmltopdf, sommige PECL-extensies, glibc-gerelateerde binaire bestanden.
Debian/Ubuntu slim (glibc): een iets zwaarder, voorspelbaarder ecosysteem voor PHP en Python.
Distroless / scratch: minimaal, vaak zonder shell — uitstekend voor Go of Java, veeleisender voor PHP-FPM waar foutopsporing telt.
Minimale testmatrix: opstarten van containers, statuscheck, kritisch bedrijfspad (upload afbeelding, PDF, TLS API-oproep).
.dockerignore en verborgen afhankelijkheden – de verkeerde kant op
Een overdreven agressieve .dockerignore die composer.lock of configuratiebestanden uitsluit, dwingt een impliciete composer update af voor de build - "lichtgewicht" afbeelding, niet-reproduceerbare builds.
Omgekeerd vergroot het opnemen van de volledige opslagplaats zonder te negeren de context die naar de daemon wordt verzonden en wordt de cache bij elke documentcommit verbroken.
Geef expliciet aan wat er in de context komt: lockfiles, patches, aangepaste extensies. Documenteer de vereiste systeembibliotheken in het Dockerbestand (commentaar + RUN apk add --no-cache...).
Beveiliging, CVE en “nieuwste” afbeeldingen
FROM node:latest of php:8-apache zonder een gepatchte tag wordt opgeblazen en vertroebelt updates. Pin php:8.3.12-fpm-bookworm en automatiseer het opnieuw opbouwen op CVE.
Scan (Trivy, Grype) op de uiteindelijke afbeelding – niet alleen op het Dockerbestand. Een minimalistische alpenbasis met een kwetsbare opensl blijft een risico.
De top: de lichtheid die onbegrip maskeert
Tijd besparen tijdens het pullen is waardeloos als je een uur mentaal verspilt aan het opnieuw opbouwen van wat het oude Debian-image impliciet had geïnstalleerd.
Beslis en ga vooruit zonder blinde vlek
Documenteer runtime-libs, adopteer meertraps, zet de basis vast, test rook in CI. Vergelijk alpine versus slim op uw stack, niet op een generieke benchmark.
Om register-, CI-runners en Docker VPS in Europa te hosten, zie onze overzicht en vergelijker. De gidsen hebben betrekking op het inlijsten van containers.
Controlelijst vrijgeven: blanco afbeelding ophalen, gezondheid uitvoeren, een bedrijfsscenario uitvoeren, CVE-scan uitvoeren – voordat u de bespaarde megabytes viert.
Veelgestelde vragen
Is Alpine nog steeds de juiste keuze voor een licht beeld?
Nee - test musl vs glibc voor je stapel; debian-slim of distroless zijn mogelijk stabieler.
Wat levert een meerfasige build op?
Scheidt compilatie en runtime; de uiteindelijke afbeelding bevat niet de toolchain.
Hoe kan ik de pull versnellen zonder de veiligheid te verminderen?
Cachelagen, .dockerignore, vastgezette tags: snelheid komt zowel van de cache als van de grootte.
Heb ik een schaal nodig in de productieimage?
Afweging van debuggen versus aanvalsoppervlak; kies op basis van uw externe waarneembaarheidsvermogen.
Een licht beeld wordt beoordeeld door inzet op vrijdagavond – niet door ‘docker images’ op maandagochtend.
