Programmering

Containere 101: Grundlæggende for Docker

Docker startede i 2012 som et open source-projekt, oprindeligt navngivet dotcloud, til at bygge Linux-containere med en enkelt applikation. Siden da er Docker blevet et uhyre populært udviklingsværktøj, der i stigende grad bruges som et runtime-miljø. Få - om nogen - teknologier har fanget udviklere lige så hurtigt som Docker.

En af grundene til, at Docker er så populær, er at den leverer løftet om at "udvikle sig en gang, køre hvor som helst." Docker tilbyder en enkel måde at pakke en applikation og dens afhængighed af runtime i en enkelt container; det giver også en runtime-abstraktion, der gør det muligt for containeren at køre på tværs af forskellige versioner af Linux-kernen.

Ved hjælp af Docker kan en udvikler oprette en containeriseret applikation på sin arbejdsstation og derefter nemt distribuere containeren til enhver Docker-aktiveret server. Der er ikke behov for at test eller genindstille containeren til servermiljøet, hverken i skyen eller lokalt.

Derudover leverer Docker en softwaredelings- og distributionsmekanisme, der gør det muligt for udviklere og driftsteam let at dele og genbruge containerindhold. Denne distributionsmekanisme kombineret med bærbarhed på tværs af maskiner hjælper med at redegøre for Dockers popularitet hos operationsteam og hos udviklere.

Docker-komponenter

Docker er både et udviklingsværktøj og et runtime-miljø. For at forstå Docker skal vi først forstå konceptet med et Docker-containerbillede. En container starter altid med et billede og betragtes som en instantiering af dette billede. Et billede er en statisk specifikation af, hvad containeren skal være i runtime, inklusive applikationskoden inde i containeren og runtime-konfigurationsindstillinger. Docker-billeder indeholder skrivebeskyttede lag, hvilket betyder, at når et billede først er oprettet, ændres det aldrig.

Figur 1 viser et eksempel på et containerbillede. Dette billede viser et Ubuntu-billede med en Apache-installation. Billedet er en sammensætning af tre basale Ubuntu-lag plus et opdateringslag med et Apache-lag og et tilpasset fillag ovenpå.

En kørende Docker-container er en instantiering af et billede. Beholdere afledt af det samme billede er identiske med hinanden med hensyn til deres applikationskode og runtimeafhængighed. Men i modsætning til billeder, der er skrivebeskyttede, inkluderer kørende containere et skrivbart lag (containerlaget) oven på det skrivebeskyttede indhold. Kørselsændringer, inklusive eventuelle skrivninger og opdateringer til data og filer, gemmes i containerlaget. Således kan flere samtidige kørende containere, der deler det samme underliggende billede, have containerlag, der adskiller sig væsentligt.

Når en kørende container slettes, slettes det skrivbare containerlag også og vil ikke vare. Den eneste måde at vedvare ændringer er at gøre en eksplicit docker begå kommando inden sletning af containeren. Når du gør en docker begå, det kørende containerindhold, inklusive det skrivbare lag, skrives ind i et nyt containerbillede og lagres på disken. Dette bliver et nyt billede, der adskiller sig fra det billede, hvormed containeren blev instantieret.

Brug af dette eksplicit docker begå kommando, man kan oprette et successivt, diskret sæt Docker-billeder, hver bygget oven på det forrige billede. Derudover bruger Docker en copy-on-write-strategi for at minimere lagerpladsaftryk af containere og billeder, der deler de samme basiskomponenter. Dette hjælper med at optimere lagerplads og minimere containerens starttid.

Figur 2 viser forskellen mellem et billede og en kørende container. Bemærk, at hver kørende container kan have et andet skrivbart lag.

Ud over billedkonceptet har Docker et par specifikke komponenter, der adskiller sig fra dem i traditionelle Linux-containere.

  • Docker-dæmon. Også kendt som Docker Engine, Docker-dæmonen er et tyndt lag mellem containerne og Linux-kernen. Docker-dæmonen er det vedvarende runtime-miljø, der administrerer applikationscontainere. Enhver Docker-container kan køre på enhver server, der er aktiveret Docker-dæmon, uanset det underliggende operativsystem.
  • Dockerfil. Udviklere bruger Dockerfiles til at oprette containerbilleder, som derefter bliver grundlaget for kørende containere. En Dockerfile er et tekstdokument, der indeholder alle de konfigurationsoplysninger og kommandoer, der er nødvendige for at samle et containerbillede. Med en Dockerfil kan Docker-dæmonen automatisk oprette et containerbillede. Denne proces forenkler i høj grad trinnene til oprettelse af containere.

Mere specifikt angiver du i en Dockerfile først et basisbillede, hvorfra byggeprocessen starter. Du angiver derefter en række kommandoer, hvorefter et nyt containerbillede kan bygges.

  • Docker kommandolinjeværktøjsværktøjer. Docker leverer et sæt CLI-kommandoer til styring af livscyklussen for billedbaserede containere. Docker-kommandoer spænder over udviklingsfunktioner som build, eksport og tagging samt runtime-funktioner såsom at køre, slette, starte og stoppe en container og mere.

Du kan udføre Docker-kommandoer mod en bestemt Docker-dæmon eller en registreringsdatabase. For eksempel, hvis du udfører docker -ps kommando, vil Docker returnere en liste med containere, der kører på dæmonen.

Indholdsdistribution med Docker

Ud over runtime-miljøet og containerformaterne leverer Docker en softwaredistributionsmekanisme, almindeligvis kendt som et register, der letter opdagelse og distribution af containerindhold.

Konceptet med registreringsdatabasen er kritisk for Docker's succes, da det giver et sæt hjælpeprogrammer til at pakke, sende, gemme, opdage og genbruge containerindhold. Docker virksomheden driver en offentlig, gratis registreringsdatabase kaldet Docker Hub.

  • Registreringsdatabase. Et Docker-register er et sted, hvor containerbilleder offentliggøres og opbevares. Et register kan være fjerntliggende eller lokalt. Det kan være offentligt, så alle kan bruge det eller privat, begrænset til en organisation eller et sæt brugere. En Docker-registreringsdatabase leveres med et sæt almindelige API'er, der giver brugerne mulighed for at oprette, udgive, søge, downloade og administrere containerbilleder.
  • Docker Hub. Docker Hub er et offentligt, skybaseret containerregister, der administreres af Docker. Docker Hub leverer support til billedopdagelse, distribution og samarbejde. Derudover har Docker Hub et sæt officielle billeder, der er certificeret af Docker. Dette er billeder fra kendte softwareudgivere som Canonical, Red Hat og MongoDB. Du kan bruge disse officielle billeder som grundlag for at oprette dine egne billeder eller applikationer.

Figur 3 viser en arbejdsgang, hvor en bruger konstruerer et billede og uploader det til registreringsdatabasen. Andre brugere kan trække billedet fra registreringsdatabasen for at oprette produktionscontainere og distribuere dem til Docker-værter, uanset hvor de er.

Uforanderligheden af ​​Docker-containere

En af de mest interessante egenskaber ved Docker-containere er deres uforanderlighed og den resulterende statsløshed af containere.

Som vi beskrev i det foregående afsnit, ændres et Docker-billede, når det først er oprettet, ikke. En kørende container afledt af billedet har et skrivbart lag, der midlertidigt kan gemme ændringer i kørselstiden. Hvis containeren er begået inden sletning med docker begå, ændringerne i det skrivbare lag gemmes i et nyt billede, der adskiller sig fra det forrige.

Hvorfor er uforanderlig god? Uforanderlige billeder og containere fører til en uforanderlig infrastruktur, og en uforanderlig infrastruktur har mange interessante fordele, som ikke er opnåelige med traditionelle systemer. Disse fordele inkluderer følgende:

  • Versionskontrol. Ved at kræve eksplicitte forpligtelser, der genererer nye billeder, tvinger Docker dig til at udføre versionskontrol. Du kan holde styr på successive versioner af et billede; det er fuldt ud muligt at rulle tilbage til et tidligere billede (derfor til en tidligere systemkomponent), da tidligere billeder bevares og aldrig ændres.
  • Renere opdateringer og mere håndterbare tilstandsændringer. Med uforanderlig infrastruktur behøver du ikke længere opgradere din serverinfrastruktur, hvilket betyder, at du ikke behøver at ændre konfigurationsfiler, ingen softwareopdateringer, ingen operativsystemopgraderinger osv. Når der er behov for ændringer, skal du blot oprette nye containere og skubbe dem ud for at erstatte de gamle. Dette er en meget mere diskret og håndterbar metode til tilstandsændring.
  • Minimal drift. For at undgå drift kan du periodisk og proaktivt opdatere alle komponenterne i dit system for at sikre, at de er de nyeste versioner. Denne praksis er meget lettere med containere, der indkapsler mindre komponenter i systemet, end det er med traditionel, omfangsrig software.

Docker forskellen

Docker's billedformat, omfattende API'er til containeradministration og innovativ softwaredistributionsmekanisme har gjort det til en populær platform for både udviklings- og driftsteam. Docker bringer disse bemærkelsesværdige fordele til en organisation.

  • Minimale, deklarative systemer. Docker-containere er bedst, hvis de er små applikationer til et bestemt formål. Dette giver anledning til containere, der er minimale i størrelse, hvilket igen understøtter hurtig levering, kontinuerlig integration og kontinuerlig implementering.
  • Forudsigelige operationer. Den største hovedpine ved systemoperationer har altid været den tilsyneladende tilfældige opførsel af infrastruktur eller applikationer. Ved at tvinge dig til at foretage mindre, mere håndterbare opdateringer og ved at tilvejebringe en mekanisme, der minimerer systemdrift, hjælper Docker dig med at opbygge mere forudsigelige systemer. Når drift fjernes, har du sikkerhed for, at softwaren altid opfører sig på samme måde, uanset hvor mange gange du bruger den.
  • Omfattende genbrug af software. Docker-containere genbruger lag fra andre billeder, hvilket naturligt fremmer genbrug af software. Deling af Docker-billeder via registre er et andet godt eksempel på genbrug af komponenter i stor skala.
  • Ægte multicloud-bærbarhed. Docker muliggør ægte platformuafhængighed ved at lade containere migrere frit mellem forskellige cloudplatforme, lokale infrastrukturer og udviklingsarbejdsstationer.

Docker er allerede ved at ændre den måde, hvorpå organisationer bygger systemer og leverer tjenester. Det begynder at omforme den måde, vi tænker på software design og økonomien ved levering af software. Før disse ændringer virkelig slår rod, skal organisationer bedre forstå, hvordan de styrer sikkerhed og politikker for Docker-miljøet. Men det er et emne for en anden artikel.

Chenxi Wang er chefstrategichef for containersikkerhedsfirmaet Twistlock.

New Tech Forum giver et sted at udforske og diskutere nye virksomhedsteknologier i hidtil uset dybde og bredde. Valget er subjektivt baseret på vores valg af de teknologier, som vi mener er vigtige og af største interesse for læserne. accepterer ikke markedsføringssikkerhed til offentliggørelse og forbeholder sig retten til at redigere alt bidraget indhold. Send alle forespørgsler til [email protected]