Techlab: Ervaring opdoen met Docker

Geschreven door Menno Turksma (Developer)
Geplaatst op 16 oktober 2019

Bij DSW staan we niet stil. We willen software schrijven die ook in de toekomst goed werkt. Daarvoor moeten we soms tools leren kennen waar we nog niet veel kennis van hebben. Deze week: Docker!

Software bij DSW

Onze software draait vooral op eigen (on-premise) servers. We hebben daardoor veel controle over de inrichting van de servers en kunnen waar nodig geheugen of schijfruimte toevoegen. Veel bedrijven maken de overstap naar de cloud, omdat daar automatische systemen zijn om applicaties sneller en meer te kunnen laten verwerken.

Om deze overstap te maken, moeten de applicaties ook klaargemaakt worden om in de cloud te kunnen draaien: 

  • Een applicatie moet klein zijn, zodat er snel meerdere instanties naast elkaar opgebouwd kunnen worden. Met deze parallelle verwerking is veel snelheidswinst te boeken.
  • Een applicatie moet altijd hetzelfde gedrag vertonen, onafhankelijk van wat ervoor gebeurd is. Ontwikkelaars moeten hier rekening mee houden: je kunt niet in proces 1 een waarde in het geheugen opslaan die je in proces 2 nodig hebt. Dit wordt ‘stateless’ genoemd.

Wat is Docker?

Docker is een veelgebruikte tool waarmee een applicatie in een ‘container’ wordt gestopt. Zo’n container bevat alle logica om een proces uit te voeren, bijvoorbeeld om tijdens een aanmelding van een verzekerde te berekenen wat zijn maandpremie zal worden. Als er heel veel verzekerden tegelijk vragen om een premie te berekenen, kunnen verschillende containers met dezelfde logica tegelijk deze vraag beantwoorden. Neemt de hoeveelheid vragen af, dan kunnen de overbodige containers weer verwijderd worden. Zo kan optimaal gebruik worden gemaakt van de rekenkracht van de servers. Daarnaast maakt Docker een overstap naar de cloud eenvoudig: een Linux container kan in elke cloudomgeving draaien!

Ervaring opdoen!

Dan is het tijd om zelf te knutselen. In een mum van tijd hebben we een Docker Host draaien, maar de euforie is van korte duur: om echt images op te halen moeten de proxyinstellingen wel goed staan natuurlijk. Na een paar uur knutselen is het gelukt: met “docker build -t test/cheers2019” zien we een console applicatie verschijnen waarin een met WordArt gemaakt cocktailglas met ons proost. Score!

Dan op naar de volgende stap: kunnen we twee containers met elkaar laten praten? We besluiten het maar te combineren met een echt project; de Landenservice (ja echt, een service die landen teruggeeft!). In één container bouwen we een simpele website, in de ander de data. We knutselen een compose file in elkaar, zetten alles in een image en.. Het werkt! Door veel te lezen en voorbeelden uit te voeren krijgen we steeds meer gevoel voor Docker containers. 

Tijd voor de volgende stap: kunnen we twee Docker Hosts met elkaar laten praten, zoals twee servers in de echte wereld? In Hyper-V spinnen we een bridge op met twee nieuwe virtual machines. Hierop installeren we Docker, en dan gaat het mis: opeens staat de computer niet meer in het netwerk en zijn alle certificaten in de war. Na twee uren heeft onze beheerder het lek boven water en staat de computer weer goed ingesteld; duidelijk is dat we ons op glad ijs begeven en we besluiten niet nogmaals dit risico te nemen.

Als laatste stap gaan we proberen een echt project in een container te hangen. Dit project bestaat uit een website voorkant en een DotNet achterkant; we splitsen het op in twee containers. De voorkant hebben we snel aan de praat; na wat geknutsel lukt het ook om de achterkant in een Windows container te zetten. Proef geslaagd!

Wat is de volgende stap?

Het is echt heeeeeeeel veel werk om al onze applicaties zo te maken dat ze voldoen aan de criteria om als container te gebruiken. Bovendien is het waarschijnlijk niet nodig om alles op die manier op te zetten: sommige processen vinden maar één keer per kwartaal of zelfs per jaar plaats, en sommige vragen worden al zo snel beantwoord dat een hogere snelheid voorlopig niet nodig is.

We gaan daarom bij DSW goed kijken naar welke processen en systemen zich goed lenen om in een container te draaien. Als eerste test gaan we een nieuw systeem voor de klantenservice in de cloud draaien. Zo komen we weer wat meer te weten over hoe Docker ‘in het eggie’ werkt, en wat er allemaal bij komt kijken.


Over Menno