Waarom zijn containers belangrijk?

Voltooid

In deze les volgt u het Tailspin-team terwijl ze enkele veel benodigde verbeteringen in hun DevOps-proces bespreken. In dit scenario gebruikt het team Docker om hun webtoepassing in een container te zetten. Het team werkt vervolgens de CI/CD-pijplijn bij om deze te ondersteunen.

Het zijn een paar zware weken geweest

De afgelopen weken was een uitdagende tijd bij Tailspin. Teams hebben om een aantal redenen moeite met het voldoen aan deadlines en er is bezorgdheid geweest over productiviteit in het hele bedrijf. Andy heeft enkele belangrijke belanghebbenden van het team van de Space Game-website samen opgeroepen om feedback te verzamelen voor een aanstaande presentatie voor management.

Andy: Bedankt dat je langs bent. Ik weet dat de afgelopen weken voor iedereen ruw zijn geweest, maar ik heb goed nieuws. Het management houdt morgen een offsite om voorstellen te horen over wijzigingen die we kunnen aanbrengen om de prestaties te verbeteren. Ze hebben me uitgenodigd om een casestudy te presenteren over onze DevOps-successen en zeiden dat ze ook openstaan voor andere ideeën die we mogelijk hebben. Ik hoopte dat we deze vergadering konden gebruiken als een gelegenheid om te brainstormen. Wie wil eerst gaan?

Iedereen kijkt naar Amita. Ze is de laatste tijd vooral gefrustreerd.

Amita: Ik ga eerst. Zoals u weet, test ik voor meerdere teams en kan het lastig zijn omdat elk team een eigen technologiestack gebruikt. Zelfs wanneer ze dezelfde onderliggende platforms gebruiken, zoals .NET of Java, richten ze zich vaak op verschillende versies. Ik heb het gevoel dat ik soms de helft van mijn dag gewoon testomgevingen krijg in een staat waarin ze de code kunnen uitvoeren die ik nodig heb om te testen. Als iets niet werkt, is het moeilijk om te zien of er een fout in de code is of als ik per ongeluk versie 4.2.3 heb geconfigureerd in plaats van 4.3.2.

Andy schrijft 'Afhankelijkheidsversieproblemen voor QA' op het whiteboard.

Tim: Ik wil graag bewerkingen toevoegen aan die frustratie. We hebben een aantal teams met unieke versievereisten, dus we moeten hun apps publiceren op hun eigen virtuele machines om ervoor te zorgen dat hun versie- en onderdeelvereisten niet conflicteren met onze andere apps. Naast de overhead die gepaard gaat met het onderhouden van de extra set virtuele machines, kost het ons ook meer dan wanneer deze apps naast elkaar zouden kunnen worden uitgevoerd.

Andy schrijft 'Overhead vanwege het oplossen van app-isolatie met VM's' op het whiteboard.

Mara: Ik heb iets van de ontwikkelingszijde. Een paar weken geleden werkte ik aan het peer-to-peer-updatesysteem en had het allemaal op mijn computer gewerkt. Maar toen ik het afleverde voor implementatie, werkte het niet in productie. Ik was vergeten dat ik poort 315 moest openen als onderdeel van de service. Het duurde meer dan een dag voor probleemoplossing om te realiseren wat er aan de hand was. Zodra we dat in productie hebben geopend, werkten dingen zoals verwacht.

Andy schrijft 'Configuratie-inconsistenties tussen implementatiefasen' op het whiteboard.

Andy: Ik denk dat dit gesprek een goed begin is. Laat me deze problemen onderzoeken en zien wat ik kan bedenken. Dit zijn de zorgen die ik heb gehoord:

  • Problemen met versiebeheer van afhankelijkheden voor QA
  • Overhead vanwege het oplossen van app-isolatie met VM's
  • Inconsistenties in de configuratie tussen implementatiefasen

Alles samenvoegen (in één container)

De volgende ochtend belt Andy een vergadering om een nieuw idee aan het team te presenteren.

Andy: Ik heb gisteren met enkele collega's gesproken over de uitdagingen waarmee we te maken hebben en ze hebben interessante suggesties gedaan. De enige die ik graag wil uitproberen, is Docker. Het is een technologie voor het verpakken van hele toepassingen als containers.

Amita: Wat is een container? Is dat als een ZIP-bestand ?

Andy: Niet precies. Het is meer een lichtgewicht virtuele machine die is ontworpen om rechtstreeks op het hostbesturingssysteem te worden uitgevoerd. Wanneer u uw project bouwt, is de uitvoer een container met uw software en de bijbehorende afhankelijkheden. Het is echter geen volledig gevirtualiseerd systeem, dus het kan in slechts minder dan één seconde draaien.

Tim: Hoe gaat het om beveiliging en isolatie?

Andy: Beveiliging en isolatie worden afgehandeld door het hostbesturingssysteem. Wanneer uw container wordt uitgevoerd in een hostproces, wordt de container geïsoleerd van de andere processen op dezelfde hostcomputer. Met deze isolatie kan uw container alle versies van onderdelen laden die nodig zijn, ongeacht wat andere containers doen. Dit betekent ook dat u eenvoudig meerdere containers tegelijk op dezelfde host kunt uitvoeren.

Amita: Dat klinkt geweldig voor de productieomgeving, maar lost het de uitdagingen op waarmee we eerder in de pijplijn te maken hebben?

Andy: Absoluut! In plaats van broncode of een set binaire bestanden te verzenden, wordt de hele container het artefact. Dat betekent dat wanneer Mara zich ontwikkelt, haar foutopsporingssessies lokaal worden uitgevoerd op de container die op haar computer wordt gehost. Wanneer Amita test, test ze met een kopie van diezelfde container, die al alle vereiste versies van de afhankelijkheden bevat. Wanneer Tim onze productieomgeving beheert, zijn de containers die hij bewaakt zelfstandige kopieën van dezelfde containers die door Mara zijn ontwikkeld en getest door Amita.

Mara: Hoe moeilijk is het om een containertoepassing te ontwikkelen? Moeten we belangrijke wijzigingen aanbrengen in onze bestaande code?

Andy: Containers zijn meer van een verpakkings- en implementatietechnologie. Ze hebben geen invloed op de fundamentele software die we schrijven. We kunnen alleen onze hulpprogramma's instrueren om aan het einde van de build een Docker-container te produceren. Wanneer er vervolgens fouten worden opgespoord, is de toepassing niet meer van die lokale container in plaats van onze lokale webserver. Met hulpprogramma's zoals Visual Studio kunt u zelfs schakelen tussen foutopsporingsomgevingen zoals Docker en IIS Express om ons de flexibiliteit te bieden die we nodig hebben. Ik heb ons websiteproject gisteravond geforkt en geconverteerd naar een Docker-container om het proces te testen. Ik hoef alleen een basiscontainerconfiguratie toe te voegen; Ik hoefde geen van onze bestaande code te wijzigen.

Mara: Dat is geweldig om te weten. We kunnen zelfs de release-pijplijn in Azure Pipelines bijwerken van uw fork om de Docker-versie te bouwen en implementeren.

Andy: Je leest mijn gedachten.

Wat is Docker?

Docker is een technologie voor het automatiseren van de verpakking en implementatie van draagbare, zelfvoorzienende containers. Docker-containers kunnen overal worden uitgevoerd waar een Docker-host wordt gevonden, ongeacht of deze zich op een ontwikkelcomputer, een afdelingsserver, een datacenter onderneming of in de cloud bevinden. Azure biedt meerdere manieren om toepassingen op basis van containers uit te voeren, waaronder App Service of als onderdeel van clusters die worden beheerd met indelingstechnologieën zoals Kubernetes.

Het Tailspin-team heeft Docker-containers voor dit scenario geselecteerd, omdat het aan al hun behoeften voldoet:

  • Problemen met versiebeheer van afhankelijkheden voor QA: toepassingen worden verpakt als containers die de juiste versies van hun afhankelijkheden met zich meebrengen.

  • Overhead vanwege het oplossen van app-isolatie met VM's: veel geïsoleerde containers kunnen op dezelfde host worden uitgevoerd met voordelen ten opzichte van virtuele machines, waaronder een snellere opstarttijd tot een grotere resource-efficiëntie.

  • Inconsistenties in de configuratie tussen DevOps-fasen: Containers worden verzonden met manifesten waarmee configuratievereisten worden geautomatiseerd, zoals welke poorten moeten worden weergegeven.

Het aannemen van Docker-containers kan een belangrijke stap zijn in de richting van een microservicesarchitectuur. Daar bespreken we later meer over.

Test uw kennis

1.

Welke van de volgende opties is geen goede reden om Docker te gebruiken?

2.

Hoe zijn containers en virtuele machines vergelijkbaar?

3.

Hoeveel overhead vereist het migreren van een bestaande .NET Core-toepassing voor het gebruik van een Docker-container?