⏱ 6 min. lezen container image concepten

Containers en images: het verschil dat iedereen door elkaar haalt

“Image” en “container” worden vaak als synoniemen gebruikt, maar zijn fundamenteel verschillend. Dit is hoe lagen, registries en runtimes precies samenwerken.

Bijna elk certificeringsexamen op het gebied van cloud-native technologie test of je het verschil kent tussen een image en een container. Het klinkt eenvoudig, maar de details zijn de moeite waard.

IMAGE (lagen) Laag 4: jouw applicatiecode Laag 3: dependencies Laag 2: runtime (bijv. Node.js) Laag 1: basis-OS-bestanden alleen-lezen, herbruikbaar tussen images run Container image-lagen + 1 schrijfbare laag geïsoleerd via namespaces/cgroups Draaiend proces

Een image is een blauwdruk, alleen-lezen

Een container-image bestaat uit meerdere op elkaar gestapelde, alleen-lezen lagen: het basisbesturingssysteem, een runtime, dependencies, en tot slot je eigen applicatiecode. Elke laag wordt apart opgeslagen, wat betekent dat meerdere images dezelfde onderliggende lagen kunnen hergebruiken — dat bespaart opslag en maakt downloaden sneller (alleen nieuwe lagen hoeven opgehaald te worden).

Een container is een draaiend proces

Zodra je een image daadwerkelijk start, voegt de container-runtime er één schrijfbare laag aan toe, en isoleert het proces met behulp van twee Linux-kernelfuncties:

  • Namespaces — zorgen dat een proces zijn eigen geïsoleerde kijk heeft op netwerk, procestabel, bestandssysteem, enzovoort — het "denkt" dat het de machine alleen heeft.
  • Cgroups (control groups) — beperken hoeveel CPU en geheugen een proces mag gebruiken, zodat één container niet de hele host kan opeisen.

Kortom: images zijn statisch en herbruikbaar; containers zijn de vluchtige, draaiende instanties daarvan. Stop je een container en verwijder je hem, dan verdwijnt ook de schrijfbare laag — de onderliggende image blijft intact en kan opnieuw gebruikt worden om een nieuwe container te starten.

De rol van een registry

Een registry (zoals Docker Hub of Harbor) is waar images worden opgeslagen en gedeeld. Het proces is altijd: build een image lokaal → push naar een registry → pull die op een andere machine of in een cluster → run om er een container van te maken.

Examentip: Zie je de vraag "wat gebeurt er met wijzigingen in een container als je hem verwijdert zonder ze te committen naar een nieuwe image?" — het antwoord is: ze gaan verloren, want die wijzigingen leefden alleen in de tijdelijke schrijfbare laag.