Docker

In korte tijd is Docker razendpopulair geworden en dat is ook best logisch: dankzij Docker kunnen we afscheid nemen van de situatie waarbij een applicatie afhankelijk is van het Linux-besturingssysteem waarop het draait. Maar wat is Docker precies, wanneer kan je het goed gebruiken en hoe werkt het? In dit artikel leggen we je dat allemaal uit.

Wat is Docker?

Docker biedt een verregaande vorm van virtualisatie. Het stelt je in staat om applicaties te draaien zonder dat je afhankelijk bent van de onderliggende servers en softwareversies zoals je dat waarschijnlijk gewend bent. Met Docker kan je geïsoleerde omgevingen of containers aanmaken waarin je je programma kunt draaien. Dit betekent dus dat je je programma niet direct op Linux installeert, maar dat je een afgesloten omgeving creeert op je Linux-server waarin je je software kunt draaien.

Voorbeeld: als je nog niet eerder met Docker hebt gewerkt, dan klinkt alle uitleg misschien erg abstract. Een concreet voorbeeld: Dankzij Docker kan je meerdere containers opzetten waarbij de ene container MySQL 5.6 draait, de andere MySQL5.7 en de derde PostgreSQL. Het is niet logisch om deze drie systemen op eenzelfde Linux-installatie te draaien, maar dankzij de containertechniek kan dat erg snel en probleemloos gerealiseerd worden, zonder dat het veel geheugen en rekenkracht van je systeem vraagt.

 

Docker logo

 

Docker kan gezien worden als een verregaande vorm van virtualisatie of als virtualisatie op applicatie-niveau. Dit past in lijn van de ontwikkelingen die we in de hostingwereld hebben gezien: waar in het verleden met fysieke / dedicated servers werd gewerkt, maakte de techniek het mogelijk om een fysieke server softwarematig te verdelen in virtuele servers met elk een eigen besturingssysteem en een eigen resources (schijfruimte, geheugen, cpu). Door met containers te werken, is het nu mogelijk om binnen een besturingssysteem geisoleerde ruimtes te creeeren waarin software draait, onafhankelijk van andere softwarepakketten en onafhankelijk van het onderliggende besturingssysteem. Het grote voordeel is dus dat je niet voor iedere specifieke applicatie een eigen (virtuele) server hoeft op te zetten. Dat scheelt veel overhead, waardoor op dezelfde server ineens veel meer kan draaien.

Hoe werkt Docker?

Images & Containers

Twee begrippen die voortdurend terugkomen bij Docker zijn image en container. Wil je een applicatie draaien? Dan kan dat in een container, d.w.z. een geïsoleerde omgeving. Maar hoe maak je die container? De container maak je op basis van een image. Je image bevat alle software en eventueel noodzakelijke libraries om je applicatie goed te kunnen draaien. Wil je je applicatie daadwerkelijk starten, dan zal je een container op basis van een image moeten starten. Met een lege container kan je immers niets.

Voor steeds meer software is een image beschikbaar. Dit image bevat alleen het specifieke softwarepakket dat je wilt draaien, aangevuld met de direct ondersteunende software die nodig is om het programma te draaien. Een container met WordPress, zal dus ook een webserver en databaseserver bevatten of zal een tweede verbonden container vereisen waarin database en/of webserver draaien, omdat WordPress anders niet zou kunnen functioneren.

Het grote voordeel van docker is dat je eenvoudig nieuwe applicaties kunt uitrollen op basis van een image. Je hoeft een image maar één keer te maken, dus dat scheelt enorm in tijd. Je hoeft dus ook maar eenmalig de hele installatie en configuratie van je toepassing te verzorgen. Heb je veranderingen aangebracht aan je image en wil je deze wijzigingen doorvoeren in alle bestaande containers die je applicatie draaien? Als je ervoor kiest om de gebruiksdata van de applicatie buiten de container op te slaan, kan je de container gewoon opnieuw opstarten op basis van je nieuwe image.

Public & Private Repositories

Je kunt natuurlijk de images die je wilt gebruiken om je containers mee te draaien zelf maken, maar er is ook een enorm aanbod van bestaande images die beschikbaar zijn gesteld door anderen. Niet alleen ontwikkelaars die bestaande software naar een image omzetten, maar ook softwareleveranciers zelf maken hun software steeds vaker beschikbaar voor Docker. Het is de moeite waard om te kijken of de bestaande images voldoen aan je wensen. Uiteraard kan je een bestaand image ook aanpassen, bijvoorbeeld omdat je je applicatie net iets anders geconfigureerd wilt hebben.

Public repositories:

Er zijn een aantal serieuze partijen die een repository aanbieden voor algemeen gebruik:
hub.docker.com: Officiele public repository.

Private repositories:

Heb je zelf een image gemaakt, of heb je al eens een image gedownload om een container mee te draaien? Deze images worden op je computer/server opgeslagen en vormen je private repository. Wil je een nieuwe container draaien waarvan het image al in je bezit is? dan pakt Docker deze versie in plaats van dat een nieuw image gedownload wordt. Dat komt de snelheid ten goede. Met de docker registry kan je je eigen repository eenvoudig en overzichtelijk beheren.Voor meer informatie hierover zie https://docs.docker.com/registry/

Docker voor ontwikkelaars

Software ontwikkelaars kunnen met Docker een enorme efficiency-slag slaan. Het echte programmeerwerk zal niet veranderen, maar het proces kan verder gestroomlijnd worden. Het uitrollen van nieuwe releases en het testen op een breed scala aan platformen kan met één druk op de knop. Door je Github-repository en Jenkins kan het development proces grotendeels geautomatiseerd worden.

De term continuous integration hoor je steeds vaker in de development-wereld: het gebeurt steeds meer dat developers aan hetzelfde project werken en er belang bij hebben direct alle wijzigingen van de collega’s te zien. Waar developers voor het Docker-tijdperk vaak een lokale development-omgeving van hun project hadden draaien, is het met Docker in combinatie met Jenkins en Github eenvoudig om te realiseren dat alle developers in een team gezamenlijk aan een live-kopie van een project kunnen werken én direct het resultaat van iedere code-wijziging kunnen zien.

Een interessant artikel met praktische instructies en tips voor het inrichten van een perfecte Continuous Integration omgeving vind je hier.

Docker voor systeembeheerders en hosters

Ook voor systeembeheerders en hosting providers zal Docker een enorme verandering teweeg brengen. Het traditionele concept van hosting verdwijnt. Een geïsoleerde omgeving waarbinnen alleen jouw app draait zal de nieuwe definitie van hosting worden.

De vraag of je hosting op een eigen server of op een shared server nodig hebt, is niet meer relevant. Er is niet meer een server die beheert moet worden. Iedere container draait één proces (webserver, cachingserver, database, etc), binnen de vooraf gedefinieerde kaders. De belangrijkste taak van de hostingprovider of systeembeheerder verschuift daarmee naar het onderhoud van de onderliggende infrastructuur. Daarmee wordt de taak beperkter: het softwarematige beheer van een server wordt een stuk eenvoudiger. Als je kiest voor een distributie zoals CoreOS, dan heb je zelf helemaal geen omkijken meer naar het beheer van je server nadat je deze goed hebt ingericht.

Meer info

CoreOS: een Linux-distributie die volledig is ontwikkeld om je containers optimaal te gebruiken. .