Denne videoen er et kort sammendrag av hva beholdere er, hvordan du kjører dem på en Windows Server-boks, og hva de kan brukes til. En beholder er et isolert miljø der en applikasjon kan kjøres.
Beholderen, applikasjonen og alle avhengighetene er konstruert med deler av vertens ressurser, for eksempel et kjerneoperativsystem, en prosessor og et minne. De er også logisk atskilt fra andre beholdere og fra selve verten.
Dette diagrammet viser hvordan en rød og en gul beholder eksisterer sammen i samme vert og bruker de samme maskinvareressursene og kjerneoperativsystemet, men ligger på hver sin plass slik at de kan kjøre applikasjonene sine uten eksterne forstyrrelser.
Den samme maskinvaren og operativsystemet som er installert på denne maskinvaren, kan kjøre sine egne applikasjoner og tjenester, uavhengig av det som skjer i hver beholder.
Denne beholderen kan fjernes som standard. Når den stoppes, slettes all programvaren og alle filene som ligger på den. Det samme skjer hvis verten startes på nytt.
Beholderen bruker også brannmuren til vertsdatamaskinen. Nå skal vi sammenligne alt dette med en virtuell maskin. For det første kan du kjøre en beholder på en virtuell maskin, men ikke omvendt.
En virtuell maskin simulerer en hel datamaskin. Derfor må den kjøre sitt eget operativsystem, noe som gir bedre sikkerhet, men samtidig krever mer konfigurasjon og vedlikehold. Dette fører ofte til inaktive ressurser.
Du kan bruke en rekke produkter når du jobber med beholdere, inkludert Visual Studio, Azure, Kubernetes og Windows, men i denne videoen skal vi snakke om Docker.
Docker er et plattform-som-en-tjeneste-produkt som tar opp jobben med å kombinere et program, alle avhengigheter og konfigurasjonsinformasjon i en enkelt pakke kalt en beholder.
Deretter kan Docker brukes til å sende, kjøre eller slette denne beholderen. Vi kommer tilbake til dette diagrammet om litt. Nå skal vi se på noe av dette i praksis og dekke flere detaljer underveis. Her har vi en ny installasjon av Windows Server 2022.
Jeg starter "Server Manager"-veiviseren for å legge til roller og funksjoner. Legg merke til at jeg kan legge til "Containers"-funksjonen når jeg bruker denne veiviseren. Dette installerer imidlertid ikke Docker.
Det må vi gjøre for seg. Jeg avslutter derfor denne veiviseren og åpner "PowerShell" for å kjøre følgende linje og installere en nødvendig tjeneste.
Install-Module, "DockerMsftProvider" og vi bruker "PSGallery" som kilde. Deretter trykker jeg på Enter. På denne ledeteksten svarer jeg "Yes" for å installere NuGet, og venter til installasjonen er fullført.
Nå kjører jeg den andre linjen for å installere selve Docker. Install-Package, "docker", og angi deretter "DockerMsftProvider" som vi installerte tidligere. Trykk på Enter. På ledeteksten som vises hvert øyeblikk, svarer jeg "Yes" for å fortsette.
Legg merke til ledeteksten for å starte datamaskinen på nytt. Vi gjør dette ved å skrive inn "Restart-Computer". Når datamaskinen er sikkerhetskopiert, åpner jeg "Legg til roller og funksjonsveiviser" i "Server Manager" igjen.
Du ser at "Containers"-funksjonen allerede er installert. Vi gjorde dette med de to PowerShell-linjene vi kjørte tidligere. Hvis vi kjører en kommando som "docker" i "PowerShell", får vi et innblikk i alt vi kan gjøre.
Docker-versjonen vil for eksempel fortelle oss at vi kjører med motorversjon 20.10.9. En annen kommando, "docker info", forteller oss at vi ikke har opprettet vår første beholder ennå.
Denne beholderen gir oss også informasjon om mengden prosessorer og RAM som er tilgjengelig for beholdere, standard isolasjonsmetode og nettverkstypene vi har opprettet, men det skal vi ikke ta for oss nå.
Nå skal vi utføre trinnene for å konstruere og kjøre vår første beholder på denne Windows-boksen der vi akkurat installerte Docker. La oss gå tilbake til diagrammet og huske på at Docker er et verktøy som brukes til å kombinere flere elementer til en beholder. Hvis vi for eksempel skal gjøre en nettapplikasjon om til en beholder, må vi plassere en rekke elementer i denne beholderen.
Først trenger vi en "Dockerfile"-fil. Denne filen har konfigureringsinformasjonen og instruksjonene som trengs for å opprette en ny beholder. En Dockerfile-fil ser slik ut. Den kan være svært kompleks eller svært enkel.
Vi skal opprette en om et øyeblikk. Vi trenger også en beholderavbildning. En avbildning er som en skrivebeskyttet mal. Du kan for eksempel konstruere en beholder med malen for "Windows Server Core", eller bruke en "Nano Server"-mal.
Avbildningen eller malen gir også noen av avhengighetene som nettapplikasjonen trenger, for eksempel "IIS"-tjenesten og utviklingsrammeverket. Til slutt trenger vi selve nettapplikasjonen.
Med Docker kan vi samle alt dette for å opprette en beholder. Nå skal vi se på dette i praksis. Jeg går tilbake til datamaskinen der vi akkurat installerte Docker i PowerShell, bytter til roten av C-stasjonen og oppretter en ny katalog kalt "containers".
Jeg bytter til denne nye "containers"-katalogen, og for å opprette vår første beholder trenger vi Dockerfile-filen vi nevne tidligere. Husk at dette er en tekstfil med et sett instruksjoner for beholderen.
Jeg gjør dette ved å skrive inn "New-Item" og angi navnet, "dockerfile". Legg merke til at denne Dockerfile-filen ikke har en filtype. Vi kan se denne filen som ble opprettet i Windows Utforsker. Vi åpner den med Notisblokk.
Vi holder denne første beholderen enkel ved å legge til bare tre linjer i denne Dockerfile-filen. Jeg skal forklare dem hver som seg. "From"-instruksjonen forteller Docker hvilken beholderavbildning som skal brukes til å opprette beholderen.
Husk at en avbildning er som en mal. I dette tilfellet ber vi Docker om å bruke en avbildning fra Microsoft-beholderregisteret som er basert på Windows Server Core, og som også har "IIS"-rollen installert.
Den andre linjen angir hvilke kommandoer som skal kjøres på den nye beholderavbildningen så snart det kjører. Vi kunne ha inkludert kommandoer for programvareinstallasjon oppretting av filer og kataloger.
Men i dette tilfelle ber vi bare Docker om å kjøre PowerShell på beholderen så snart den kjører. "Copy"-instruksjonen kopierer filer eller kataloger fra vertsdatamaskinen til beholderens filsystem.
I dette tilfellet ber vi Docker om å kopiere filnavnet "index.html" som opprettes om et øyeblikk, og som fungerer som eksempelnettapplikasjonen vår fra vertsdatamaskinen til denne mappen i beholderen. Dette er standardbanen for virtuelle kataloger for IIS.
Det var det. Vi lagrer denne Dockerfile-filen. Nå går til tilbake til PowerShell for å opprette nettsiden som skal kjøres i denne beholderen. Jeg gjør dette ved å bruke kommandoen "New-Item" på nytt og deretter angi "index.html" som navnet på filen.
Vi åpner denne filen i Windows Utforsker med Notisblokk. Vi holder det enkelt igjen ved å bare legge til tre linjer i denne HTML-eksempelapplikasjonen, bare en enkel "Hello World"-nettside.
Jeg lagrer denne. Nå har vil alle de tre komponentene vi trenger for å opprette en beholder. Docker er installert på denne Windows Server-boksen.
Vi har Dockerfile-filen som vi opprettet tidligere, med instruksjoner om å bruke Server Core-avbildningen fra Microsoft-registeret som har IIS.
I Dockerfile-filinstruksjonene inkluderte vi også instruksjoner om å kopiere HTML-nettsiden til denne nye beholderen så snart vi har konstruert den. Alt vi har, er et sett med instruksjoner. Ingenting kjører ennå.
Vi går tilbake til PowerShell for å opprette en avbildning basert på disse instruksjonene ved å kjøre "docker" og "build", og deretter tilordne navnet eller taggen "web server".
Det etterfølgende punktumet indikerer at vi kommer til å jobbe med denne beholderkatalogen, der vi har Dockerfile-filen og "index.html"-nettsiden vår. Jeg trykker på Enter.
Denne linjen oppretter standardavbildningen som beholderne våre skal opprettes fra, ved hjelp av de angitte instruksjonene på denne Dockerfile-filen. Siden vi aktiverer denne avbildningen på denne serveren for første gang, må den lastes ned fra Microsoft-beholderregisteret.
Når alt dette er fullført, kan vi kjøre en kommando som docker images, og vise en nylig nedlastet avbildning sammen med navnet eller taggen vi tilordnet avbildningen. Nå har vi en beholderavbildning som er akkurat som en mal. Ingen beholdere kjører ennå.
For å vise at det ikke er mulig å få tilgang til eksempelnettapplikasjonen vår ennå, åpner jeg en nettleser og skriver inn "localhost". Dette mislykkes, noe som er forventet siden verten ikke har IIS, og ikke kan drifte en nettside.
For å kjøre beholderen ved hjelp av avbildningsmalen som vi lastet ned, kan vi gå tilbake til PowerShell, skrive inn "docker run" og angi navnet på beholderen.
Vi bruker navnet "container1". Vi bruker denne bryteren for å angi at beholderen skal kjøre i bakgrunnen. Vi bruker denne bryteren for å angi at "port 80" i beholderen skal tilordnes "port 80" på verten. Vi angir også at denne beholderen skal kjøres med nettserveravbildningen som vi lastet ned og konstruerte tidligere.
Jeg trykker på Enter. Og det var det. Dette oppretter og kjører en beholder kalt "container1" basert på nettserveravbildningen som vi akkurat klargjorde.
Legg merke til at vi ikke trengte å tilordne minne til denne beholderen. Heller ikke prosessorer eller virtuelle harddisker, slik vi må med virtuelle maskiner.
Det er ikke nødvendig å tilordne disse ressursene til en beholder. Den bruker bare det den trenger. Nå går vi tilbake til nettleseren og skriver inn "localhost" på nytt.
Vi ser at eksempelnettapplikasjonen vår er oppe. Ikke på verten. Verten videresender i stedet port 80 til beholderen, som ble opprettet med innstillingen vi angav på nettserveravbildningen, og som fikk HTML-nettsiden vår kopiert til seg, i henhold til instruksjonen i Dockerfile-filen.
Vi kan samhandle med denne nyopprettede beholderen via kommandolinjen. Jeg kan for eksempel åpne et nytt PowerShell-vindu og skrive inn kommandoen "docker exec -ti" for å angi at vi skal koble til denne beholderen interaktivt.
Navnet på beholderen, "container1", og deretter "powershell". Denne Docker-kommandoen åpner PowerShell i container1 som vi akkurat opprettet, og gir oss en ledetekst.
Hvis vi for eksempel skriver inn "hostname", kan vi se at denne beholderen er tilordnet et datamaskinnavn. Hvis vi skriver inn en kommando som "ipconfig", ser vi at denne beholderen også er tilordnet en IP-adresse som bruker Network Address Translation til å kommunisere med verten og annet.
Jeg skal gjøre en liten endring på HTML-nettsiden vi opprettet tidligere. Jeg redigerer den i Notisblokk og endrer denne overskriften til "container #2" i stedet for "container #1". Lagre denne filen. Jeg går tilbake til PowerShell og bruker de samme to linjene som vi brukte tidligere for å konstruere og kjøre vår første beholder.
Den første linjen, "docker build", endres ikke. Legg merke til at dette skjer umiddelbart når jeg trykker på Enter. Grunnen til dette er at vi allerede har lastet ned Server Core-avbildningen som har IIS-rollen installert fra Microsoft-beholderregisteret.
Vi endrer den andre linjen, "docker run", for å opprette en ny beholder kalt "container2", og vi får denne beholderen til å lytte ved "port 8080" i stedet for "port 80", som er porten vi tilordnet "container1".
Vi trykker på "Enter". Når dette er fullført, går vi tilbake til nettleseren og "localhost", men denne ganger angir vi "port 8080". Vi kan se at nettsiden lytter på port 8080 er vert for "container # 2" som vi nettopp opprettet. Den som lytter ved port 80, standarden for HTTP, driftes av "container #1".
Vi kan også se det samme i PowerShell ved å kjøre "docker ps". Container #1 lytter ved port 80, mens "container #2" lytter ved port 8080. beholder #1 og "container #2" har sine egne vertsnavn og IP-adresser, og drifter sine egne nettsteder.
Eventuelle endringer i "container #1" påvirker ikke "container #2". Legg merke til at vi kunne gjøre alt dette uten å installere "IIS"-rollen eller "hyper v"-rollen på vertsserveren.
Vi trengte heller ikke å tilordne ressurser som arbeidsminne, prosessor eller virtuelle disker, eller konfigurere nettverk. Så snart standardmalavbildningen var lokal, tok det oss to til tre sekunder å opprette beholderen.
Til slutt vil jeg nevne hva du kan kjøre i en beholder. Beholdere i Windows ble først støttet i Windows Server 2016 og Windows 10. Ideelt sett er den driftede applikasjonen derfor kompatibel med disse systemene og nyere versjoner.
Hvis en applikasjon trenger et grafisk grensesnitt eller drivere, er den ikke egnet for implementering i en beholder. Du kan imidlertid bruke en beholder til å drifte applikasjonsrammeverk som "Asp.net" eller "Apache", programmeringsspråk som "Python", og til og med databaser i form av tjenester som sqlserver-express, "mongodb" eller "mysql".
Drift av Windows-infrastrukturroller, f.eks. "domain controller", "DNS" eller "DHCP", støttes ikke i beholdere for øyeblikket, men dette kan endres i fremtiden.
Dette var et kort sammendrag av hva beholdere er, hvordan du kjører dem på en Windows Server-boks, og hva du kan bruke dem til. Jeg håper at denne informasjonen var nyttig. Takk for at du så på.