Docker containers een korte uitleg

Een aantal jaren geleden was Docker nauwelijks bekend. Vandaag kent bijna iedere IT-professional deze toepassing voor het inzetten van zogenaamde containers. Joe Beda, senior software-engineer bij Google, vertelde op een conferentie dat vrijwel alles bij Google in containers draait. Veel bedrijven doen dit ondertussen ook, of willen het in ieder geval gaan doen. Containers bestaan al langer, maar sinds de komst van Docker lijken ze pas echt populair. Is Docker een hype of ‘here to stay’?

Docker is naar eigen zeggen een open platform bedoeld voor softwareontwikkelaars en softwarebeheerders. Met Docker kunnen op eenvoudige wijze applicaties worden gebouwd, gedraaid, vanaf softwareontwikkeling in productie worden genomen en van het ene naar het andere systeem worden verplaatst. Het platform bestaat met andere woorden uit onderdelen die vrij beschikbaar zijn en waar iedereen aan kan bijdragen. Tevens kunnen gebruikers het platform naar eigen behoefte aanpassen of uitbreiden.

Wat doet Docker?

Iedereen die weleens zelf software heeft geschreven, zal hebben opgemerkt dat de stap van het daadwerkelijk beschikbaar stellen van die software aan anderen een lastig proces kan zijn. Je moet rekening houden met de mogelijke systemen waar de software op moet draaien. Vragen die moeten worden beantwoord, zijn onder andere: om welke Linux-distributie gaat het? Is deze 32-bit of 64-bit? Is de programmatuur afhankelijk van andere software? En welke zaken moeten er daarnaast geconfigureerd worden? Al gauw wordt je geconfronteerd met een breed scala aan mogelijkheden, waarvoor scripts, procedures en documentatie moeten worden geschreven.

Docker belooft het proces van softwareontwikkeling tot het in productie nemen te ondersteunen. Hierin ligt de sleutel tot de populariteit van Docker.

Virtualisatie versus Docker

De kritische lezer denkt misschien: “maar dit konden we zonder containers toch al dankzij virtualisatie?” Dat klopt tot op zekere hoogte. Je kunt een applicatie, inclusief onderliggend besturingssysteem, isoleren in een virtuele machine (VM). Daarmee kan door het kopiëren van een VM een applicatie worden verspreid. Deze werkwijze heeft ons al heel ver gebracht. Waarom Docker-containers in veel gevallen aantrekkelijker zijn, heeft te maken met de verschillen tussen VM’s en containers.

Bij virtualisatie is er altijd sprake van een fysieke host (gastheer). Dit is het systeem waarop alle VM’s draaien. Deze VM’s heten guests (gasten). Een host heeft een eigen besturingssysteem (OS) en virtualisatiesoftware (een hypervisor, zoals VMware, Xen of KVM). Iedere guest heeft ook een eigen besturingssysteem met daarop de applicatie geïnstalleerd.

Docker werkt ook met een host. Deze kan zowel fysiek als virtueel zijn. In plaats van een hypervisor heeft Docker de Docker-engine. Deze engine is een server die in plaats van VM’s containers start. De Docker-engine gebruikt de Linux kernel van de host en alle guest-containers krijgen als het ware een geïsoleerd stukje van de host tot hun beschikking. De containers hebben geen eigen besturingssysteem, alleen de functiebibliotheken (libraries; libs) en commando’s (binaries; bins) die relevant zijn voor de Linux-distributie, waarop de applicatie is gebouwd en draait. De applicatie kan prima draaien op de Linux kernel van de host, omdat deze in principe onafhankelijk van de Linux distributie is.

Je hebt met een container geen guest-OS meer nodig, waardoor containers veel kleiner zijn. Deze kleinere omvang zorgt ervoor dat de container gemakkelijker te verplaatsen is, minder het systeem belast en sneller start. Daarnaast zorgt het standaardformaat van containers ervoor dat je vrijwel onafhankelijk bent van het host-platform.

Docker onderdelen

De basis van Docker bestaat uit een executable en de Docker Hub. De executable heeft twee functies: het starten van de Docker-engine (de Docker daemon) en het beschikbaar stellen van het Docker-commando, waarmee Docker wordt gebruikt. Dit commando communiceert met de Docker-engine, die het feitelijke werk uitvoert. De Docker Hub is een online dienst, die zowel gratis als betaalde functionaliteit bevat voor het bouwen, opslaan en beschikbaar stellen van ‘Docker images’. Daarnaast levert Docker een aantal hulpmiddelen om eenvoudig hosts te installeren (Docker-machine), clusters te maken en te beheren (Docker-swarm) of meerdere containers tegelijkertijd te starten en te beheren (Docker-compose).

Images en containers

Een Docker-image bevat het onderliggende bestandssysteem van een container en de bijbehorende informatie (metadata) over deze image. Wanneer een image eenmaal is gemaakt, kan deze niet meer worden gewijzigd. Een image is een “dode” afspiegeling van een container. Een image heeft geen draaiende processen, gebruikt geen geheugen en verkeert altijd in dezelfde staat, ofwel is stateless. Een image is wat je deelt en verspreidt, bijvoorbeeld via Docker Hub. Een container is een draaiende instantie van een image. Daarmee kan een gebruiker dus interacteren. In een container draaien processen die geheugen gebruiken. Je kunt ook zeggen dat een container zich op ieder moment in een bepaalde staat verkeert, ofwel stateful is. Een container is een draaiende, stateful, instantie van de stateless image.

Iedere keer dat een container wordt gestart vanuit een bepaalde image zal deze zich initieel in dezelfde staat bevinden. Alle wijzigingen die worden gedaan in de container zullen dan ook verloren gaan, tenzij we Docker vertellen om een nieuwe image te maken uit de draaiende container.

Neem contact op voor een vrijblijvende offerte of een advies op maat.