Wat is containerisatie en hoe werkt het?

Containerisatie is een steeds populairder concept in de wereld van de softwareontwikkeling. Deze techniek, die veel lichter is dan de traditionele virtuele machines, maakt het mogelijk om toepassingen en hun afhankelijkheden te groeperen en te beheren in afzonderlijke containers die van elkaar geïsoleerd zijn. Containerisatie moet worden gezien als een systeem van lagen. Eerst het OS, dan de benodigde functionaliteit.

Net als virtualisatie beoogt containerisatie het isoleren van toepassingen in een specifieke omgeving. De visie is echter meer atomair en beoogt de omvang van diensten zoveel mogelijk te beperken door ze van elkaar te isoleren, terwijl virtualisatie eerder een ecosysteem als geheel zou beschouwen.

In tegenstelling tot virtualisatie heeft containerisatie het voordeel dat er geen nieuw gevirtualiseerd systeem hoeft te worden geïnstalleerd en geconfigureerd. [...]

Hier is een diagram dat het verschil illustreert tussen een container en een virtuele machine:

Containerisatie: containers VS virtuele machines (VM)

(Het host-besturingssysteem is het primaire besturingssysteem waarop een gastsysteem, het zogenaamde gastbesturingssysteem, draait. Het host-besturingssysteem stelt middelen zoals geheugen, processor en opslag ter beschikking van het gastsysteem. Het gastsysteem daarentegen draait in een virtuele machine op het hostsysteem en kan worden gebruikt om andere toepassingen en systemen te draaien dan het hostsysteem).

Hier volgt een vergelijking van de verschillen tussen virtuele machines en containers:

Virtuele machine (VM) Container (Docker-afbeelding)
Zwaar Lichte
Beperkte prestaties Inheemse prestaties
Eén virtuele machine = één OS Alle containers worden gevoed door het host OS
Virtualisatie op hardwareniveau OS Virtualisatie
Starttijd in minuten Starttijd in milliseconden
Vereist veel geheugen Vereist minder geheugen
Volledig geïsoleerd Misschien minder zeker

Docker-images: de basis voor containerisatie

Docker, tegenwoordig een van de meest gebruikte containerisatietools, is gebaseerd op het image-principe. Het moet worden gezien als een toepassing die laag voor laag wordt opgebouwd als een ui. De eerste laag stelt het besturingssysteem voor en bevat het absolute minimum om te functioneren. Daaraan worden extra functionaliteiten toegevoegd, in opeenvolgende lagen, waarbij de nieuwe laag gebruik maakt van de vorige.

Deze lagen liggen vast in een onveranderlijk beeld en kunnen worden gewijzigd of uitgebreid om nieuwe functionaliteit toe te voegen. Deze structuur kan worden gewijzigd door nieuwe lagen toe te voegen, maar niet door bestaande lagen te wijzigen.

Maar wat is een container eigenlijk?

Een container is een instantie van een Docker image. Dit betekent dat het een draaiend image is.

De voordelen van Docker voor ontwikkelaars

Ontwikkelaars waarderen Docker voor de volgende voordelen:

  • Portabiliteit: Docker-applicaties kunnen worden ingezet op elk platform dat Docker draait, waardoor het eenvoudig is om ontwikkelomgevingen te configureren en te testen. Dit bespaart veel tijd bij de integratie van een nieuwe medewerker, vooral omdat elk teamlid een isofunctionele omgeving heeft.
  • Isolatie: Docker-containers zijn van elkaar geïsoleerd, wat afhankelijkheidsconflicten en installatiefouten voorkomt. (bijvoorbeeld: een applicatie, een database, een monitoring tool, enz.)
  • Automatisering: Deployment- en configuratieprocessen kunnen worden geautomatiseerd met behulp van Dockerfile-instructies en scripts, waardoor de ontwikkeling wordt versneld.

De voordelen van Docker voor infrastructuurbeheerders

Infrastructuurbeheerders waarderen Docker voor de volgende voordelen:

  • Hulpbronnen: Docker-containers zijn lichter dan virtuele machines, wat betekent dat ze minder systeembronnen nodig hebben om te draaien.
  • Schaalbaarheid: Docker-toepassingen kunnen op meerdere nodes worden ingezet om de werklast te beheren, waardoor eenvoudige en efficiënte horizontale schaalbaarheid mogelijk is.
  • Onderhoud: Docker-images kunnen naadloos worden bijgewerkt en ingezet, waardoor het gemakkelijk is om applicaties te onderhouden.

Containers hebben niet alleen voordelen!

Containerisatie heeft enkele nadelen die inherent zijn aan de manier waarop het werkt. Het beheren van veel containers is over het algemeen complexer dan het beheren van een enkele virtuele machine. Dit geldt met name voor netwerkbronnen en opslag.

Als u te veel containers op uw besturingssysteem gebruikt, kunnen ze veel middelen verbruiken en het systeem dus overbelasten. Ook moet worden opgemerkt dat containers zelf worden beperkt door het host-besturingssysteem. Dit kan mogelijk leiden tot beperkingen op toepassingen.

Containers die toepassingen met kwetsbaarheden bevatten, kunnen het slachtoffer worden van aanvallen. Dit is ook een risico als containers verkeerd geconfigureerd zijn.

rmq: er zijn veel configuratiemogelijkheden om de risico's voor zowel het hostsysteem als de containers te beperken (toegewezen middelen, gebruikers die de toepassingen draaien, ...).

Twee verschillende gebruikssituaties voor containerisatie: inzet en productie

Containerisatie is een ideale oplossing om altijd, overal en op elke machine ontwikkelomgevingen aan te bieden, vanwege de lichtheid en het feit dat het mogelijk is alle software, instellingen en configuraties in te bouwen. Hierdoor kan de ontwikkelaar op elke machine werken zonder zich zorgen te maken over de configuratie of verschillende versies van programmeersoftware.

Voor deployment is het ook populair dankzij de grote flexibiliteit. Dankzij container orchestration tools, zoals Kubernetes of Swarm (native, minder geavanceerd), is het namelijk mogelijk om bijna in real time de resources aan te passen die bijvoorbeeld aan een server zijn toegewezen.

Dit bespaart energie, opslagruimte en vermindert de complexiteit.

Hoe Docker te gebruiken voor uw volgende toepassing

Om Docker te gebruiken voor uw volgende toepassing heeft u het volgende nodig:

  • Een computer waarop Docker is geïnstalleerd: U kunt Docker downloaden en installeren op uw computer via de officiële Docker-website.
  • Een Docker image: U kunt een vooraf gebouwd Docker image downloaden (van de Docker hub) of uw eigen maken met behulp van een Dockerfile.
  • Een Docker-container: U kunt een Docker-image draaien om een container te maken waarop uw toepassing draait.

Tot slot volgt hier een korte lijst van bronnen voor containerisatie:

  1. Docker: Dit is de bekendste en meest gebruikte containerisatie tool. Je kunt er gemakkelijk containers mee maken, inzetten en beheren. Het is ook compatibel met veel besturingssystemen en platforms.
  2. Kubernetes: Dit is een open-source systeem voor containerorkestratie. Hiermee kunt u automatisch de schaal, beschikbaarheid en inzet van containers op meerdere knooppunten beheren.
  3. Apache Mesos: Dit is een open-source resource scheduling systeem waarmee u containers en andere soorten taken op een cluster kunt beheren.
  4. LXC (Linux Containers): Dit is een set open-source tools voor het maken en beheren van Linux containers.
  5. LXD (Linux Containers Daemon): Dit is een open-source tool voor het beheer van Linux containers die een gebruiksvriendelijkere interface biedt dan LXC.
  6. Singularity: Dit is een open-source containerisatieprogramma dat speciaal is ontworpen voor HPC-omgevingen (High-Performance Computing).

Deel dit artikel!