Programmering

Hvad er Docker? Gnisten til containerrevolutionen

Docker er en softwareplatform til opbygning af applikationer baseret på containere - små og lette eksekveringsmiljøer, der bruger fælles brug af operativsystemets kerne, men ellers kører isoleret fra hinanden. Mens containere som koncept har eksisteret i nogen tid, hjalp Docker, et open source-projekt, der blev lanceret i 2013, med at popularisere teknologien og har været med til at drive tendensen mod containerisering og mikrotjenester i softwareudvikling, der er blevet kendt som cloud-native-udvikling.

Hvad er containere?

Et af målene med moderne softwareudvikling er at holde applikationer på samme vært eller klynge isoleret fra hinanden, så de ikke unødigt forstyrrer hinandens drift eller vedligeholdelse. Dette kan være svært takket være de pakker, biblioteker og andre softwarekomponenter, der kræves for at de kan køre. En løsning på dette problem har været virtuelle maskiner, som holder applikationer på den samme hardware helt adskilte og reducerer konflikter mellem softwarekomponenter og konkurrence om hardwareressourcer til et minimum. Men virtuelle maskiner er klodsede - hver kræver sit eget operativsystem, så er det typisk gigabyte i størrelse - og vanskeligt at vedligeholde og opgradere.

Beholderederimod isoler applikations eksekveringsmiljøer fra hinanden, men del den underliggende OS-kerne. De måles typisk i megabyte, bruger langt færre ressourcer end virtuelle computere og starter næsten med det samme. De kan pakkes langt tættere på den samme hardware og spindes op og ned en masse med langt mindre indsats og overhead. Containere giver en yderst effektiv og meget granulær mekanisme til at kombinere softwarekomponenter i de slags applikations- og servicestakke, der er nødvendige i en moderne virksomhed, og til at holde disse softwarekomponenter opdateret og vedligeholdt.

Docker

Hvad er Docker?

Docker er et open source-projekt, der gør det let at oprette containere og containerbaserede apps. Oprindeligt bygget til Linux, kører Docker nu også på Windows og MacOS. For at forstå, hvordan Docker fungerer, skal vi se på nogle af de komponenter, du vil bruge til at oprette Docker-containeriserede applikationer.

Dockerfil

Hver Docker-container starter med en Dockerfil. En Dockerfile er en tekstfil skrevet i en letforståelig syntaks, der indeholder instruktionerne til at opbygge en Docker billede (mere om det om et øjeblik). En Dockerfile angiver det operativsystem, der ligger til grund for containeren sammen med sprog, miljøvariabler, filplaceringer, netværksporte og andre komponenter, den har brug for - og selvfølgelig, hvad containeren rent faktisk gør, når vi kører den.

Paige Niedringhaus over på ITNext har en god opdeling af syntaxen for en Dockerfile.

Docker-billede

Når du har skrevet din Dockerfil, påberåber du Docker bygge værktøj til at oprette en billede baseret på den Dockerfile. Mens Dockerfile er det sæt instruktioner, der fortæller bygge hvordan man laver billedet, et Docker-billede er en bærbar fil, der indeholder specifikationerne for hvilke softwarekomponenter containeren kører, og hvordan. Da en Dockerfile sandsynligvis vil indeholde instruktioner om, hvordan man tager fat i nogle softwarepakker fra online-arkiver, skal du sørge for eksplicit at angive de rigtige versioner, ellers kan din Dockerfile muligvis producere inkonsekvente billeder afhængigt af, hvornår den påberåbes. Men når et billede er oprettet, er det statisk. Codefresh giver et kig på, hvordan man bygger et billede mere detaljeret.

Docker-kørsel

Docker's løb værktøj er den kommando, der faktisk starter en container. Hver container er en eksempel af et billede. Containere er designet til at være forbigående og midlertidige, men de kan stoppes og genstartes, hvilket starter containeren i samme tilstand som da den blev stoppet. Desuden kan flere containerforekomster af det samme billede køres samtidigt (så længe hver container har et unikt navn). Kodegennemgangen har en god oversigt over de forskellige muligheder for løb kommando for at give dig en fornemmelse for, hvordan det fungerer.

Docker Hub

Selvom det er let at bygge containere, skal du ikke få den idé, at du skal bygge hver eneste af dine billeder fra bunden. Docker Hub er et SaaS-lager til deling og administration af containere, hvor du finder officielle Docker-billeder fra open source-projekter og softwareleverandører og uofficielle billeder fra offentligheden. Du kan downloade containerbilleder, der indeholder nyttig kode, eller uploade dine egne, dele dem åbent eller gøre dem private i stedet. Du kan også oprette en lokal Docker-registreringsdatabase, hvis du foretrækker det. (Docker Hub har tidligere haft problemer med billeder, der blev uploadet med bagdøre indbygget i dem.)

Docker-motor

Docker Engine er kernen i Docker, den underliggende klientserverteknologi, der opretter og kører containerne. Generelt når nogen siger Docker generelt og taler ikke om virksomheden eller det samlede projekt, betyder de Docker Engine. Der findes to forskellige versioner af Docker Engine: Docker Engine Enterprise og Docker Engine Community.

Docker Community Edition

Docker frigav sin Enterprise-udgave i 2017, men dets oprindelige tilbud, omdøbt til Docker Community Edition, forbliver open source og gratis og mistede ikke nogen funktioner i processen. I stedet tilføjede Enterprise Edition, som koster $ 1.500 pr. Node pr. År, avancerede styringsfunktioner, herunder kontroller til klynge- og billedhåndtering og sårbarhedsovervågning. BoxBoat-bloggen har en oversigt over forskellene mellem udgaverne.

Hvordan Docker erobrede containerverdenen

Ideen om, at en given proces kan køres med en vis grad af isolation fra resten af ​​dens driftsmiljø, er blevet indbygget i Unix-operativsystemer som BSD og Solaris i årtier. Den originale Linux-containerteknologi, LXC, er en virtualiseringsmetode på OS-niveau til at køre flere isolerede Linux-systemer på en enkelt vært. LXC blev muliggjort af to Linux-funktioner: navneområder, der omslutter et sæt systemressourcer og præsenterer dem for en proces for at få det til at se ud som om de er dedikeret til denne proces; og cgroups, der styrer isoleringen og brugen af ​​systemressourcer, såsom CPU og hukommelse, til en gruppe processer.

Containere afkobler applikationer fra operativsystemer, hvilket betyder, at brugerne kan have et rent og minimalt Linux-operativsystem og køre alt andet i en eller flere isolerede containere. Og fordi operativsystemet er abstraheret væk fra containere, kan du flytte en container på tværs af enhver Linux-server, der understøtter container-runtime-miljøet.

Docker introducerede flere væsentlige ændringer i LXC, der gør containere mere bærbare og fleksible at bruge. Ved hjælp af Docker-containere kan du distribuere, replikere, flytte og sikkerhedskopiere en arbejdsbelastning endnu hurtigere og lettere, end du kan gøre det ved hjælp af virtuelle maskiner. Docker bringer skylignende fleksibilitet til enhver infrastruktur, der er i stand til at køre containere. Docker's containerbilledværktøjer var også et fremskridt i forhold til LXC, der gjorde det muligt for en udvikler at opbygge biblioteker med billeder, komponere applikationer fra flere billeder og starte disse containere og applikationer på lokal eller ekstern infrastruktur.

Docker Compose, Docker Swarm og Kubernetes

Docker gør det også lettere at koordinere adfærd mellem containere, og bygg derefter applikationsstakke ved at sætte containere sammen. Docker Compose blev oprettet af Docker for at forenkle processen med at udvikle og teste applikationer med flere containere. Det er et kommandolinjeværktøj, der minder om Docker-klienten, der tager en specielt formateret deskriptor-fil til at samle applikationer ud af flere containere og køre dem samlet på en enkelt vært. (Se vejledningen til Docker Compose for at lære mere.)

Mere avancerede versioner af denne adfærd - hvad der hedder container orkestrering— Tilbydes af andre produkter, såsom Docker Swarm og Kubernetes. Men Docker giver det grundlæggende. Selvom Swarm voksede ud af Docker-projektet, er Kubernetes blevet det de facto Valg af Docker-orkestrationsplatform.

Docker fordele

Docker-containere giver en måde at oprette virksomhedsapplikationer og line-of-business-applikationer, der er lettere at samle, vedligeholde og bevæge sig rundt end deres konventionelle kolleger. 

Docker-containere muliggør isolering og nedbrydning

Docker-containere holder apps isoleret ikke kun fra hinanden, men fra det underliggende system. Dette giver ikke kun en renere softwarestak, men gør det lettere at diktere, hvordan en given containeriseret applikation bruger systemressourcer - CPU, GPU, hukommelse, I / O, netværk osv. Det gør det også nemmere at sikre, at data og kode holdes adskilt. (Se "Docker-containere er statsløse og uforanderlige" nedenfor.)

Docker-containere muliggør bærbarhed

En Docker-container kører på enhver maskine, der understøtter containerens runtime-miljø. Applikationer behøver ikke at være bundet til værtsoperativsystemet, så både applikationsmiljøet og det underliggende operativmiljø kan holdes rene og minimale.

For eksempel vil en MySQL til Linux-container køre på de fleste ethvert Linux-system, der understøtter containere. Alle afhængigheder for appen leveres typisk i samme container.

Containerbaserede apps kan let flyttes fra on-prem-systemer til cloud-miljøer eller fra udviklers laptops til servere, så længe målsystemet understøtter Docker og et hvilket som helst af de tredjepartsværktøjer, der muligvis er i brug med det, f.eks. Kubernetes (se "Docker-containere letter orkestrering og skalering" nedenfor).

Normalt skal Docker-containerbilleder bygges til en bestemt platform. En Windows-container kører for eksempel ikke på Linux og omvendt. Tidligere var en måde omkring denne begrænsning at starte en virtuel maskine, der kørte en forekomst af det nødvendige operativsystem og køre containeren i den virtuelle maskine.

Docker-teamet har imidlertid siden udtænkt en mere elegant løsning, kaldetmanifesterer sig, som gør det muligt at pakke billeder til flere operativsystemer side om side i det samme billede. Manifester betragtes stadig som eksperimentelle, men de antyder, hvordan containere kan blive en applikationsløsning på tværs af platforme såvel som en grænseoverskridende løsning. 

Docker-containere muliggør komposabilitet

De fleste forretningsapplikationer består af flere separate komponenter, der er organiseret i en stak - en webserver, en database, en cache i hukommelsen. Beholdere gør det muligt at komponere disse stykker i en funktionel enhed med let udskiftelige dele. Hvert stykke leveres af en anden container og kan vedligeholdes, opdateres, byttes ud og ændres uafhængigt af de andre.

Dette er i det væsentlige mikroservicemodellen for applikationsdesign. Ved at opdele applikationsfunktionalitet i separate, selvstændige tjenester tilbyder mikroservicemodellen en modgift til at bremse traditionelle udviklingsprocesser og ufleksible monolitiske apps. Letvægts og bærbare containere gør det nemmere at bygge og vedligeholde mikrotjenester-baserede applikationer.

Docker-containere letter orkestrering og skalering

Da containere er lette og pålægger lidt overhead, er det muligt at lancere mange flere af dem på et givet system. Men containere kan også bruges til at skalere en applikation på tværs af systemklynger og til at rampe tjenester op eller ned for at imødekomme efterspørgsler eller spare ressourcer.

De mest versioner af virksomhederne af værktøjerne til implementering, styring og skalering af containere leveres via tredjepartsprojekter. Hoved blandt dem er Googles Kubernetes, et system til automatisering af, hvordan containere implementeres og skaleres, men også hvordan de er forbundet, belastningsbalanceret og administreret. Kubernetes giver også måder at oprette og genbruge definitioner af applikationer til flere containere eller "Helm charts", så komplekse app-stakke kan bygges og styres efter behov.

Docker inkluderer også sit eget indbyggede orkestrationssystem, Swarm-tilstand, som stadig bruges til sager, der er mindre krævende. Når det er sagt, er Kubernetes blevet noget af standardvalget; faktisk er Kubernetes bundtet med Docker Enterprise Edition.

Docker forbehold

Beholdere løser mange problemer, men de er ikke helbredende. Nogle af deres mangler er ved design, mens andre er biprodukter af deres design.

Docker-containere er ikke virtuelle maskiner

Den mest almindelige begrebsmæssige fejl, folk begår med containere, er at sidestille dem med virtuelle maskiner. Men fordi containere og virtuelle maskiner bruger forskellige isoleringsmekanismer, har de tydeligt forskellige fordele og ulemper.

Virtuelle maskiner giver en høj grad af isolering af processer, da de kører i deres egen instans af et operativsystem. Operativsystemet behøver heller ikke være det samme som det, der køres på værten. En Windows-virtuel maskine kan køre på en Linux hypervisor og omvendt.

Containere bruger derimod kontrollerede dele af værtsoperativsystemets ressourcer; mange applikationer deler den samme OS-kerne på en stærkt administreret måde. Som et resultat er containeriserede apps ikke så grundigt isolerede som virtuelle maskiner, men de giver tilstrækkelig isolering til langt de fleste arbejdsbelastninger.

Docker-containere leverer ikke metalhastighed

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