Denne video viser en hurtig gennemgang af, hvad beholdere er, hvordan de kan køres på en Windows Server-boks, og hvad de kan bruges til. En beholder er et isoleret miljø, hvor et program kan køre.
Beholderen, programmet og alle dets afhængigheder er opbygget med dele af værtens ressourcer, såsom et kerneoperativsystem, CPU og hukommelse. Og de er logisk adskilt fra andre beholdere og fra selve værten.
Dette diagram illustrerer, hvordan en rød og en gul beholder eksisterer side om side i den samme vært ved hjælp af de samme hardwareressourcer og kerneoperativsystemet, men er indeholdt i deres individuelle rum, hvilket giver dem mulighed for at køre deres applikationer uden ekstern interferens.
Den samme hardware og det operativsystem, der er installeret på denne hardware, kan køre sine egne programmer og tjenester, også uafhængigt af hvad der sker på hver beholder.
Som standard er denne beholder beregnet til engangsbrug. Når den er stoppet, slettes al software og alle filer på den. Det samme sker, hvis værten genstarter.
Beholderne udnytter også værtscomputerens firewall. Lad os sammenligne alt dette med en virtuel maskine. Først og fremmest kan du køre en beholder på en virtuel maskine, men ikke omvendt.
En virtuel maskine simulerer en hel computer. Derfor skal it-afdelingen køre sit eget operativsystem, som giver mulighed for større sikkerhed, men samtidig kræver mere konfiguration og vedligeholdelse, og dette resulterer ofte i ledige ressourcer.
Der er flere måder at arbejde med beholdere på, herunder Visual Studio, Azure, Kubernetes og Windows, men denne video skal handle om Docker.
Docker er et platform-as-a-service-produkt, der kombinerer et program, alle dets afhængigheder og konfigurationsoplysninger i en enkelt pakke, der kaldes en beholder.
Docker kan derefter bruges til at sende, køre eller slette denne beholder. Vi vender tilbage til dette diagram om et øjeblik. Lad os se noget af det i aktion og se nærmere på flere detaljer undervejs. Her har vi en ny installation af Windows Server 2022.
Jeg starter guiden "Server Manager" for at tilføje "Roller" og "Funktioner". Bemærk, at jeg ved hjælp af denne guide kan tilføje funktionen "Beholdere". Dette installerer dog ikke Docker.
Det skal vi gøre hver for sig. Så for at gøre det annullerer jeg denne guide,, og jeg åbner "PowerShell" for at køre følgende linje for først at installere en påkrævet udbyder.
Install-Module, "DockerMsftProvider", og vi bruger "PSGallery" som kilde. Så trykker jeg på Enter. Ved denne meddelelse skal du sige "Ja" for at installere NuGet og vente på, at det afsluttes.
Nu kører jeg den anden linje for at installere selve Docker. Install-Package, "docker", og angiv derefter "DockerMsftProvider", som vi installerede tidligere. Tryk på Enter. Og når du bliver bedt om det, skal du vælge "Ja" for at fortsætte.
Bemærk, at du bliver bedt om at genstarte computeren. Lad os gøre det ved at skrive "Restart-Computer". Når computeren sikkerhedskopierer, åbner jeg igen guiden "Tilføj roller og funktioner" i "Server Manager".
Du vil bemærke, at funktionen "Beholdere" allerede er installeret. Det gjorde vi med de to PowerShell-linjer, vi kørte tidligere. I "PowerShell" kan kørsel af en kommando som "Docker" give os en idé om alle de ting, vi kan foretage os.
Docker-versionen fortæller os for eksempel, at vi kører med motorversion 20.10.9. En anden kommando "docker info" kan fortælle os, at vi endnu ikke har oprettet vores første beholder.
Og dette felt giver os også oplysninger som f.eks. antallet af CPU er og RAM, der er tilgængelige for beholdere, "Standardisolationsmetode" og oprettede "Netværkstyper", som vi ikke kommer ind på nu.
Lad os bare gennemføre trinene for at oprette og køre vores første beholder på denne Windows-boks, hvor vi lige har installeret Docker. Tilbage i dette diagram skal vi huske, at Docker er et værktøj til at pakke flere elementer i en beholder. Så hvis vi f.eks. skal oprette beholdere på et webprogram, er vi nødt til at lægge flere ting i den pågældende beholder.
Først skal vi bruge en "Docker-fil". Denne fil indeholder konfigurationsoplysninger og instruktioner, der er nødvendige for at oprette en ny beholder. En Docker-fil ser således ud. Den kan være meget kompleks eller meget enkel.
Vi opretter en om et øjeblik. Vi har også brug for et beholderbillede. Et billede er som en skrivebeskyttet skabelon. Du kan f.eks. oprette en beholder ved hjælp af skabelonen "Windows Server Core", eller du kan bruge en "Nano Server"-skabelon.
Dette billede eller skabelon indeholder også nogle af de afhængigheder, som webprogrammet skal bruge, såsom "IIS"-tjenesten og udviklingsstrukturen. Endelig har vi brug for selve webprogrammet.
Docker giver dig mulighed for at sætte alt dette sammen for at oprette en beholder. Lad os se dette i aktion. Tilbage i den computer, hvor vi lige har installeret Docker i PowerShell, skifter jeg til roden af C-drevet og opretter et nyt bibliotek med navnet "Beholdere".
Jeg skifter til denne nye mappe med "Beholdere", og for at oprette vores første beholder skal vi bruge den Docker-fil, vi omtalte tidligere. Husk, at dette er en tekstfil med et sæt instruktioner til beholderen.
Det gør jeg ved at skrive "Nyt element" og angive navnet "Docker-fil". Bemærk, at denne Docker-fil ikke har noget filtypenavn. Vi kan se denne fil, der er oprettet i Windows Stifinder. Vi åbner den med Notesblok.
For at holde denne første beholder enkel tilføjer vi blot tre linjer til denne Docker-fil. Jeg vil forklare dem en efter en. Først fortæller "Fra"-instruktionen Docker, hvilket beholderbillede der skal bruges til at oprette beholderen.
Husk, at et billede er som en skabelon. I dette tilfælde instruerer vi Docker i at bruge et billede fra Microsoft-beholderregistreringsdatabasen, som er baseret på Windows Server Core, og som også har rollen "IIS" installeret.
Den anden linje angiver, hvilke kommandoer der skal køres på det nye beholderbillede, når den er udført. Vi kan medtage kommandoer til installation af software eller oprettelse af filer og mapper.
Men i dette tilfælde instruerer vi blot Docker til at køre PowerShell på beholderen, når den kører. "Kopier"-instruktionen kopierer til sidst filer eller mapper fra værtscomputeren til beholderens filsystem.
I dette tilfælde instruerer vi Docker om at kopiere et filnavn "index.html", som vil blive oprettet om et øjeblik, og som fungerer som vores eksempel på webprogram fra værtscomputeren til denne mappe i beholderen, hvilket tilfældigvis er den virtuelle standardmappesti for IIS.
Og det var det. Lad os gemme denne Docker-fil. Gå nu tilbage til PowerShell for at oprette den webside, der skal køre i denne beholder. Det gør jeg ved at bruge "New-Item"-commandletten igen og derefter angive "index.html" som navnet på filen.
Vi åbner denne fil i Windows Stifinder med Notesblok. Og igen, for at gøre det enkelt, tilføjer vi blot tre linjer til dette eksempel på et HTML-program, bare en "Hello World"-basiswebside.
Jeg gemmer dette. Og nu har vi alle de komponenter, der er nødvendige for at oprette en beholder. Docker er installeret på denne Windows Server-boks.
Vi har Docker-filen, som vi oprettede tidligere med instruktioner om at bruge serverens kernebillede fra Microsoft-registreringsdatabasen, der har IIS.
Og i Docker-filens instruktioner har vi også medtaget instruktioner om at kopiere HTML-websiden til den nye beholder, når vi har oprettet den. Men det eneste, vi har, er en række instruktioner. Der er ikke noget, der kører endnu.
Så går vi tilbage i PowerShell for faktisk at oprette et billede baseret på disse instruktioner. Vi kører kommandoen "docker" og "build" og tildeler derefter navnet eller tagwebserveren.
Og denne efterfølgende prik angiver til sidst, at vi kommer til at arbejde på denne beholdermappe, hvor vi har vores Docker-fil og vores "index.html"-webside. Jeg trykker på Enter.
Denne linje opretter basisbilledet, hvorfra vores beholdere oprettes ved hjælp af de instruktioner, vi angav på Docker-filen. Da det er første gang, vi starter dette billede på denne server, skal det hentes fra Microsofts beholderregistreringsdatabase.
Når alt dette er færdigt, vil kørsel af en kommando såsom docker-billeder vise et nyligt downloadet billede sammen med det navn eller det tag, som vi tildelte det. Så nu har vi et beholderbillede, som er ligesom en skabelon, husk dette. Men der er ingen beholdere, der kører endnu.
Bare for at vise, at det ikke er muligt at få adgang til vores eksempel på et webprogram endnu, åbner jeg en webbrowser og skriver "localhost". Dette mislykkes, og det forventes, fordi værten ikke har IIS og ikke kan hoste en webside.
Hvis du vil køre objektbeholderen til sidst ved hjælp af den billedskabelon, vi har hentet, skal du skrive "docker run" tilbage i PowerShell og derefter angive navnet på den pågældende beholder.
Vi bruger navnet "Beholder1". Vi bruger denne switch til at angive, at beholderen skal køre i baggrunden. Og den anden angiver, at "port 80" på beholderen knyttes til "port 80" på værten. Og vi specificerer, at denne beholder skal udføres ved hjælp af webserverbilledet, som vi har downloadet og oprettet tidligere.
Så jeg trykker bare på Enter. Og det var det hele. Dermed oprettes og udføres en beholder med navnet "Beholder1" baseret på det webserverbillede, vi lige har klargjort.
Bemærk, vi behøvede ikke at tildele hukommelse til denne beholder. Der er hverken CPU'er eller virtuelle harddiske til denne beholder, som det er tilfældet med virtuelle maskiner.
Det skyldes, at du ikke behøver at tildele disse ressourcer til en beholder. De bruger bare det, de har brug for. Lad os gå tilbage til browseren og skrive "localhost" igen.
Vi kan se, at vores eksempel på et webprogram er oppe. Ikke på værten. I stedet videresender værten port 80 til beholderen, som blev oprettet ved hjælp af de indstillinger, som vi angav på webserverbilledet, og som fik vores HTML-webside kopieret til det som anvist i Docker-filen.
Vi kan interagere med denne nyoprettede beholder via kommandolinjen. Jeg åbner f.eks. et nyt PowerShell-vindue og skriver kommandoen "docker exec-ti" for at angive, at vi skal oprette forbindelse til denne beholder interaktivt.
Navnet på beholderen, "Beholder1" og derefter "powershell". Denne Docker-kommando åbner PowerShell i Beholder1, som vi lige har oprettet, og den viser os en meddelelse.
I dette tilfælde kan vi, hvis vi f.eks. skriver "hostname", se, at denne beholder er blevet tildelt et computernavn. Hvis du indtaster en kommando som f.eks. "ipconfig", vil det vise, at denne beholder også er blevet tildelt en IP-adresse, der bruger netværksadresseoversættelse til at kommunikere med værten og videre.
Jeg foretager en lille ændring af den HTML-webside, vi oprettede tidligere. Rediger den i Notesblok, og rediger denne overskrift her for at læse "Beholder2" i stedet for "Beholder1". Gem denne fil. Og tilbage i PowerShell bruger jeg de samme to linjer, som vi brugte tidligere til at oprette og køre vores første beholder.
Først forbliver linjen "docker build" uændret. Bemærk, når jeg trykker på Enter, sker det stort set med det samme. Og det skyldes, at vi allerede har downloadet det serverkernebillede, som har IIS-rollen installeret fra Microsofts beholderregistreringsdatabase.
Den anden linje, "docker run"-linjen, redigerer vi blot for at oprette en ny beholder med navnet "Beholder2", og vi får denne beholder til at lytte ved "port 8080" i stedet for "port 80", som er den, vi har tildelt til "Beholder1".
Vi trykker på "Enter", og når det er afsluttet, går jeg tilbage i browseren til "localhost", men denne gang angiver jeg "port 8080". Vi kan se, at websiden, der lytter på port 8080, hostes af "container #2", som vi lige har oprettet. Mens den, der lytter ved port 80, er standarden for HTTP hostet af "container # 1".
Vi kan også se det samme i PowerShell ved at køre "docker ps". Container #1 lytter ved Port 80, mens "Container #2" lytter ved Port 8080. container #1 og "container #2" har deres eget værtsnavn, IP-adresser og er vært for deres egne websteder.
Eventuelle ændringer, der forekommer i "Beholder1", påvirker ikke "Beholder2". Bemærk, at vi kunne gøre alt dette uden at installere rollen "IIS" eller "hyper v" på værtsserveren.
Vi var heller ikke nødt til at tildele ressourcer som RAM eller CPU eller virtuelle harddiske eller konfigurere netværk. Når basisskabelonbilledet er lokalt, tager oprettelsen af pladsholderen mellem to og tre sekunder.
Til sidst vil jeg kort fortælle om, hvad du kan køre i en beholder. Beholdere i Windows blev først understøttet i Windows Server 2016 og Windows 10. Så ideelt set er det hostede program kompatibelt med disse operativsystemer og nyere.
Hvis et program har brug for en grafisk brugergrænseflade eller drivere, er det ikke egnet til at blive installeret på en beholder. Du kan dog bruge en beholder til at hoste programstrukturer som "Asp.net" eller "Apache", programmeringssprog som "Python", og endda databaser i form af tjenester som sqlserver-express, "mongodb" eller "mysql".
I øjeblikket understøttes det ikke til at hoste Windows-infrastrukturroller som f.eks. "domænecontroller", "DNS" eller "DHCP" på beholdere, men hvem ved, hvad fremtiden vil bringe.
Så dette var en hurtig gennemgang af: Hvad er beholdere, hvordan køres de på en Windows Server-boks, og hvad kan du bruge dem til? Jeg håber, at du fandt disse oplysninger nyttige, og jeg vil gerne takke dig mange gange for at se med.