De voordelen van Docker

podcast

In deze aflevering van de podcast legt  mede-oprichter en CTO Jan Peter Jansen uit wat Docker precies is en waarom je het zou moeten gebruiken. Luister de aflevering op Spotify, bekijk op YouTube of lees het onderstaande artikel. Je kunt de podcast ook terugvinden op andere platformen door te zoeken op “Eonics Podcast”.

Docker is de laatste jaren een begrip geworden waar je bijna niet meer omheen kunt. Maar wat is het eigenlijk precies? Jan Peter: “het idee van Docker is dat je je software samen met al je omgevings benodigdheden kan verpakken in een zogenaamde container, zodat je deze eenvoudig op een willekeurige server kan draaien. Voor een Java applicatie betekent dit dat alle zaken die je nodig hebt, zoals bijvoorbeeld de JVM, Log4j, mail en andere zaken, op de juiste manier in de container zullen staan en je applicatie altijd goed kan draaien. Vroeger moest eerst alles correct staan geïnstalleerd op je server als je een applicatie wilde draaien, maar met docker stuur je dus eigenlijk de hele omgeving mee met je applicatie. Dit maakt het ontwikkelen, testen en draaien van complexe applicaties een stuk eenvoudiger.”

Versies en repositories

Docker is ook heel handig om je applicatie te kunnen versioneren. Jan Peter: “In Docker werk je net als bij Git met versies. Stel dat je net aan feature branch werkt, dan kun je hiervan eenvoudig een nieuwe container image maken met een nieuwe versie. Op deze manier kun je dus eenvodig je applicatie stapsgewijs updaten, en ook makkelijk teruggaan naar een oudere versie als er problemen zijn.”

Wat ook een groot voordeel is dat je niet gebonden bent aan een enkele testomgeving, zoals vroeger vaak het geval was. Jan Peter: “Omdat je met docker eenvoudig een je hele applicatie landschap kunt deployen kun je voor iedere test simpelweg een nieuwe tijdelijke omgeving creëren die je na het testen weer offline haalt. Zo heb je niet meer dat verschillende tests door elkaar lopen in dezelfde omgeving en kun je sneller en effectiever nieuwe features implementeren en naar productie brengen.

Waar komen al deze images dan eigenlijk te staan? Jan Peter: “Ook hier lijkt het weer op Git. Je hebt ook voor je Docker images zogenaamde repositories waar alle versies van je images zijn opgeslagen. Je kunt een eigen repository draaien of gebruikmaken van Docker Hub, dat is de officiële infrastructuur van Docker zelf. Wat wij meestal doen is voor een project een afgeschermd repository draaien, waarbij er een watcher is die kijkt of er nieuwe versies worden geupload. Wanneer dit gebeurd wordt automatisch deze nieuwe versie uitgerold. Een kind kan de was doen.

Kubernetes en de cloud

Wanneer je serieus met Docker aan de slag gaat kom je al snel de term Kubernetes tegen. Jan Peter: “Kubernetes en Docker Swarm zijn tools waarmee je op een effectieve manier grote en complexe docker applicatielandschappen kunt beheren. Denk hierbij aan het automatisch deployen naar specifieke URL’s, automatisch opschalen van applicaties en zero downtime deployments. Anders gezegd: je gebruikt dit soort tooling als je grote Docker clusters gaat inrichten en beheren. Deze tools zijn best wel complex, dus het gebruik hiervan is echt een vak apart. Dit is het domein van DevOps specialisten en niet iets waar je zomaar als beginner mee aan de slag gaat.

En wat is dan precies de relatie tussen Docker en de cloud? Jan Peter: “In cloud-omgevingen wordt het opzetten van dit soort omgevingen voor jou gedaan. Je krijgt dan een schaalbare omgeving as a service. Het nadeel hiervan is wel dat als er iets misgaat het lastig kan zijn om te troubleshooten. Daarom kiezen wij er vaak nog voor om onze Docker applicaties op eigen servers te draaien. Het een is niet beter dan het ander, het ligt maar net aan de applicatie en de kennis van je team.”

Docker in de praktijk

Bij alle projecten van Eonics wordt Docker toegepast. Jan Peter: “Zo hebben we laatst een groot project gedaan waarbij een deel van de applicatie bestond uit componenten geschreven in Python, terwijl een groot deel van de backend geschreven was in Java. Daarnaast hadden we nog zaken als file storage en load balancing nodig. Best een complexe applicatie dus. Dankzij Docker was het toch erg eenvoudig om een werkende architectuur op te zetten. Alle componenten kregen hun eigen image en werden vervolgens middels Docker Compose aan elkaar geknoopt.”

Docker Compose is de manier waarop je beschrijft hoe verschillende Docker containers zijn geconfigureerd en hoe ze met elkaar communiceren. Jan Peter: “In Docker Compose geef je aan welke containers er zijn, wat hun verschillende omgevingsvariabelen zijn, en hoe ze met elkaar communiceren. Denk aan het configureren  van databasenamen, het openzetten van poorten en meer van dat soort zaken. Vervolgens kunnen containers ook automatisch met elkaar praten middels een private netwerk. Zo zorg je ervoor dat de verschillende delen van je applicatie eenvoudig met elkaar kunnen samenwerken.”

Op deze manier kun je ook vrij eenvoudig een goed security model creëren voor je applicatie. Jan Peter: “Hoe wij het meestal doen is 1 enkele poort naar buiten openzetten voor een proxy. Vervolgens moet dus al het verkeer van buiten hierlangs, en komt het vervolgens bij Keycloack om zich te authenticeren. Op deze manier kunnen alleen geautoriseerde gebruikers bij je aplicatie komen. Eenvoudig en veilig.”

Niet voor databases

Tot slot nog een kleine waarschuwing. Jan Peter: “Gebruik Docker niet voor je database. Het filesysteem wat Docker gebruikt is daar niet geschikt voor. Dit kan leiden tot slechte performance of mogelijk zelfs corruptie van data. Een database kun je dus beter draaien op het onderliggende filesysteem van het operating systeem zelf. Dat is daar vele malen geschikter voor dan Docker.”

Meer weten?

Heb je naar aanleiding van de podcast of dit artikel nog vragen over Docker? Wil je graag advies van Jan Peter over jouw project? Laat je gegevens achter, dan neemt hij zo snel mogelijk contact met je op.