Wat is Docker en waarom wil je ermee werken?

Docker meest populaire container formaatDocker is de voorbije jaren uitgegroeid tot de belangrijkste standaard in ‘container-technologie’ – een nieuwe manier om software, vaak zelfgeschreven, in te pakken en uit te rollen. Zo moet je niet langer rekening houden met hardware en specifieke configuratie-parameters. Je maakt ook veel zuiniger gebruik van de fysiek beschikbare rekenkracht. Klinkt interessant? Het vraagt wel een heel andere manier van werken.

Dankzij DevOps zien we software-ontwikkeling en infrastructuurbeheer steeds meer als één geheel. De instellingen voor veiligheid, beschikbaarheid en performance stop je met je software samen in één doos: de Docker-container. Software uitrollen wordt zo héél simpel – een beetje zoals een kant-en-klaar-maaltijd serveren, in plaats van telkens opnieuw alle aparte ingrediënten bij elkaar te koken.

 

Waarom stop je software in een container?

Wanneer je zelf software schrijft, begin je eigenlijk nooit echt vanaf nul. Je bouwt verder op bestaande zaken zoals het besturingssysteem, bibliotheken, drivers, plug-ins, runtime-omgevingen… Anders werkt je toepassing niet.

In een klassieke aanpak moet je eerst alle lagen bovenop het besturingssysteem zelf installeren, op je eigen computer, server of virtuele server. Is je toepassing dan eindelijk klaar – na veel denkwerk, programmeren, testen en verbeteren? Dan mag je de hele oefening nog eens overdoen in de live-omgeving. Er zijn kortom heel wat nadelen aan de klassieke manier:

  • Veel gedoe voor niets: De installatie van je infrastructuur en alles wat erbij komt, is repetitief werk, waar je als software-ontwikkelaar liever niet mee bezig bent. Wil je bovendien een tweede of een derde server, omwille van prestaties of betrouwbaarheid, dan kan je de klus nog eens helemaal opnieuw doen.
  • Risico op fouten: Kleine versie-verschillen tussen de ontwikkel-, test- en live-omgeving kunnen een grote impact hebben. Wat al de hele tijd feilloos lijkt te werken, kan op het moment van de go-live toch plots voor problemen zorgen.
  • Beperkte resources: In een klassieke ICT-aanpak bepaalt de hardware hoe snel of traag je systeem werkt. Wil je meer rekenkracht, dan moet je resources toevoegen. Heb je resources teveel? Dan blijven ze ongebruikt. Zet je dankzij virtualisatie meerdere virtuele servers samen op dezelfde hardware? Dan vermenigvuldigt het aantal besturingssystemen, bibliotheken… en zo vreet je je rekenkracht op.

Containers zijn een stuk compacter en bevatten enkel het hoogst nodige. Ze maken veel zuiniger gebruik van je resources. Je kunt de gewenste configuratie bewaren als een ‘image’ – een soort ‘foto’ van de volledige installatie. Die kun je dan één keer, drie keer of tientallen keren opnieuw uitrollen. Dat gaat snel en eenvoudig, eventueel zelfs volautomatisch met een container-platform zoals Kubernetes. Door al het nodige samen in een container te stoppen, elimineer je niet alleen de manuele installatie van je systeem. Ook het bijhorende risico op menselijke fouten verdwijnt.

 

Hoe werkt Docker eigenlijk?

Docker imageIn je Docker-container stop je al wat je toepassing nodig heeft om te functioneren. Niet minder, maar ook niet meer. Alle parameters zitten mee in de doos. Het is een volledig autonoom mini-systeem, dat je enkel nog hoeft te starten, of te stoppen.

Alles wat je toepassing niet nodig heeft, hoeft er ook niet in te zitten. Dat zorgt ervoor, samen met het gemeenschappelijk gebruik van onderliggende bibliotheken en besturingssysteem, dat je heel zuinig gebruik maakt van je resources.

Je software bouwen, verpakken en publiceren verloopt totaal anders met Docker. Je verfijnt de code en de infrastructuur-parameters tot alles volledig naar wens is. Dan maak je een ‘foto’ (image). Zoals je meerdere afdrukken van een foto kunt maken, zet je het image om in één of meerdere containers. Als je de code of parameters ook maar een beetje wil veranderen, herhaal je het hele proces:

  • Docker file: Dit eenvoudige tekstbestand dient als ‘blauwdruk’ en omschrijft hoe je gewenste ‘Docker image’ eruit zal zien.
  • Docker image: Als ontwikkelaar kun je vaak verder bouwen op een bestaand basis-image waarin de gewenste tools zitten. Op DockerHub vind je bijvoorbeeld een startklare omgeving voor bijvoorbeeld Ruby of NodeJS. Als het resultaat perfect is, kun je je image vastleggen (build) en publiceren.
  • Docker container: Vanaf je image, standaard of zelfgebouwd, start je een zelfstandig systeem op (run). Dit is herhaalbaar en onveranderlijk.

 

Wat zijn de voor- en nadelen van Docker?

Installeer je je toepassing op meerdere servers tegelijk? Rol je vaak nieuwe versies uit? Dan heb je reden genoeg om van een ‘ambachtelijke’ naar een ‘industriële’ methode over te stappen. Het vraagt een andere aanpak, typisch voor de DevOps-filosofie. Daar moet je minstens even aan wennen, alvorens te genieten van de voordelen:

  • Beheersbaar: Elk systeem in een Docker-container kun je meteen stoppen, starten en vermenigvuldigen. Loopt een container vast, dan heeft dat geen invloed op andere systemen, ook al draaien ze fysiek samen op dezelfde host-machine.
  • Uitbreidbaar en foutbestendig: Zet je meerdere containers naast elkaar, dan kun je een plotse piek in de verkeerslast beter spreiden. Als je bovendien orkestratie gebruikt, dan kun je volautomatisch extra nodes opstarten en een vastgelopen systeem herstarten.
  • Platform-onafhankelijk: Is je toepassing afhankelijk van specifieke versies, configuraties of van webservices op een ander systeem? Vooral in grotere toepassingen kunnen de onderlinge afhankelijkheden een simpele systeem-upgrade veranderen in een aartsmoeilijke puzzel. Met Docker werk je volledig systeem-onafhankelijk. Je gebruikt binnen elke container de gepaste versie, en zo hoef je niet alles in één keer te upgraden.
  • Performant: Docker zet elke container rechtstreeks bovenop het host-besturingssysteem – het enige besturingssysteem. Containers hebben toegang tot gemeenschappelijke gegevensopslag. Bestanden die door meerdere containers in gebruik zijn, staan slechts één keer opgeslagen. Zo is er véél minder ‘overhead’.

Docker werkt fundamenteel anders dan een virtuele machine (VM): een VM doet zich eigenlijk voor als een klassieke hardware met processoren, geheugen en opslag. Eventueel deel je de beschikbare resources op voorhand op tussen meerdere VM’s, waarop dan telkens een volledig besturingssysteem met alle toebehoren draait. Bovendien zorgt een hypervisor – en daaronder nog maar eens een besturingssysteem – ervoor dat de VM’s netjes van elkaar afgeschermd zijn. Zo reserveer je je rekencapaciteit in vele kleine stukken. VM’s zijn kortom minder rigide dan dedicated hardware, maar erg kwistig met resources en niet zo flexibel. Volgens studies heb je met containers tot vijf keer minder rekenkracht nodig voor dezelfde werklast als met VM-technologie.

 

De belangrijkste uitdaging aan werken met Docker is dat je er conceptueel en technisch mee overweg moet kunnen. Vind je DevOps maar niets, en microservices te ingewikkeld, dan is Docker misschien toch niet jouw beste keuze.

  • Oudere toepassingen: De meeste oudere toepassingen zijn niet zomaar geschikt om in containers onder te brengen.
  • Compacte code: Een Docker-container bevat het hoogst nodige. Om de inhoud van je container eenvoudig en onderhoudsvriendelijk te houden, kiezen velen ervoor om een complexe toepassing op te knippen in aparte functionele stukjes of microservices. Wil je niet met microservices werken, of hang je vast aan architectuurkeuzes uit het verleden, dan zijn containers misschien niet aangewezen.
  • Technische kennis: DevOps en microservices zijn uitstekende keuzes als je een nieuwe toepassing schrijft met een hedendaagse architectuur. Uiteraard moet je die concepten ook door en door begrijpen.

 

Combell & Docker

Zie je containers als een mogelijke bouwsteen van je ICT-strategie? Denk je dat Docker interessant kan zijn? Of wil je je keuze eerst nog eens doorpraten? Combell-specialisten staan voor je klaar met advies op maat en met een aanbod managed container services.

Combell is je aanspreekpunt voor performante hosting-diensten, met garanties voor veiligheid en beschikbaarheid. Dankzij onze infrastructuurdiensten kun je nog beter focussen op je nieuwe toepassing of je online business.

Ontdek Combell managed container services