Waarom u Docker en containers zou moeten gebruiken

Een boek dat in 1981 werd gepubliceerd, genaamd  Nailing Jelly to a Tree , beschrijft software als "vaag en moeilijk om grip op te krijgen". Dat was waar in 1981, en het is sinds bijna vier decennia niet minder waar. Software, of het nu een applicatie is die u hebt gekocht of een die u zelf heeft gebouwd, blijft moeilijk te implementeren, moeilijk te beheren en moeilijk uit te voeren.

Docker-containers bieden een manier om grip te krijgen op software. U kunt Docker gebruiken om een ​​applicatie zo in te pakken dat de implementatie- en runtime-problemen - hoe u deze op een netwerk blootstelt, hoe u het gebruik van opslag en geheugen en I / O beheert, hoe u toegangsrechten beheert - worden afgehandeld buiten de applicatie zelf, en op een manier die consistent is voor alle "containerized" apps. U kunt uw Docker-container uitvoeren op elke OS-compatibele host (Linux of Windows) waarop de Docker-runtime is geïnstalleerd.

Docker biedt naast deze handige inkapseling, isolatie, draagbaarheid en controle nog veel meer voordelen. Docker-containers zijn klein (megabytes). Ze beginnen onmiddellijk. Ze hebben hun eigen ingebouwde mechanismen voor versiebeheer en hergebruik van componenten. Ze kunnen eenvoudig worden gedeeld via de openbare Docker Hub of privérepository.

In dit artikel zal ik onderzoeken hoe Docker-containers het eenvoudiger maken om zowel software te bouwen als te implementeren: de problemen die containers oplossen, hoe ze deze aanpakken, wanneer ze het juiste antwoord op het probleem zijn en wanneer niet.

Voordat Docker-containers

Bedrijfssoftware wordt al vele jaren doorgaans geïmplementeerd op "bare metal" (dwz geïnstalleerd op een besturingssysteem dat volledige controle heeft over de onderliggende hardware) of op een virtuele machine (dwz geïnstalleerd op een besturingssysteem dat de onderliggende hardware deelt). met andere "gast" besturingssystemen). Door installatie op kaal metaal was de software natuurlijk pijnlijk moeilijk te verplaatsen en moeilijk bij te werken - twee beperkingen die het moeilijk maakten voor IT om behendig te reageren op veranderingen in zakelijke behoeften.

Toen kwam virtualisatie. Met virtualisatieplatforms (ook bekend als 'hypervisors') konden meerdere virtuele machines één fysiek systeem delen, waarbij elke virtuele machine het gedrag van een heel systeem emuleerde, compleet met een eigen besturingssysteem, opslag en I / O, op een geïsoleerde manier . IT zou nu effectiever kunnen reageren op veranderingen in zakelijke vereisten, omdat VM's kunnen worden gekloond, gekopieerd, gemigreerd en up of down kunnen worden uitgevoerd om aan de vraag te voldoen of resources te sparen.

Virtuele machines hielpen ook de kosten te verlagen, omdat meer VM's konden worden geconsolideerd op minder fysieke machines. Legacysystemen met oudere applicaties kunnen worden omgezet in VM's en fysiek buiten gebruik worden gesteld om nog meer geld te besparen.

Maar virtuele machines hebben nog steeds hun deel van de problemen. Virtuele machines zijn groot (gigabytes), elk met een volledig besturingssysteem. Er kunnen slechts zoveel gevirtualiseerde apps op één systeem worden geconsolideerd. Het inrichten van een virtuele machine kost nog steeds behoorlijk wat tijd. Ten slotte is de overdraagbaarheid van VM's beperkt. Na een bepaald punt zijn VM's niet meer in staat om de snelheid, flexibiliteit en besparingen te leveren die snel evoluerende bedrijven eisen.

Voordelen van Docker-containers

Containers werken een beetje als VM's, maar op een veel specifiekere en gedetailleerdere manier. Ze isoleren een enkele applicatie en zijn afhankelijkheden - alle externe softwarebibliotheken die de app nodig heeft om te draaien - zowel vanuit het onderliggende besturingssysteem als vanuit andere containers. Alle gecontaineriseerde apps delen een enkel gemeenschappelijk besturingssysteem (Linux of Windows), maar ze zijn gecompartimenteerd van elkaar en van het systeem in het algemeen.

De voordelen van Docker-containers komen op veel plaatsen naar voren. Hier zijn enkele van de belangrijkste voordelen van Docker en containers:

Docker maakt een efficiënter gebruik van systeembronnen mogelijk

Instanties van gecontaineriseerde apps gebruiken veel minder geheugen dan virtuele machines, ze starten en stoppen sneller, en ze kunnen veel dichter op hun hosthardware worden verpakt. Dit alles komt neer op minder IT-uitgaven.

De kostenbesparingen zullen variëren afhankelijk van welke apps er worden gespeeld en hoe resource-intensief ze kunnen zijn, maar containers werken steevast efficiënter uit dan VM's. Het is ook mogelijk om te besparen op de kosten van softwarelicenties, omdat u veel minder besturingssystemen nodig hebt om dezelfde workloads uit te voeren.

Docker maakt snellere softwareleveringscycli mogelijk

Enterprise software moet snel reageren op veranderende omstandigheden. Dat betekent zowel eenvoudig schalen om aan de vraag te voldoen als eenvoudig bijwerken om nieuwe functies toe te voegen als het bedrijf dat vereist. 

Docker-containers maken het gemakkelijk om nieuwe versies van software, met nieuwe zakelijke functies, snel in productie te nemen - en om snel terug te keren naar een vorige versie als dat nodig is. Ze maken het ook gemakkelijker om strategieën zoals blauw / groene implementaties te implementeren.

Docker maakt portabiliteit van applicaties mogelijk

Waar u een bedrijfstoepassing uitvoert, is van belang - achter de firewall, om dingen dichtbij en veilig te houden; of in een openbare cloud, voor gemakkelijke openbare toegang en hoge elasticiteit van bronnen. Omdat Docker-containers alles bevatten wat een applicatie nodig heeft om te draaien (en alleen die dingen), zorgen ze ervoor dat applicaties gemakkelijk tussen omgevingen kunnen worden geschakeld. Elke host waarop de Docker-runtime is geïnstalleerd, of het nu de laptop van een ontwikkelaar is of een openbare cloudinstantie, kan een Docker-container draaien.

Docker schittert voor de architectuur van microservices

De lichtgewicht, draagbare en zelfstandige Docker-containers maken het eenvoudiger om software te bouwen volgens vooruitstrevende lijnen, zodat u niet probeert de problemen van morgen op te lossen met de ontwikkelingsmethoden van gisteren.

Een van de softwarepatronen die containers gemakkelijker maken, zijn microservices, waarbij applicaties zijn opgebouwd uit veel losjes gekoppelde componenten. Door traditionele, 'monolithische' applicaties op te splitsen in afzonderlijke services, kunnen microservices de verschillende onderdelen van een line-of-business-app afzonderlijk schalen, aanpassen en onderhouden - door afzonderlijke teams en op verschillende tijdlijnen, als dat past bij de behoeften van de bedrijf. 

Containers zijn niet verplicht om microservices te implementeren, maar ze zijn perfect geschikt voor de microservices-benadering en voor agile ontwikkelingsprocessen in het algemeen.

Problemen die Docker-containers niet oplossen

Het eerste dat u in gedachten moet houden over containers, is hetzelfde advies dat van toepassing is op elke softwaretechnologie: dit is geen wondermiddel. Dockercontainers kunnen op zichzelf niet elk probleem oplossen. Vooral:

Docker lost uw beveiligingsproblemen niet op

Software in een container kan standaard veiliger zijn dan software die op blank metaal draait, maar dat is hetzelfde als zeggen dat een huis met de deuren op slot veiliger is dan een huis met de deuren op slot. Het zegt niets over de toestand van de buurt, de zichtbare aanwezigheid van kostbaarheden die verleidelijk zijn voor een dief, de routines van de mensen die er wonen, enzovoort. Containers kunnen een beveiligingslaag aan een app toevoegen, maar alleen als onderdeel van een algemeen programma om een ​​app in context te beveiligen.

Docker verandert applicaties niet op magische wijze in microservices

Als u een bestaande app in een container plaatst, kan dat het resourceverbruik verminderen en het gemakkelijker maken om te implementeren. Maar het verandert niet automatisch het ontwerp van de app, of de interactie met andere apps. Die voordelen komen alleen door de tijd en moeite van de ontwikkelaar, niet alleen door een mandaat om alles in containers te verplaatsen.

Stop een old-school monolithische of SOA-achtige app in een container en je krijgt, nou ja, een oude app in een container. Dat maakt het niet nuttiger voor je werk; als er iets is, kan het het minder nuttig maken. 

Docker is geen vervanging voor virtuele machines

Een hardnekkige mythe van containers is dat ze VM's overbodig maken. Veel apps die voorheen in een VM werden uitgevoerd, kunnen naar een container worden verplaatst, maar dat betekent niet dat ze allemaal kunnen of zouden moeten. Als u zich bijvoorbeeld in een branche bevindt met zware wettelijke vereisten, kunt u mogelijk geen containers voor VM's ruilen, omdat VM's meer isolatie bieden dan containers.

De case voor Docker-containers

Ontwikkelingswerk voor ondernemingen is berucht omdat ze verborgen blijven en traag reageren op veranderingen. Enterprise-ontwikkelaars schrikken voortdurend tegen dergelijke beperkingen - de beperkingen die IT hun oplegt, de eisen die het bedrijf in het algemeen aan hen stelt. Docker en containers geven ontwikkelaars meer vrijheid waar ze naar hunkeren, terwijl ze tegelijkertijd manieren bieden om zakelijke apps te bouwen die snel reageren op veranderende zakelijke omstandigheden.