Programmering

Hvad du har brug for at vide om Docker i Windows

Jeg tilbragte slutningen af ​​sidste uge på Monki Gras, en London-udviklerkonference med fokus på håndværk af softwareudvikling. Det er en fascinerende begivenhed, og i år fokuseret på, hvordan man pakker software.

Ikke overraskende talte mange af højttalerne om containernes rolle i devops og kontinuerlig levering. Men der var en generel misforståelse af Windows 'support til containere, generelt karakteriseret som support til Docker, der kører i Linux-VM'er.

Det er ikke sandt: Windows har sine egne containerteknologier, der bygger på Docker, men giver det et unikt Microsoft-spin. Det er sandsynligvis kilden til forvirringen, hvor Windows 10 tilføjer support til et Linux-undersystem, og Microsoft tilføjer Docker-værktøjer til Windows Server 2016 omkring samme tid. Begge er en del af Microsofts tilgang til cloud-native applikationsudvikling, som er et nøgleelement i sin Azure-platform fremover.

Microsofts engagement i containere, en af ​​de mere vigtige udviklinger på tværs af brancher i de sidste par år, bør ikke være overraskende. Måske bedst tænkt som en måde at indkapsle et helt brugerland af processer og navneområder for at isolere det fra andre forekomster, der kører på den samme server, er containere hurtigt blevet en nøglekomponent i devops og kontinuerlig integrationsimplementeringer. Microsoft har været en hurtig adopterer af disse tilgange internt, og som altid afspejler dets værktøjer, hvordan Redmond bruger software, og hvordan det bygger applikationer.

Forståelse af containere

Ved at adskille de tjenester, en applikation bruger fra de tjenester, et operativsystem har brug for, er moderne containere blevet et kraftfuldt værktøj til emballering og implementering af applikationer på servere. Containere tilbyder bærbarhed blandt udviklingscentre, lokale datacentre og private, hybrid- og offentlige skyer. Applikationer pakket i en container er uafhængige af værts-OS, og de kan køre på enhver lignende container vært uden ændringer.

Indpakning af en applikation i en container betyder, at applikationen er let at implementere sammen med alle de relevante konfigurationsfiler og afhængigheder: Hvis en container kører på en udviklingsmaskine eller består alle dine integrationstest, kører den på en server uden ændringer. Du kan ændre en container til en ny version uden at påvirke det underliggende operativsystem, og du kan flytte en container fra server til server uden at påvirke din kode. Det er det logiske slutpunkt for en devops-model, der giver dig mulighed for at implementere infrastruktur og applikationer separat - og administrere dem separat.

Oprindeligt kunne en mainframe-teknologi, containere (eller i det mindste lignende former for navneområde og procesisolering) findes i mange Unix OS'er, inklusive Linux og Solaris.

Inde i Windows-containere

Nu, med udgivelsen af ​​Windows Server 2016, har Windows sin egen containerteknologi. Det er baseret på den populære open source Docker-containertjeneste, men det tilføjer support til brug af PowerShell-kommandolinjen og til yderligere isolering med kombinationen af ​​den tynde containerfokuserede Nano Server og Hyper-V-containere.

Docker forbliver kernen i Microsofts containerstrategi. Dens værktøjer, som Swarm and Machine, er meget udbredt, og dets Data Center-produkt kan styre både Windows- og Linux-containere. Du kan endda bruge Dockers klient fra Bash-skallen, der er en del af Windows 10, og installere den i Windows-undersystemet til Linux. Denne tilgang kræver, at du jonglerer certifikater, så du foretrækker måske at bruge Dockers Windows-app som et udviklings- og grundlæggende styringsværktøj til både dine Windows- og Linux-containere.

Windows-containere er ligesom mange Windows Server-funktioner en rolle, der kan installeres enten via den velkendte Windows-funktioner-dialog eller via PowerShell. At tage PowerShell-ruten giver mest mening, fordi der er et OneGet PowerShell-modul, der installerer både Windows-containerfunktionen og Docker, med kun en genstart, der er nødvendig for at komme i gang. (Du skal også aktivere Hyper-V-virtualisering, hvis du vil bruge Hyper-V-containere.)

Der er overraskende stor begejstring for Windows-containere fra både udviklere og ops-teams; Microsoft har rapporteret mere end 1 million downloads af Windows-basisbillederne fra Dockers Hub-containerbibliotek, siden Windows Server 2016 gik i almindelig tilgængelighed.

Opbygning og implementering af containere på Windows

Beholdere er ikke kun et serverværktøj; Professional- og Enterprise-versionerne af Windows 10 Anniversary Edition understøtter også containere. Du bliver nødt til at aktivere dem fra Windows Funktions-dialog, men når de er aktiveret, kan du installere og administrere Windows-containere på en udviklings-pc ved hjælp af PowerShell. Da Windows 10 kun understøtter Hyper-V-containere, skal du også installere Hyper-V.

Når Windows-containere er blevet aktiveret, skal du downloade og installere Docker Engine og Docker-klienten og installere de basisbilleder, du skal konfigurere til din applikation.

Microsofts foreslåede basisbillede til nybyggede Windows-containere er Nano Server, dets cloud-fokuserede serverimplementering med lavt fodaftryk. Nano Server giver meget mening som en containerbase: Den er lille og hurtig uden brugergrænseflade, så den er hurtig at implementere og relativt sikker.

En vigtig note: Selvom du kan bruge den til at være vært for driftstider som Node.js, er Nano Server beregnet til at være vært for .Net Core-applikationer, inklusive ASP.Net Core, så du får ikke alle de. Net-funktioner, du er vant til . Der er nok en forskel fra den velkendte Windows Server, at det måske er bedst at tænke på Nano Server-hostede Windows-containere som et værktøj til nye applikationer snarere end som en vært for eksisterende kode.

Disse forskelle forklarer, hvorfor mange virksomheder bruger Windows Server Core som et basisbillede. Selvom det er større og tager længere tid at implementere end Nano Server, tilbyder Windows Server Core support til aktuelle Windows SDK'er og en fuld. Net-implementering. Det er meget lettere at hurtigt flytte eksisterende kode til Server Core, hvilket giver dig mulighed for, som Lead Program Manager til Windows Server og Hyper-V-containere Taylor Brown kalder det, "løft og skift" fra eksisterende servere til containere, så de ' kan implementeres, hvor du vil. Når applikationen er i en container, kan udviklere nedbryde den yderligere; for eksempel flytning af API-stik til deres egne Nano Server-baserede containere for at forenkle applikationsvedligeholdelse.

Containersupport indbygges i Windows-værktøjer på det laveste niveau, hvor Windows-containere nu er et implementeringsmål for Visual Studio 2017. Du kan opbygge og levere applikationer som en container, klar til test. At gøre containere med et enkelt museklik væk er et vigtigt skridt.

Da Windows Azure snart understøtter indlejret virtualisering, vil muligheden for at tilføje mere isolation i den offentlige sky hjælpe regulerede industrier med at retfærdiggøre en flytning til både containere og til skyen.