Programmering

Containere 101: Docker-grunnleggende

Docker startet i 2012 som et open source-prosjekt, opprinnelig kalt dotcloud, for å bygge Linux-containere med én applikasjon. Siden den gang har Docker blitt et enormt populært utviklingsverktøy, i økende grad brukt som et kjøretidsmiljø. Få - om noen - teknologier har fått med seg utviklere like raskt som Docker.

En grunn til at Docker er så populær, er at den gir løftet om å "utvikle seg en gang, løpe hvor som helst." Docker tilbyr en enkel måte å pakke et program og dets avhengighet av kjøretid i en enkelt container; det gir også en runtime-abstraksjon som gjør det mulig for containeren å kjøre på tvers av forskjellige versjoner av Linux-kjernen.

Ved hjelp av Docker kan en utvikler lage et containerisert program på arbeidsstasjonen sin, og deretter enkelt distribuere containeren til en hvilken som helst Docker-aktivert server. Det er ikke nødvendig å teste eller justere beholderen på nytt for servermiljøet, enten det er i skyen eller i lokalene.

I tillegg tilbyr Docker en programvaredeling og distribusjonsmekanisme som gjør det mulig for utviklere og driftsteam å enkelt dele og gjenbruke containerinnhold. Denne distribusjonsmekanismen, kombinert med bærbarhet på tvers av maskiner, hjelper til med å redegjøre for Dockers popularitet blant operasjonsteam og utviklere.

Docker-komponenter

Docker er både et utviklingsverktøy og et kjøretidsmiljø. For å forstå Docker, må vi først forstå konseptet med et Docker-containerbilde. En container starter alltid med et bilde og regnes som en instantiering av det bildet. Et bilde er en statisk spesifikasjon av hva beholderen skal være i kjøretid, inkludert applikasjonskoden i beholderen og konfigurasjonsinnstillinger for kjøretid. Docker-bilder inneholder skrivebeskyttede lag, noe som betyr at når et bilde er opprettet, blir det aldri endret.

Figur 1 viser et eksempel på et containerbilde. Dette bildet viser et Ubuntu-bilde med en Apache-installasjon. Bildet er en sammensetning av tre grunnleggende Ubuntu-lag pluss et oppdateringslag, med et Apache-lag og et tilpasset fillag på toppen.

En kjørende Docker-container er en instantiering av et bilde. Beholdere avledet fra det samme bildet er identiske med hverandre når det gjelder applikasjonskode og kjøretidavhengighet. Men i motsetning til bilder, som er skrivebeskyttet, inkluderer kjørende containere et skrivbart lag (beholderlaget) på toppen av skrivebeskyttet innhold. Runtime-endringer, inkludert eventuelle skrivinger og oppdateringer til data og filer, lagres i containerlaget. Dermed kan flere samtidig kjørende containere som deler det samme underliggende bildet, ha containerlag som er vesentlig forskjellige.

Når en løpende container slettes, slettes også det skrivbare beholderlaget og vil ikke vare. Den eneste måten å vedvare endringene er å gjøre en eksplisitt docker begå kommandoen før du sletter containeren. Når du gjør en docker begå, det løpende containerinnholdet, inkludert det skrivbare laget, skrives inn i et nytt containerbilde og lagres på disken. Dette blir et nytt bilde som skiller seg fra bildet som beholderen ble instantiert med.

Ved hjelp av dette eksplisitte docker begå kommando, kan man lage et påfølgende, diskret sett med Docker-bilder, hver bygget på toppen av forrige bilde. I tillegg bruker Docker en copy-on-write-strategi for å minimere lagringsplass av containere og bilder som deler de samme basekomponentene. Dette hjelper deg med å optimalisere lagringsplass og minimere starttid for containere.

Figur 2 viser forskjellen mellom et bilde og en løpende container. Merk at hver kjørende container kan ha et annet skrivbart lag.

Utover bildekonseptet har Docker noen få spesifikke komponenter som er forskjellige fra de i tradisjonelle Linux-containere.

  • Docker-demon Også kjent som Docker Engine, Docker-demonen er et tynt lag mellom beholderne og Linux-kjernen. Docker-demonen er det vedvarende kjøretidsmiljøet som administrerer applikasjonsbeholdere. Enhver Docker-container kan kjøres på en hvilken som helst server som er Docker-daemon-aktivert, uavhengig av det underliggende operativsystemet.
  • Dockerfil. Utviklere bruker Dockerfiles for å bygge containerbilder, som deretter blir grunnlaget for å kjøre containere. En Dockerfile er et tekstdokument som inneholder all konfigurasjonsinformasjon og kommandoer som trengs for å samle et containerbilde. Med en Dockerfile kan Docker-demonen automatisk bygge et containerbilde. Denne prosessen forenkler trinnene for oppretting av containere sterkt.

Mer spesifikt, i en Dockerfile spesifiserer du først et grunnbilde som byggeprosessen starter fra. Deretter angir du en rekke kommandoer, hvoretter et nytt containerbilde kan bygges.

  • Docker kommandolinjeverktøy. Docker tilbyr et sett med CLI-kommandoer for å administrere livssyklusen til bildebaserte containere. Docker-kommandoer spenner over utviklingsfunksjoner som bygg, eksport og merking, samt kjøretidsfunksjoner som å kjøre, slette, starte og stoppe en container og mer.

Du kan utføre Docker-kommandoer mot en bestemt Docker-demon eller et register. For eksempel hvis du kjører docker -ps kommando, vil Docker returnere en liste over containere som kjører på demonen.

Innholdsdistribusjon med Docker

I tillegg til runtime-miljøet og containerformatene, tilbyr Docker en programvaredistribusjonsmekanisme, kjent som et register, som letter oppdagelse og distribusjon av containerinnhold.

Konseptet med register er avgjørende for suksessen til Docker, da det gir et sett med verktøy for å pakke, sende, lagre, oppdage og gjenbruke containerinnhold. Docker driver selskapet et offentlig, gratis register kalt Docker Hub.

  • Register. Et Docker-register er et sted der containerbilder publiseres og lagres. Et register kan være eksternt eller lokalt. Det kan være offentlig, slik at alle kan bruke det, eller privat, begrenset til en organisasjon eller et sett med brukere. Et Docker-register kommer med et sett med vanlige APIer som lar brukerne bygge, publisere, søke, laste ned og administrere containerbilder.
  • Docker Hub. Docker Hub er et offentlig, skybasert containerregister administrert av Docker. Docker Hub gir støtte for arbeidsopplevelse for bildeoppdagelse, distribusjon og samarbeid. I tillegg har Docker Hub et sett med offisielle bilder som er sertifisert av Docker. Dette er bilder fra kjente programvareutgivere som Canonical, Red Hat og MongoDB. Du kan bruke disse offisielle bildene som grunnlag for å lage dine egne bilder eller applikasjoner.

Figur 3 viser en arbeidsflyt der en bruker konstruerer et bilde og laster det opp til registeret. Andre brukere kan hente bildet fra registret for å lage produksjonscontainere og distribuere dem til Docker-verter, uansett hvor de er.

Uforanderligheten til Docker-containere

En av de mest interessante egenskapene til Docker-containere er deres uforanderlighet og den resulterende statsløsheten til containere.

Som vi beskrev i forrige avsnitt, endres ikke et Docker-bilde når det er opprettet. En løpende beholder avledet fra bildet har et skrivbart lag som midlertidig kan lagre endringer i kjøretiden. Hvis beholderen er begått før sletting med docker begåendringene i det skrivbare laget vil bli lagret i et nytt bilde som er forskjellig fra det forrige.

Hvorfor er uforanderlighet bra? Uforanderlige bilder og containere fører til en uforanderlig infrastruktur, og en uforanderlig infrastruktur har mange interessante fordeler som ikke er oppnåelige med tradisjonelle systemer. Disse fordelene inkluderer følgende:

  • Versjonskontroll. Ved å kreve eksplisitte forpliktelser som genererer nye bilder, tvinger Docker deg til å gjøre versjonskontroll. Du kan holde oversikt over suksessive versjoner av et bilde; å rulle tilbake til et tidligere bilde (derfor til en tidligere systemkomponent) er fullt mulig, ettersom tidligere bilder blir beholdt og aldri endret.
  • Renere oppdateringer og mer håndterbare tilstandsendringer. Med uforanderlig infrastruktur trenger du ikke lenger å oppgradere serverinfrastrukturen, noe som betyr at du ikke trenger å endre konfigurasjonsfiler, ingen programvareoppdateringer, ingen operativsystemoppgraderinger og så videre. Når det er behov for endringer, lager du bare nye containere og skyver dem ut for å erstatte de gamle. Dette er en mye mer diskret og håndterbar metode for tilstandsendring.
  • Minimalisert drift. For å unngå drift kan du periodisk og proaktivt oppdatere alle komponentene i systemet ditt for å sikre at de er de nyeste versjonene. Denne praksisen er mye lettere med containere som innkapsler mindre komponenter i systemet enn det er med tradisjonell, klumpete programvare.

Docker-forskjellen

Docker's bildeformat, omfattende API-er for containeradministrasjon og nyskapende programvaredistribusjonsmekanisme har gjort det til en populær plattform for både utviklings- og driftsteam. Docker gir disse bemerkelsesverdige fordelene til en organisasjon.

  • Minimale, deklarative systemer. Docker-containere er på sitt beste hvis det er små applikasjoner. Dette gir opphav til containere med minimal størrelse, som igjen støtter rask levering, kontinuerlig integrering og kontinuerlig distribusjon.
  • Forutsigbare operasjoner. Den største hodepinen i systemoperasjoner har alltid vært den tilsynelatende tilfeldige oppførselen til infrastruktur eller applikasjoner. Ved å tvinge deg til å gjøre mindre, mer håndterbare oppdateringer og ved å tilby en mekanisme for å minimere systemdrift, hjelper Docker deg med å bygge mer forutsigbare systemer. Når drift elimineres, har du forsikring om at programvaren alltid vil oppføre seg på samme måte, uansett hvor mange ganger du distribuerer den.
  • Omfattende programvare gjenbruk. Docker-containere gjenbruker lag fra andre bilder, noe som naturlig fremmer gjenbruk av programvare. Deling av Docker-bilder via registre er et annet godt eksempel på gjenbruk av komponenter i stor skala.
  • Ekte multicloud-bærbarhet. Docker muliggjør ekte plattformuavhengighet ved å la containere migrere fritt mellom forskjellige skyplattformer, lokale infrastrukturer og utviklingsarbeidsstasjoner.

Docker endrer allerede måten organisasjoner bygger systemer og leverer tjenester på. Det begynner å omforme måten vi tenker på programvaredesign og økonomien i programvarelevering. Før disse endringene virkelig slår rot, må organisasjoner bedre forstå hvordan de håndterer sikkerhet og policyer for Docker-miljøet. Men det er et tema for en annen artikkel.

Chenxi Wang er strategidirektør for containersikkerhetsfirmaet Twistlock.

New Tech Forum er et sted for å utforske og diskutere ny teknologi i enestående dybde og bredde. Valget er subjektivt, basert på vårt valg av teknologiene vi mener er viktige og av størst interesse for leserne. godtar ikke markedsføringssikkerhet for publisering og forbeholder seg retten til å redigere alt bidratt innhold. Send alle henvendelser til [email protected].

$config[zx-auto] not found$config[zx-overlay] not found