När Docker-containrar bör användas

Slutförd

Som vi har lärt oss har Docker flera funktioner som vi kan använda. Här tittar vi på de fördelar som Docker ger våra utvecklings- och driftsteam. Vi tittar även på några scenarier där Docker kanske inte är det bästa valet.

Dessa aspekter hjälper dig att avgöra om Docker passar bra för din containeriseringsstrategi.

Kom ihåg att det finns ett antal utmaningar som vårt team står inför när de utvecklar och publicerar vår orderspårningsportal. De letar efter en lösning för att:

  • Hantera våra värdmiljöer med lätthet.
  • Garantera kontinuitet i hur vi levererar vår programvara.
  • Se till att vi använder servermaskinvara effektivt.
  • Tillåt portabilitet för våra program.

Docker är en lösning på dessa utmaningar. Vi tar en titt på alla fördelar som vi har gått igenom hittills.

Fördelar med Docker

När vi använder Docker får vi omedelbart tillgång till de fördelar som containerisering erbjuder.

Effektiv maskinvaruanvändning

Containrar körs utan användning av en virtuell dator (VM). Som vi har lärt oss förlitar sig containern på värdkärnan för funktioner som filsystem, nätverkshantering, processschemaläggning och minneshantering.

Diagram contrasting VM resource use versus Docker resource use.

Jämfört med en virtuell dator kan vi se att en virtuell dator kräver ett operativsystem installerat för att tillhandahålla kernelfunktioner till de program som körs på den virtuella datorn. Tänk på att den virtuella datorns operativsystem också kräver diskutrymme, minne och processortid. Genom att ta bort den virtuella datorn och det ytterligare operativsystemkravet kan vi frigöra resurser på värden och använda den för att köra andra containrar.

Containerisolering

Docker-containrar har säkerhetsfunktioner för att köra flera containrar samtidigt på samma värd utan att de påverkar varandra. Som vi såg kan vi konfigurera både datalagring och nätverkskonfiguration för att isolera containrar eller dela data och anslutningar mellan specifika containrar.

Låt oss jämföra den här funktionen med användning av virtuella datorer.

Diagram that shows a physical host running multiple VMs.

Anta att vi har en fysisk värd som kör två virtuella datorer. Vi har tre program som vi vill köra isolerat från varandra. Vi bestämmer oss för att distribuera den första appen till VM1 och den andra till VM2 för att separera de två apparna från varandra. Om vi nu väljer att installera det tredje programmet behöver vi installera en till virtuell dator för att kunna fortsätta med det här mönstret.

Programportabilitet

Containrar körs nästan överallt: stationära datorer, fysiska servrar, virtuella datorer och i molnet. Den här körningskompatibiliteten gör det enkelt att flytta containerbaserade program mellan olika miljöer.

Eftersom containrar är lätta drabbas de inte av långsamma start- eller avstängningstider som virtuella datorer. Den här aspekten gör omdistributionen och andra distributionsscenarier – till exempel upp- eller nedskalning – smidiga och snabba.

Programleverans

Med Docker blir containern den enhet som vi använder för att distribuera program. Det här konceptet säkerställer att vi har ett standardiserat containerformat som både utvecklar- och åtgärdsteamen använder. Våra utvecklare kan fokusera på att utveckla programvara och driftteamet kan fokusera på att distribuera och hantera programvara.

Vi kan använda containern i varje steg i vårt distributionssystem när utvecklingsteamet släpper en version av vårt program. Containrar är idealiska kandidater för kontinuerlig integrering och påskyndar tiden från bygge till produktion.

Hantera värdmiljöer

Vi konfigurerar programmets miljö internt i containern. Den här inneslutningen ger driftsteamet flexibiliteten att hantera programmets miljö mycket närmare. Vårt team kan övervaka OS-uppdateringar, tillämpa säkerhetskorrigeringar en gång och distribuera den uppdaterade containern efter behov.

Teamet kan även hantera vilka program som ska installeras, uppdateras och tas bort utan att det påverkar andra containrar. Varje container är isolerad och har resursgränser som tilldelas separat från andra containrar.

Molndistributioner

Docker-containrar är standardarkitekturen för containern som Azure-containeriseringstjänster använder, och många andra molnplattformar stöder dem också.

Du kan till exempel distribuera Docker-containrar till Azure Container Instances, Azure App Service och Azure Kubernetes Services. Vart och ett av dessa alternativ ger dig tillgång till olika funktioner och möjligheter.

Med Azure Container Instances kan du till exempel fokusera på att utforma och skapa program utan merarbetet med att hantera infrastrukturen. Och när du har många containrar att dirigera gör Azure Kubernetes Service det enkelt att distribuera och hantera storskaliga containerdistributioner.

När Docker-containrar inte bör användas

Docker-containrar ger många fördelar, men tänk på att containrar kanske inte passar alla dina krav. Det finns några aspekter som du bör tänka på.

Säkerhet och virtualisering

Containrar tillhandahåller en isoleringsnivå. Dock delar containrar en enda kernel för värdoperativsystem, vilket kan utgöra en enskild attackpunkt.

Windows-värdar tillhandahåller ytterligare en isoleringsmodell där en specialbyggd virtuell dator kan användas för att isolera containern på hypervisor-nivå. Det här läget kallas för Hyper-V-isoleringsläge och lägger till ytterligare ett säkerhetslager mellan containrar och containervärdar.

Vi måste också ta hänsyn till aspekter som lagring och nätverk för att se till att vi tar hänsyn till alla säkerhetsaspekter. Till exempel använder alla containrar nätverksbryggan som standard, och de kan nå varandra via IP-adress.

Inte alla program gagnas av containerisering. I sådana fall kan det vara mer meningsfullt att använda en virtuell dator.

Tjänstövervakning

Det är mer komplicerat att hantera program och containrar än traditionella vm-distributioner. Det finns loggningsfunktioner som berättar om tillståndet för de containrar som körs, men mer detaljerad information om tjänster i containern är svårare att övervaka.

Docker har till exempel kommandot docker stats. Det här kommandot returnerar information för containern, till exempel procentandel cpu-användning, minnesanvändning i procent, I/O skrivs till disk, nätverksdata som skickas och tas emot samt tilldelade process-ID:n. Den här informationen är användbar som en omedelbar dataström. Ingen aggregering görs dock eftersom data inte lagras. Vi skulle behöva installera programvara från tredje part för meningsfull datainsamling under en viss tidsperiod.