Forstå Docker

Jeg har brukt Docker i flere måneder nå for å strukturere utviklings-/leveringsprosessen til webprosjekter. Jeg tilbyr Habrakhabr-lesere en oversettelse av den innledende artikkelen om havnearbeider - "Forstå docker".

Hva er docker?

Docker er en åpen plattform for utvikling, levering og drift av applikasjoner. Docker er designet for å levere applikasjonene dine raskere. Med docker kan du koble applikasjonen fra infrastrukturen din og behandle infrastrukturen som en administrert applikasjon. Docker hjelper deg med å sende koden din raskere, teste raskere, sende applikasjoner raskere og redusere tiden mellom å skrive kode og kjøre kode. Docker gjør dette gjennom en lett containervirtualiseringsplattform, ved å bruke prosesser og verktøy som hjelper deg med å administrere og være vert for applikasjonene dine.

I kjernen lar docker deg kjøre nesten alle programmer, trygt isolert i en container. Sikker isolasjon lar deg kjøre mange containere på samme vert samtidig. Beholderens lette natur, som kjører uten ekstra belastning av en hypervisor, lar deg få mer ut av maskinvaren din.

Beholdervirtualiseringsplattformen og verktøyene kan være nyttige i følgende tilfeller:

  • pakke applikasjonen din (og komponentene du bruker) i docker-containere;
  • distribusjon og levering av disse beholderne til teamene dine for utvikling og testing;
  • å legge ut disse beholderne på produksjonsstedene dine, både i datasentre og i skyene.

Hva kan jeg bruke docker til?

Publiser applikasjonene dine raskt

Docker er flott for å organisere utviklingssyklusen. Docker lar utviklere kjøre lokale containere med applikasjoner og tjenester. Som deretter lar deg integrere med prosessen med kontinuerlig integrering og distribusjonsarbeidsflyt.

For eksempel skriver utviklerne dine kode lokalt og deler utviklingsstabelen deres (et sett med Docker-bilder) med kolleger. Når de er klare, skyver de koden og beholderne til teststedet og kjører nødvendige tester. Fra teststedet kan de sende kode og bilder til produksjon.

Lettere å legge ut og brette ut

Den docker containerbaserte plattformen gjør det enkelt å portere nyttelasten din. Docker-beholdere kan kjøre på din lokale maskin, enten ekte eller på en virtuell maskin i et datasenter, eller i skyen.

Portabiliteten og den lette naturen til docker gjør det enkelt å dynamisk administrere arbeidsmengden. Du kan bruke docker til å distribuere eller slå av applikasjonen eller tjenestene. Hastigheten til docker gjør at dette kan gjøres i nesten sanntid.

Høyere last og mer nyttelast

Docker er lett og rask. Det gir et spenstig, kostnadseffektivt alternativ til hypervisorbaserte virtuelle maskiner. Det er spesielt nyttig i miljøer med høy belastning, for eksempel når du lager din egen sky eller plattform-som-tjeneste. Men det er også nyttig for små og mellomstore applikasjoner når du ønsker å få mer ut av ressursene du har.

Hoved Docker-komponenter

Docker består av to hovedkomponenter:

  • Docker: en virtualiseringsplattform med åpen kildekode;
  • Docker Hub: Vår plattform-som-en-tjeneste for distribusjon og administrasjon av Docker-containere.

Merk! Docker distribueres under Apache 2.0-lisensen.

Docker-arkitektur

Docker bruker en klient-server-arkitektur. Docker-klienten kommuniserer med Docker-demonen, som tar på seg byrden med å lage, kjøre og distribuere containerne dine. Både klient og server kan kjøre på samme system, du kan koble klienten til en ekstern docker-demon. Klienten og serveren kommuniserer via en socket eller en RESTful API.

Forstå Docker

Docker-demon

Som vist i diagrammet, kjører daemonen på vertsmaskinen. Brukeren samhandler ikke direkte med serveren, men bruker klienten til dette.

Docker-klient

Docker-klienten, docker-programmet, er hovedgrensesnittet til Docker. Den mottar kommandoer fra brukeren og samhandler med docker-demonen.

Inne docker

For å forstå hva docker består av, må du vite om tre komponenter:

  • Bilder
  • register
  • Containere

bilder

Docker-bildet er en skrivebeskyttet mal. For eksempel kan bildet inneholde Ubuntu-operativsystemet med Apache og en applikasjon på. Bilder brukes til å lage beholdere. Docker gjør det enkelt å lage nye bilder, oppdatere eksisterende, eller du kan laste ned bilder laget av andre. Bilder er komponenter i en docker-konstruksjon.

registret

Docker-registeret lagrer bilder. Det er offentlige og private registre som du kan laste ned eller laste opp bilder fra. Et offentlig Docker-register er Docker hub. Det er en enorm samling bilder lagret der. Som du vet kan bilder lages av deg eller du kan bruke bilder laget av andre. Registre er en distribusjonskomponent.

containere

Beholdere ligner på kataloger. Beholdere inneholder alt applikasjonen trenger for å kjøre. Hver beholder er laget fra et bilde. Beholdere kan opprettes, startes, stoppes, migreres eller slettes. Hver beholder er isolert og gir en sikker plattform for applikasjonen. Containere er komponenter i arbeidet.

Så hvordan fungerer Docker?

Så langt vet vi at:

  • vi kan lage bilder der applikasjonene våre er plassert;
  • vi kan lage beholdere fra bilder for å kjøre applikasjoner;
  • Vi kan distribuere bilder gjennom Docker Hub eller et annet bilderegister.

La oss se hvordan disse komponentene passer sammen.

Hvordan fungerer bildet?

Vi vet allerede at et bilde er en skrivebeskyttet mal som en beholder opprettes fra. Hvert bilde består av et sett med nivåer. Docker bruker union filsystem for å kombinere disse nivåene til ett bilde. Union filsystem lar filer og kataloger fra forskjellige filsystemer (ulike grener) overlappe transparent, og skaper et sammenhengende filsystem.

En av grunnene til at docker er lett, er fordi den bruker lag som dette. Når du endrer bildet, for eksempel å oppdatere en applikasjon, opprettes et nytt lag. Så uten å erstatte hele bildet eller gjenoppbygge det, som du kanskje har å gjøre med en virtuell maskin, blir bare laget lagt til eller oppdatert. Og du trenger ikke distribuere hele det nye bildet, kun oppdateringen distribueres, noe som gjør det enklere og raskere å distribuere bilder.

I hjertet av hvert bilde er et grunnleggende bilde. For eksempel, ubuntu, basisbildet til Ubuntu, eller fedora, basisbildet til Fedora-distribusjonen. Du kan også bruke bilder som grunnlag for å lage nye bilder. For eksempel, hvis du har et apache-bilde, kan du bruke det som et basisbilde for nettapplikasjonene dine.

Merk! Docker henter vanligvis bilder fra Docker Hub-registeret.

Docker-bilder kan lages fra disse basisbildene; vi kaller trinnene for å lage disse bildene instruksjoner. Hver instruksjon lager et nytt bilde eller nivå. Instruksjonene vil være følgende:

  • kjør kommando
  • legge til en fil eller katalog
  • lage en miljøvariabel
  • instruksjoner om hva som skal kjøres når beholderen til dette bildet startes

Disse instruksjonene er lagret i en fil Dockerfile. Docker leser dette Dockerfile, når du bygger bildet, utfører disse instruksjonene og returnerer det endelige bildet.

Hvordan fungerer docker-registeret?

Registeret er et depot for docker-bilder. Når bildet er opprettet, kan du publisere det til det offentlige Docker Hub-registeret eller til ditt personlige register.

Med docker-klienten kan du søke etter allerede publiserte bilder og laste dem ned til docker-maskinen for å lage containere.

Docker Hub tilbyr offentlige og private bildelager. Å søke og laste ned bilder fra offentlige depoter er tilgjengelig for alle. Innholdet i private lagre er ikke inkludert i søkeresultatene. Og bare du og brukerne dine kan motta disse bildene og lage beholdere fra dem.

Hvordan fungerer en container?

En beholder består av et operativsystem, brukerfiler og metadata. Som vi vet, er hver beholder laget av et bilde. Dette bildet forteller docker hva som er i beholderen, hvilken prosess som skal starte, når beholderen starter og andre konfigurasjonsdata. Docker-bildet er skrivebeskyttet. Når docker starter en container, oppretter den et lese-/skrivelag på toppen av bildet (ved å bruke unionsfilsystemet som angitt før) der applikasjonen kan kjøres.

Hva skjer når beholderen starter?

Eller bruke programmet docker, eller ved å bruke RESTful API, ber docker-klienten docker-demonen om å starte containeren.

$ sudo docker run -i -t ubuntu /bin/bash

La oss ta en titt på denne kommandoen. Klienten startes ved hjelp av kommandoen docker, med opsjon run, som sier at en ny container vil bli lansert. Minimumskravene for å kjøre en beholder er følgende attributter:

  • hvilket bilde du skal bruke for å lage beholderen. I vårt tilfelle ubuntu
  • kommandoen du vil kjøre når beholderen startes. I vårt tilfelle /bin/bash

Hva skjer under panseret når vi kjører denne kommandoen?

Docker, i rekkefølge, gjør følgende:

  • laster ned ubuntu-bildet: docker sjekker for bildetilgjengelighet ubuntu på den lokale maskinen, og hvis den ikke er der, last den ned fra Docker hub. Hvis det er et bilde, bruker det det til å lage en beholder;
  • oppretter en beholder: når bildet er mottatt, bruker docker det til å lage en beholder;
  • initialiserer filsystemet og monterer skrivebeskyttet nivå: beholderen opprettes i filsystemet og bildet legges til skrivebeskyttet nivå;
  • initialiserer nettverket/broen: oppretter et nettverksgrensesnitt som lar docker kommunisere med vertsmaskinen;
  • Stille inn IP-adressen: finner og setter adressen;
  • Starter den angitte prosessen: starter applikasjonen din;
  • Behandler og produserer utdata fra applikasjonen din: kobler til og logger applikasjonens standard input, output og feilstrøm slik at du kan spore hvordan applikasjonen din presterer.

Du har nå en fungerende beholder. Du kan administrere beholderen din, samhandle med applikasjonen din. Når du bestemmer deg for å stoppe applikasjonen, slett beholderen.

Teknologier brukt

Docker er skrevet i Go og bruker noen funksjoner i Linux-kjernen for å implementere funksjonaliteten ovenfor.

Navneområder

Docker bruker teknologi namespaces å organisere isolerte arbeidsområder, som vi kaller containere. Når vi starter en container, oppretter docker et sett med navneområder for den containeren.

Dette skaper et isolert lag, der hvert aspekt av beholderen kjører i sitt eget navneområde og ikke har tilgang til det eksterne systemet.

Liste over noen navneområder som docker bruker:

  • pid: å isolere prosessen;
  • nett: for administrasjon av nettverksgrensesnitt;
  • ipc: å administrere IPC-ressurser. (ICP: InterProccess Communication);
  • mnt: å administrere monteringspunkter;
  • utc: for å isolere kjerne- og kontrollversjonsgenerering (UTC: Unix-tidsdelingssystem).

Kontrollgrupper

Docker bruker også teknologi cgroups eller kontrollgrupper. Nøkkelen til å kjøre en applikasjon isolert er å gi applikasjonen bare ressursene du ønsker å gi. Dette sikrer at containerne blir gode naboer. Kontrollgrupper lar deg dele tilgjengelige maskinvareressurser og om nødvendig sette begrensninger og begrensninger. Begrens for eksempel den mulige mengden minne for beholderen.

Union filsystem

Union File Sysem eller UnionFS er et filsystem som fungerer ved å lage lag, noe som gjør det veldig lett og raskt. Docker bruker UnionFS til å lage blokkene som containeren er bygget fra. Docker kan bruke flere varianter av UnionFS inkludert: AUFS, btrfs, vfs og DeviceMapper.

Beholderformater

Docker kombinerer disse komponentene til en wrapper vi kaller containerformatet. Standardformatet kalles libcontainer. Docker støtter også det tradisjonelle containerformatet på Linux ved hjelp av LXC. I fremtiden kan Docker støtte andre containerformater. For eksempel integrering med BSD Jails eller Solaris Zones.

Kilde: www.habr.com

Legg til en kommentar