Varför ska du använda Docker och containrar

En bok som publicerades 1981, kallad  Nailing Jelly to a Tree , beskriver programvaran som "otydlig och svår att få ett fast grepp om." Det var sant 1981 och det är inte mindre sant nästan fyra decennier sedan. Programvara, oavsett om det är ett program du har köpt eller en som du själv skapat, är fortfarande svårt att distribuera, svårt att hantera och svårt att köra.

Docker-containrar ger ett sätt att få grepp om programvaran. Du kan använda Docker för att avsluta ett program på ett sådant sätt att dess distributions- och körtidsproblem - hur man exponerar det i ett nätverk, hur man hanterar användningen av lagring och minne och I / O, hur man kontrollerar åtkomstbehörigheter - hanteras utanför själva applikationen och på ett sätt som är konsekvent i alla "containeriserade" appar. Du kan köra din Docker-behållare på vilken OS-kompatibel värd som helst (Linux eller Windows) som har Docker-körtiden installerad.

Docker erbjuder många andra fördelar förutom denna praktiska inkapsling, isolering, bärbarhet och kontroll. Docker-behållare är små (megabyte). De börjar omedelbart. De har sina egna inbyggda mekanismer för versionering och återanvändning av komponenter. De kan enkelt delas via det offentliga Docker Hub eller privata förvar.

I den här artikeln kommer jag att undersöka hur Docker-behållare gör det lättare att både bygga och distribuera programvara - problemen behållare adresserar, hur de adresserar dem, när de är rätt svar på problemet och när de inte gör det.

Före Docker-containrar

Under många år har företagsprogramvara vanligtvis distribuerats antingen på "bare metal" (dvs. installerat på ett operativsystem som har fullständig kontroll över den underliggande hårdvaran) eller i en virtuell maskin (dvs. installerad på ett operativsystem som delar den underliggande hårdvaran med andra gästoperativsystem). Naturligtvis gjorde installationen på ren metall mjukvaran svårt att flytta och svår att uppdatera - två begränsningar som gjorde det svårt för IT att reagera smidigt på förändringar i affärsbehov.

Sedan kom virtualisering. Virtualiseringsplattformar (även känd som ”hypervisorer”) gjorde det möjligt för flera virtuella maskiner att dela ett enda fysiskt system, var och en virtuell maskin emulerar ett helt systems beteende, komplett med sitt eget operativsystem, lagring och I / O, på ett isolerat sätt . IT kan nu svara mer effektivt på förändringar i affärsbehov, eftersom virtuella datorer kan klonas, kopieras, migreras och snurras upp eller ner för att möta efterfrågan eller spara resurser.

Virtuella maskiner hjälpte också till att sänka kostnaderna, eftersom fler virtuella datorer kunde konsolideras till färre fysiska maskiner. Äldre system som kör äldre applikationer kan förvandlas till virtuella datorer och tas ur drift fysiskt för att spara ännu mer pengar.

Men virtuella maskiner har fortfarande sin del av problemen. Virtuella maskiner är stora (gigabyte), var och en innehåller ett fullständigt operativsystem. Endast så många virtualiserade appar kan konsolideras till ett enda system. Att tillhandahålla en virtuell dator tar fortfarande en hel del tid. Slutligen är portabiliteten för virtuella datorer begränsad. Efter en viss punkt kan virtuella datorer inte leverera den hastighet, smidighet och besparingar som snabba företag kräver.

Docker-containerfördelar

Behållare fungerar lite som virtuella datorer, men på ett mycket mer specifikt och detaljerat sätt. De isolerar en enda applikation och dess beroenden - alla externa programvarubibliotek som appen kräver för att köra - både från det underliggande operativsystemet och från andra behållare. Alla containeriserade appar delar ett gemensamt operativsystem (antingen Linux eller Windows), men de är indelade i varandra och från systemet i stort.

Fördelarna med Docker-containrar dyker upp på många ställen. Här är några av de största fördelarna med Docker och containrar:

Docker möjliggör effektivare användning av systemresurser

Instanser av containeriserade appar använder mycket mindre minne än virtuella maskiner, de startar och stannar snabbare och de kan packas mycket tätare på sin värdhårdvara. Allt detta innebär mindre utgifter för IT.

Kostnadsbesparingarna varierar beroende på vilka appar som spelas och hur resurskrävande de kan vara, men behållare fungerar alltid som effektivare än virtuella datorer. Det är också möjligt att spara kostnader för programvarulicenser, eftersom du behöver många färre instanser av operativsystemet för att köra samma arbetsbelastningar.

Docker möjliggör snabbare leveranscykler för programvara

Enterprise-programvaran måste svara snabbt på förändrade förhållanden. Det innebär både enkel skalning för att möta efterfrågan och enkel uppdatering för att lägga till nya funktioner som verksamheten kräver. 

Docker-containrar gör det enkelt att sätta in nya versioner av programvara med nya affärsfunktioner snabbt - och att snabbt rulla tillbaka till en tidigare version om du behöver. De gör det också lättare att implementera strategier som blå / grön distribution.

Docker möjliggör applikationsportabilitet

Där du driver en företagsapplikation är det viktigt - bakom brandväggen, för att hålla saker nära och säkra; eller ute i ett offentligt moln, för enkel tillgång till allmänheten och höga resurser. Eftersom Docker-behållare inkapslar allt som en applikation behöver för att köra (och bara de där sakerna), tillåter de att applikationer lätt kan flyttas mellan miljöer. Varje värd med Docker-körtiden installerad - vare sig det är en utvecklarens bärbara dator eller en offentlig molninstans - kan köra en Docker-behållare.

Docker lyser för mikrotjänsterarkitektur

Lätta, bärbara och fristående Docker-containrar gör det lättare att bygga programvara längs framåtriktade linjer, så att du inte försöker lösa morgondagens problem med gårdagens utvecklingsmetoder.

En av mjukvarumönsterbehållarna gör det enklare är mikrotjänster, där applikationer består av många löst kopplade komponenter. Genom att sönderdela traditionella, "monolitiska" applikationer i separata tjänster, tillåter mikrotjänster att de olika delarna av en affärsapp kan skalas, modifieras och servas separat - av separata team och på separata tidslinjer, om det passar behoven hos företag. 

Behållare är inte nödvändiga för att implementera mikrotjänster, men de passar perfekt för mikrotjänster och till agila utvecklingsprocesser i allmänhet.

Problem Docker-behållare löser inte

Det första du bör tänka på om containrar är samma råd som gäller för alla programvarutekniker: Detta är inte en silverkula. Docker-containrar i sig kan inte lösa alla problem. Särskilt:

Docker löser inte dina säkerhetsproblem

Programvara i en behållare kan vara säkrare som standard än programvara som körs på ren metall, men det är som att säga att ett hus med låsta dörrar är säkrare än ett hus med olåsta dörrar. Det säger ingenting om grannskapets tillstånd, den synliga närvaron av värdesaker som frestar en tjuv, rutinerna för de människor som bor där och så vidare. Behållare kan lägga till ett säkerhetsskikt i en app, men bara som en del av ett allmänt program för att säkra en app i sitt sammanhang.

Docker förvandlar inte applikationer magiskt till mikrotjänster

Om du containeriserar en befintlig app kan det minska resursförbrukningen och göra det lättare att distribuera. Men det ändrar inte automatiskt appens design eller hur den interagerar med andra appar. Dessa fördelar kommer bara genom utvecklare tid och ansträngning, inte bara ett mandat att flytta allt i containrar.

Lägg en gammalskola monolitisk eller SOA-app i en behållare, och du hamnar med, ja, en gammal app i en behållare. Det gör det inte mer användbart för ditt arbete; om något, kan det göra det mindre användbart. 

Docker är inte en ersättning för virtuella maskiner

En ihållande myt om containrar är att de gör virtuella datorer föråldrade. Många appar som brukade köras i en virtuell dator kan flyttas till en container, men det betyder inte att alla kan eller borde. Om du till exempel befinner dig i en bransch med höga lagstadgade krav kanske du inte kan byta behållare mot virtuella datorer eftersom virtuella datorer ger mer isolering än behållare.

Fallet för Docker-containrar

Företagsutvecklingsarbete är ökänt för att vara gömt och långsamt att reagera på förändring. Företagsutvecklare undviker sådana begränsningar hela tiden - de begränsningar som IT ställer dem och de krav som företaget ställer på dem i stort. Docker och containrar ger utvecklare mer frihet de längtar efter, samtidigt som de tillhandahåller sätt att bygga affärsappar som svarar snabbt på förändrade affärsförhållanden.