Vad är Docker?

Dricks

Det här innehållet är ett utdrag från eBook, .NET Microservices Architecture for Containerized .NET Applications, tillgängligt på .NET Docs eller som en kostnadsfri nedladdningsbar PDF som kan läsas offline.

.NET Microservices Architecture for Containerized .NET Applications eBook cover thumbnail.

Docker är ett projekt med öppen källkod för att automatisera distributionen av program som bärbara, självförsörjande containrar som kan köras i molnet eller lokalt. Docker är också ett företag som främjar och utvecklar den här tekniken och arbetar i samarbete med moln-, Linux- och Windows-leverantörer, inklusive Microsoft.

Diagram showing the places Docker containers can run.

Bild 2-2. Docker distribuerar containrar i alla lager i hybridmolnet.

Docker-containrar kan köras var som helst, lokalt i kundcentret, i en extern tjänstleverantör eller i molnet, i Azure. Docker-avbildningscontainrar kan köras internt i Linux och Windows. Windows-avbildningar kan dock bara köras på Windows-värdar och Linux-avbildningar kan köras på Linux-värdar och Windows-värdar (med hjälp av en virtuell Hyper-V Linux-dator hittills), där värden innebär en server eller en virtuell dator.

Utvecklare kan använda utvecklingsmiljöer i Windows, Linux eller macOS. På utvecklingsdatorn kör utvecklaren en Docker-värd där Docker-avbildningar distribueras, inklusive appen och dess beroenden. Utvecklare som arbetar med Linux eller macOS använder en Docker-värd som är Linux-baserad, och de kan bara skapa avbildningar för Linux-containrar. (Utvecklare som arbetar med macOS kan redigera kod eller köra Docker CLI från macOS, men när detta skrivs körs containrar inte direkt på macOS.) Utvecklare som arbetar med Windows kan skapa avbildningar för linux- eller Windows-containrar.

För att vara värd för containrar i utvecklingsmiljöer och tillhandahålla ytterligare utvecklarverktyg skickar Docker Docker Desktop för Windows eller för macOS. Dessa produkter installerar den nödvändiga virtuella datorn (Docker-värden) som värd för containrarna.

För att köra Windows-containrar finns det två typer av körningar:

  • Windows Server-containrar tillhandahåller programisolering genom process- och namnområdesisoleringsteknik. En Windows Server-container delar en kernel med containervärden och med alla containrar som körs på värden.

  • Hyper-V-containrar utökar isoleringen som tillhandahålls av Windows Server-containrar genom att köra varje container på en mycket optimerad virtuell dator. I den här konfigurationen delas inte containervärdens kernel med Hyper-V-containrarna, vilket ger bättre isolering.

Avbildningarna för dessa containrar skapas på samma sätt och fungerar på samma sätt. Skillnaden är hur containern skapas från avbildningen som kör en Hyper-V-container kräver en extra parameter. Mer information finns i Hyper-V-containrar.

Jämföra Docker-containrar med virtuella datorer

Bild 2–3 visar en jämförelse mellan virtuella datorer och Docker-containrar.

Virtual Machines Docker-containrar
Diagram showing the hardware/software stack of a traditional VM. Diagram showing the hardware/software stack for Docker containers.
Virtuella datorer inkluderar programmet, de bibliotek eller binärfiler som krävs och ett fullständigt gästoperativsystem. Fullständig virtualisering kräver mer resurser än containerisering. Containrar innehåller programmet och alla dess beroenden. De delar dock OS-kerneln med andra containrar som körs som isolerade processer i användarutrymmet på värdoperativsystemet. (Förutom i Hyper-V-containrar, där varje container körs inuti en särskild virtuell dator per container.)

Bild 2-3. Jämförelse av traditionella virtuella datorer med Docker-containrar

För virtuella datorer finns det tre baslager på värdservern, nedifrån och upp: infrastruktur, värdoperativsystem och hypervisor och ovanpå allt som varje virtuell dator har sitt eget operativsystem och alla nödvändiga bibliotek. För Docker har värdservern bara infrastrukturen och operativsystemet och dessutom containermotorn som håller containern isolerad men delar basoperativsystemtjänsterna.

Eftersom containrar kräver mycket färre resurser (till exempel att de inte behöver ett fullständigt operativsystem) är de enkla att distribuera och de börjar snabbt. På så sätt kan du ha högre densitet, vilket innebär att du kan köra fler tjänster på samma maskinvaruenhet, vilket minskar kostnaderna.

Som en bieffekt av att köra på samma kernel får du mindre isolering än virtuella datorer.

Huvudmålet med en avbildning är att den gör miljön (beroenden) likadan i olika distributioner. Det innebär att du kan felsöka den på datorn och sedan distribuera den till en annan dator med samma miljö garanterad.

En containeravbildning är ett sätt att paketera en app eller tjänst och distribuera den på ett tillförlitligt och reproducerbart sätt. Man kan säga att Docker inte bara är en teknik utan också en filosofi och en process.

När du använder Docker hör du inte utvecklarna säga: "Det fungerar på min dator, varför inte i produktion?" De kan helt enkelt säga "Det körs på Docker", eftersom det paketerade Docker-programmet kan köras i alla Docker-miljöer som stöds och körs som det var avsett för på alla distributionsmål (till exempel Dev, QA, mellanlagring och produktion).

En enkel analogi

Kanske kan en enkel analogi hjälpa till att få grepp om kärnkonceptet Docker.

Låt oss gå tillbaka i tiden till 1950-talet för ett ögonblick. Det fanns inga ordbehandlare, och kopieringskopierarna användes överallt (typ av).

Anta att du är ansvarig för att snabbt utfärda batchar med brev efter behov, att skicka dem till kunder, med riktiga papper och kuvert, som ska levereras fysiskt till varje kunds adress (det fanns inget e-postmeddelande då).

Vid något tillfälle inser du att bokstäverna bara är en sammansättning av en stor uppsättning stycken, som plockas och ordnas efter behov, enligt syftet med brevet, så du utformar ett system för att utfärda brev snabbt och förväntar dig att få en rejäl höjning.

Systemet är enkelt:

  1. Du börjar med en kortlek med transparenta blad som innehåller ett stycke vardera.

  2. Om du vill utfärda en uppsättning bokstäver väljer du bladen med de stycken du behöver, sedan staplar du och justerar dem så att de ser ut och läser bra.

  3. Slutligen placerar du uppsättningen i kopiatorn och trycker på Start för att producera så många bokstäver som krävs.

Så, förenkla, det är grundtanken med Docker.

I Docker är varje lager den resulterande uppsättningen ändringar som sker i filsystemet efter att ett kommando har körts, till exempel att installera ett program.

När du "tittar" på filsystemet efter att lagret har kopierats visas alla filer som ingår i lagret när programmet installerades.

Du kan se en avbildning som en skrivskyddad extra hårddisk som är redo att installeras på en "dator" där operativsystemet redan är installerat.

På samma sätt kan du se en container som "datorn" med avbildningshårddisken installerad. Containern, precis som en dator, kan slås på eller av.