Sådan fungerer Docker — byg, distribuér, kør
Sådan fungerer Docker, vist på et interaktivt lærred: fra Dockerfile til image, fra registry til container, og de namespaces og cgroups, der isolerer en proces.
Docker pakker et program og alt, hvad det skal bruge, ind i et image og kører det så som en container — en isoleret proces, der opfører sig ens på enhver maskine med en Docker-motor.
Sådan fungerer Docker — byg, distribuér, kør
The interactive FlowJam canvas for this explanation — every lane, row and arrow above is a real QueryChart diagram you can open and edit.
How to read this visual
- Læs de tre kolonner fra venstre mod højre: Byg, Distribuér, Kør.
- Den nederste banegruppe, »Værtsoperativsystem«, er fundamentet: containeren for enden af forløbet kører oven på det og deler dets kerne.
- Imaget er det artefakt, alt andet flytter rundt på — fra Docker-motoren til registryet og tilbage til runtimen.
Sådan bygges imaget
»Udvikleren skriver en Dockerfile, der beskriver appen« er en opskrift, ikke et resultat: et base-image, de afhængigheder, der skal installeres, filer, der skal kopieres, og kommandoen, der skal køres. »docker build pakker appen og dens afhængigheder« udfører opskriften, og »Buildet producerer et image — et skrivebeskyttet snapshot« er resultatet — et uforanderligt artefakt i et lagdelt filsystem. Reproducerbarhed er pointen: den samme Dockerfile giver det samme image på enhver maskine.
Sådan distribueres artefaktet
»Imaget pushes til et registry eller pulles derfra« er »Distribuér«-akten. Registryet er images' distributionsnetværk — et privat registry til jeres team, et offentligt til base-images. Imaget ændrer sig ikke undervejs, og det er det, der gør deployment deterministisk: det, du testede, er præcis det, du kører.
Sådan køres containeren
»docker run starter en container fra imaget« krydser fra Docker-motoren over i banegruppen »Container-runtime«. »Containeren isoleres med namespaces og cgroups« er isolationsmekanismen — namespaces giver processen sit eget syn på filsystemet, netværket og procestabellen, og cgroups sætter loft over dens CPU og hukommelse. »Containeren deler værtens kerne, men har sit eget filsystem« ligger i banegruppen »Værtsoperativsystem« for at gøre kontrasten til en virtuel maskine eksplicit, og »Appens proces kører ens overalt« er det udbytte, der retfærdiggør hele stakken.
Key relationships and takeaways
- Et image er et skrivebeskyttet snapshot; en container er en kørende instans af det.
- Containere deler værtens kerne og foregøgler isolation med namespaces — derfor starter de på sekunder, hvor virtuelle maskiner tager minutter.
- Cgroups begrænser, hvad en container kan forbruge, så én støjende nabo ikke kan udsulte værten.
- Imagets uforanderlighed er det, der gør »kører ens overalt« sandt.
- Docker leverer pakningen og runtimen; orkestratorer som Kubernetes styrer mange containere på tværs af værter.
When to use this visual
- At forklare en udvikler, hvorfor Docker virker, og hvordan en container adskiller sig fra en virtuel maskine.
- At introducere et team til byg-distribuér-kør-modellen, før de skriver deres første Dockerfile.
- At forankre en samtale om miljødrift — hvorfor »det virker på min maskine« holder op med at gælde.
Sådan fungerer det
Annotér trinnene i jeres Dockerfile
Skriv de faktiske lag i jeres build på Dockerfile-boksen — base-image, installation af afhængigheder, kopiering af kildekode, kørselskommando — så opskriften bliver konkret.
Navngiv jeres registries
Omdøb registry-trinnet med jeres faktiske registries (et privat ECR, et offentligt image), og notér, hvilke images I pusher, og hvilke I puller.
Tilføj bokse for netværk og volumener
Udvid kolonnen for runtime med, hvordan jeres containere taler sammen — et bridge-netværk — og hvor tilstanden bor — et volume — for det er de to dele, begyndere oftest overser.
Link til orkestrering
Bruger I Kubernetes, så tilføj en note, der peger fra den kørende container til den visuelle forklaring om Kubernetes, og hvad kubelet ændrer ved, hvor containeren kører.
Ofte stillede spørgsmål
Hvad er forskellen på en container og en virtuel maskine?
En virtuel maskine virtualiserer hardwaren: den bærer et helt operativsystem, og en hypervisor formidler alt, hvilket gør den tung og langsom at starte. En container virtualiserer operativsystemet: den deler værtens kerne og bruger namespaces til isolation og cgroups til ressourcegrænser. Derfor starter containere på sekunder og er langt lettere — prisen er, at alle containere på en vært deler den værts kerne.
Hvad er et image over for en container?
Et image er det statiske artefakt — et skrivebeskyttet snapshot af programmet og dets afhængigheder, bygget ud fra Dockerfilen. En container er det image i bevægelse: en kørende proces med et skrivbart lag ovenpå. Du bygger et image én gang og kan starte tusindvis af containere ud fra det, hver isoleret fra de andre.
Hvordan isolerer Docker containere?
Med to funktioner i Linux-kernen. Namespaces giver hver container sit eget syn på systemet — sit eget filsystem, sin egen netværksstak, sin egen procestabel og sine egne bruger-id'er — så den fremstår som sin egen maskine. Cgroups (control groups) begrænser og måler ressourcer og sætter loft over, hvor meget CPU, hukommelse og I/O en container kan forbruge, så én container ikke kan tage naboerne med i faldet.
Hvorfor gør Docker programmer portable?
Fordi imaget samler programmet med dets runtime, biblioteker og konfiguration — alt undtagen kernen. Hvor der findes en Docker-motor, kører imaget på samme måde, så afstanden mellem en udviklers laptop, en CI-runner og en produktionsserver skrumper ind til den konfiguration, der bevidst holdes uden for imaget.
Redigér dette diagram i QueryChart (FlowJam)
Åbn præcis dette Docker-lærred som dit eget diagram, omdøb banegrupperne til jeres egen stak, og annotér jeres image-pipeline.