Vad är Docker?
Innan vi börjar vår snabb genomgång av Docker-containrar ska vi ta en titt på hur vårt team utvecklar och distribuerar program. Vi ska också kortfattat beskriva några av de utmaningar som våra team står inför.
Processen för att utveckla och hantera program i ditt företag omfattar vanligtvis ett eller flera team. Det finns ett utvecklingsteam som skapar programvaran och ett driftsteam som ansvarar för att distribuera dessa program. Driftteamet ansvarar också för att hantera programvärdinfrastrukturen.
Anta till exempel att vi utvecklar en orderspårningsportal som vårt företags olika butiker kan använda. Flera miljöer är värdar för våra program under appens utveckling och publiceringsprocess. Först utvecklar och testar utvecklingsteamet programvaran i en utvecklingsmiljö. Därifrån distribueras programvaran till en QA-miljö (kvalitetskontroll) följt av förproduktion och en slutlig produktionsmiljö.
Det finns flera utmaningar som vi måste ta hänsyn till i föregående scenario:
Hantera värdmiljöer
De olika miljöerna kräver hantering av både programvara och maskinvara. Vi måste se till att både installerad programvara och konfigurerad maskinvara varje miljö är desamma. Vi behöver även konfigurera aspekter såsom nätverksåtkomst, datalagring och säkerhet per miljö på ett konsekvent och reproducerbart sätt.
Kontinuitet inom programvaruleverans
Distribution av program till våra miljöer måste ske konsekvent. Varje distributionspaket måste innehålla alla systempaket, binärfiler, bibliotek, konfigurationsfiler och andra objekt som säkerställer ett fullt fungerande program. Vi måste även se till att alla dessa beroenden matchar programvaruversionerna och arkitekturen.
Effektiv maskinvaruanvändning
Varje distribuerat program måste köras på ett sådant sätt att det isoleras från andra program som körs på samma maskinvara. Vi strävar efter att köra fler än ett program per server för att få bästa möjliga användning av resurser utan att göra avkall på någon del.
Programportabilitet
Det finns flera orsaker till varför programportabilitet är viktigt. En värdmiljö kan misslyckas eller så kan vi behöva skala ut vårt program. I båda fallen distribuerar det potentiella resultatet om programvaran till en ny miljö. Vi vill flytta programvara från en värd till en annan, även om den underliggande infrastrukturen är annorlunda. En sådan flytt måste ske så snabbt som möjligt för att minska avbrottstiden för våra kunder.
Innan vi tittar på Docker-funktioner som hjälper till att lösa dessa utmaningar diskuterar vi några begrepp och tittar på en kort översikt över Docker-arkitekturen.
Vad är en container?
En container är en löst isolerad miljö som gör att vi kan skapa och köra programvarupaket. Dessa programvarupaket innehåller koden och alla beroenden för att köra program snabbt och tillförlitligt i valfri datormiljö. Vi kallar dessa paket containeravbildningar.
Containeravbildningen blir den enhet som vi använder för att distribuera program.
Vad är programvarucontainerisering?
Programvarucontainerisering är en os-virtualiseringsmetod som används för att distribuera och köra containrar utan att använda en virtuell dator (VM). Containrar kan köras på fysisk maskinvara, i molnet, på virtuella datorer och över flera operativsystem.
Vad är Docker?
Docker är en containeriseringsplattform som används för att utveckla, leverera och köra containrar. Docker använder inte något hypervisor-program, och du kan köra Docker på din stationära eller bärbara dator om du utvecklar och testar program. Skrivbordsversionen av Docker har stöd för Linux, Windows och macOS. För produktionssystem är Docker tillgängligt för servermiljöer, däribland många varianter av Linux samt Microsoft Windows Server 2016 och senare. Många moln, inklusive Azure, stöder Docker.
Docker-arkitekturen
Docker-plattformen består av flera komponenter som vi använder för att skapa, köra och hantera våra containeriserade program.
Docker-motorn
Docker-motorn består av flera komponenter som konfigurerats som en klient-server-implementering där klienten och servern körs samtidigt på samma värd. Klienten kommunicerar med servern med hjälp av ett REST-API, vilket gör att klienten även kan kommunicera med en fjärrserverinstans.
Vissa pilar visar kommunikationen mellan Docker-servern, containrar som körs och lagrade containeravbildningar. Dessa pilar visar hur Docker-servern läser in lagrade containeravbildningar och hanterar containrar som körs.
Docker-klienten
Det finns två alternativ för Docker-klienten: ett kommandoradsprogram med namnet docker
, eller ett gui-baserat program (Grafiskt användargränssnitt) med namnet Docker Desktop. Både CLI och Docker Desktop interagerar med en Docker-server. Kommandona docker
från CLI eller Docker Desktop använder Docker REST API för att skicka instruktioner till antingen en lokal server eller fjärrserver och fungera som det primära gränssnitt som vi använder för att hantera våra containrar.
Docker-servern
Docker-servern är en daemon som heter dockerd
. Daemonen dockerd
svarar på klientbegäranden via Docker REST API och kan interagera med andra daemoner. Docker-servern ansvarar även för att spåra livscykeln för våra containrar.
Docker-objekt
Det finns flera objekt som du skapar och konfigurerar för att stödja containerdistributioner. Detta inkluderar nätverk, lagringsvolymer, plugin-program och andra tjänstobjekt. Vi går inte igenom alla dessa objekt här, men det är bra att komma ihåg att de är objekt som vi kan skapa och distribuera efter behov.
Docker Hub
Docker Hub är ett SaaS Docker-containerregister (Software as a Service). Docker-register är lagringsplatser som vi använder för att lagra och distribuera containeravbildningar som vi skapar. Docker Hub är det standardmässiga offentliga registret som Docker använder för avbildningshantering.
Tänk på att du kan skapa och använda ett privat Docker-register eller använda något av de många molnleverantörsalternativ som är tillgängliga. Du kan till exempel använda Azure Container Registry för att lagra containeravbildningar som ska användas i flera Azure-containeraktiverade tjänster.