Forstå Docker

Jeg har brugt Docker i flere måneder nu til at strukturere udviklings-/leveringsprocessen for webprojekter. Jeg tilbyder Habrakhabr læsere en oversættelse af den indledende artikel om havnearbejder - "Forstå docker".

Hvad er docker?

Docker er en åben platform til udvikling, levering og drift af applikationer. Docker er designet til at levere dine applikationer hurtigere. Med docker kan du afkoble din applikation fra din infrastruktur og behandle infrastrukturen som en administreret applikation. Docker hjælper dig med at sende din kode hurtigere, teste hurtigere, sende applikationer hurtigere og reducere tiden mellem at skrive kode og køre kode. Docker gør dette gennem en let containervirtualiseringsplatform ved hjælp af processer og hjælpeprogrammer, der hjælper dig med at administrere og hoste dine applikationer.

I sin kerne giver docker dig mulighed for at køre næsten enhver applikation, sikkert isoleret i en container. Sikker isolering giver dig mulighed for at køre mange containere på den samme vært på samme tid. Beholderens lette natur, som kører uden den ekstra byrde fra en hypervisor, giver dig mulighed for at få mere ud af din hardware.

Containervirtualiseringsplatformen og værktøjerne kan være nyttige i følgende tilfælde:

  • pakning af din applikation (og de komponenter, du bruger) i docker-containere;
  • distribution og levering af disse beholdere til dine teams til udvikling og test;
  • udlægning af disse containere på dine produktionssteder, både i datacentre og i skyerne.

Hvad kan jeg bruge docker til?

Udgiv hurtigt dine applikationer

Docker er fantastisk til at organisere udviklingscyklussen. Docker giver udviklere mulighed for at køre lokale containere med applikationer og tjenester. Hvilket efterfølgende giver dig mulighed for at integrere med processen med kontinuerlig integration og implementeringsworkflow.

For eksempel skriver dine udviklere kode lokalt og deler deres udviklingsstak (et sæt Docker-billeder) med kolleger. Når de er klar, skubber de koden og beholderne til teststedet og kører alle nødvendige tests. Fra teststedet kan de sende kode og billeder til produktion.

Lettere at lægge ud og folde ud

Den docker container-baserede platform gør det nemt at portere din nyttelast. Docker-containere kan køre på din lokale maskine, enten ægte eller på en virtuel maskine i et datacenter eller i skyen.

Dockers bærbarhed og lette natur gør det nemt at dynamisk styre din arbejdsbyrde. Du kan bruge docker til at implementere eller lukke din applikation eller tjenester. Hastigheden af ​​docker gør det muligt at gøre dette i næsten realtid.

Højere belastninger og mere nyttelast

Docker er let og hurtig. Det giver et robust, omkostningseffektivt alternativ til hypervisor-baserede virtuelle maskiner. Det er især nyttigt i miljøer med høj belastning, for eksempel når du opretter din egen cloud eller platform-as-service. Men det er også nyttigt til små og mellemstore applikationer, når du vil have mere ud af de ressourcer, du har.

Hoved Docker-komponenter

Docker består af to hovedkomponenter:

  • Docker: en open source virtualiseringsplatform;
  • Docker Hub: Vores platform-som-en-tjeneste til distribution og styring af Docker-containere.

Bemærk! Docker distribueres under Apache 2.0-licensen.

Docker-arkitektur

Docker bruger en klient-server-arkitektur. Docker-klienten kommunikerer med Docker-dæmonen, som påtager sig byrden med at skabe, køre og distribuere dine containere. Både klient og server kan køre på det samme system, du kan forbinde klienten til en ekstern docker-dæmon. Klienten og serveren kommunikerer via en socket eller en RESTful API.

Forstå Docker

Docker-dæmon

Som vist i diagrammet kører dæmonen på værtsmaskinen. Brugeren interagerer ikke direkte med serveren, men bruger klienten til dette.

Docker-klient

Docker-klienten, docker-programmet, er hovedgrænsefladen til Docker. Den modtager kommandoer fra brugeren og interagerer med docker-dæmonen.

Indvendig docker

For at forstå, hvad docker består af, skal du vide om tre komponenter:

  • billeder
  • registreringsdatabasen
  • containere

billedsprog

Docker-billedet er en skrivebeskyttet skabelon. For eksempel kan billedet indeholde Ubuntu-operativsystemet med Apache og en applikation på. Billeder bruges til at skabe containere. Docker gør det nemt at oprette nye billeder, opdatere eksisterende, eller du kan downloade billeder oprettet af andre mennesker. Billeder er komponenter i en docker build.

Tilmeld

Docker-registret gemmer billeder. Der er offentlige og private registre, hvorfra du kan downloade eller uploade billeder. Et offentligt Docker-register er Docker-hub. Der er en enorm samling af billeder gemt der. Som du ved, kan billeder oprettes af dig, eller du kan bruge billeder skabt af andre. Registre er en distributionskomponent.

Containere

Containere ligner mapper. Containere indeholder alt, hvad applikationen skal bruge for at køre. Hver beholder er skabt ud fra et billede. Containere kan oprettes, startes, stoppes, migreres eller slettes. Hver container er isoleret og giver en sikker platform til applikationen. Containere er en del af arbejdet.

Så hvordan fungerer Docker?

Indtil videre ved vi, at:

  • vi kan skabe billeder, hvori vores applikationer er placeret;
  • vi kan skabe containere fra billeder til at køre applikationer;
  • Vi kan distribuere billeder gennem Docker Hub eller et andet billedregistrering.

Lad os se, hvordan disse komponenter passer sammen.

Hvordan fungerer billedet?

Vi ved allerede, at et billede er en skrivebeskyttet skabelon, hvorfra en beholder oprettes. Hvert billede består af et sæt niveauer. Docker bruger fagforenings filsystem at kombinere disse niveauer i ét billede. Unions filsystem tillader filer og mapper fra forskellige filsystemer (forskellige grene) at overlappe transparent, hvilket skaber et sammenhængende filsystem.

En af grundene til, at docker er let, er fordi den bruger lag som dette. Når du ændrer billedet, såsom opdatering af et program, oprettes et nyt lag. Så uden at erstatte hele billedet eller genopbygge det, som du måske har at gøre med en virtuel maskine, tilføjes eller opdateres kun laget. Og du behøver ikke at distribuere hele det nye billede, kun opdateringen distribueres, hvilket gør det nemmere og hurtigere at distribuere billeder.

Kernen i hvert billede er et grundlæggende billede. For eksempel ubuntu, basisbilledet af Ubuntu, eller fedora, basisbilledet af Fedora-distributionen. Du kan også bruge billeder som grundlag for at skabe nye billeder. For eksempel, hvis du har et apache-billede, kan du bruge det som et basisbillede til dine webapplikationer.

Bemærk! Docker trækker typisk billeder fra Docker Hub-registret.

Docker-billeder kan oprettes ud fra disse basisbilleder; vi kalder trinene til at oprette disse billeder instruktioner. Hver instruktion skaber et nyt billede eller niveau. Instruktionerne vil være følgende:

  • køre kommando
  • tilføjelse af en fil eller et bibliotek
  • skabe en miljøvariabel
  • instruktioner om, hvad der skal køres, når containeren til dette billede startes

Disse instruktioner er gemt i en fil Dockerfile. Docker læser dette Dockerfile, når du bygger billedet, udfører disse instruktioner og returnerer det endelige billede.

Hvordan fungerer docker-registret?

Registry er et lager for docker-billeder. Når billedet er oprettet, kan du udgive det til det offentlige Docker Hub-register eller til dit personlige register.

Med docker-klienten kan du søge efter allerede publicerede billeder og downloade dem til din docker-maskine for at oprette containere.

Docker Hub leverer offentlige og private billedarkiver. Søgning og download af billeder fra offentlige lagre er tilgængelig for alle. Indholdet af private lagre er ikke inkluderet i søgeresultaterne. Og kun du og dine brugere kan modtage disse billeder og oprette containere fra dem.

Hvordan fungerer en container?

En container består af et operativsystem, brugerfiler og metadata. Som vi ved, er hver container skabt ud fra et billede. Dette billede fortæller docker, hvad der er i containeren, hvilken proces der skal starte, hvornår containeren starter og andre konfigurationsdata. Docker-billedet er skrivebeskyttet. Når docker starter en container, opretter den et læse/skrive-lag oven på billedet (ved hjælp af unionsfilsystemet som nævnt før), hvor applikationen kan køres.

Hvad sker der, når beholderen starter?

Eller bruge programmet docker, eller ved at bruge RESTful API, beder docker-klienten docker-dæmonen om at starte containeren.

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

Lad os tage et kig på denne kommando. Klienten startes ved hjælp af kommandoen docker, med mulighed run, som siger, at en ny container vil blive lanceret. Minimumskravene for at køre en container er følgende attributter:

  • hvilket billede der skal bruges til at oprette beholderen. I vores tilfælde ubuntu
  • den kommando, du vil køre, når containeren startes. I vores tilfælde /bin/bash

Hvad sker der under motorhjelmen, når vi kører denne kommando?

Docker, i rækkefølge, gør følgende:

  • downloader ubuntu-billedet: docker kontrollerer for billedtilgængelighed ubuntu på den lokale maskine, og hvis den ikke er der, så download den fra Docker-hub. Hvis der er et billede, bruger det det til at skabe en beholder;
  • opretter en beholder: når billedet modtages, bruger docker det til at oprette en container;
  • initialiserer filsystemet og monterer skrivebeskyttet niveau: beholderen oprettes i filsystemet, og billedet tilføjes til skrivebeskyttet niveau;
  • initialiserer netværket/broen: opretter en netværksgrænseflade, der tillader docker at kommunikere med værtsmaskinen;
  • Indstilling af IP-adresse: finder og indstiller adressen;
  • Starter den angivne proces: starter din applikation;
  • Behandler og producerer output fra din applikation: forbinder og logger din applikations standard input, output og fejlstrøm, så du kan spore, hvordan din applikation klarer sig.

Du har nu en fungerende container. Du kan administrere din container, interagere med din applikation. Når du beslutter dig for at stoppe applikationen, skal du slette beholderen.

Anvendte teknologier

Docker er skrevet i Go og bruger nogle funktioner i Linux-kernen til at implementere ovenstående funktionalitet.

Navneområder

Docker bruger teknologi namespaces at organisere isolerede arbejdsrum, som vi kalder containere. Når vi starter en container, opretter docker et sæt navneområder for den container.

Dette skaber et isoleret lag, hvor hvert aspekt af containeren kører i sit eget navneområde og ikke har adgang til det eksterne system.

Liste over nogle navnerum, som docker bruger:

  • pid: at isolere processen;
  • net: til styring af netværksgrænseflader;
  • ipc: at administrere IPC-ressourcer. (ICP: InterProccess Communication);
  • mnt: at administrere monteringspunkter;
  • utc: for at isolere kerne- og kontrolversionsgenereringen (UTC: Unix-tidsdelingssystem).

Kontrolgrupper

Docker bruger også teknologi cgroups eller kontrolgrupper. Nøglen til at køre en applikation isoleret er kun at give applikationen de ressourcer, du ønsker at levere. Det sikrer, at containerne bliver gode naboer. Kontrolgrupper giver dig mulighed for at dele tilgængelige hardwareressourcer og om nødvendigt sætte grænser og begrænsninger. Begræns f.eks. den mulige mængde hukommelse til beholderen.

Union filsystem

Union File Sysem eller UnionFS er et filsystem, der fungerer ved at skabe lag, hvilket gør det meget let og hurtigt. Docker bruger UnionFS til at skabe de blokke, som containeren er bygget af. Docker kan bruge flere varianter af UnionFS inklusive: AUFS, btrfs, vfs og DeviceMapper.

Containerformater

Docker kombinerer disse komponenter i en indpakning, vi kalder containerformatet. Standardformatet kaldes libcontainer. Docker understøtter også det traditionelle containerformat på Linux ved hjælp af LXC. I fremtiden kan Docker muligvis understøtte andre containerformater. For eksempel integration med BSD Jails eller Solaris Zones.

Kilde: www.habr.com

Tilføj en kommentar