Deze video is een kort overzicht van wat containers zijn, hoe ze op een Windows Server-apparaat moeten worden uitgevoerd en waarvoor ze kunnen worden gebruikt. Een container is een geïsoleerde omgeving waar een applicatie kan worden uitgevoerd.
De container, de applicatie en al zijn afhankelijkheden zijn geconstrueerd met delen van de resources van de host, zoals een kernelbesturingssysteem, CPU en geheugen. En ze zijn logisch gescheiden van andere containers en van de host zelf.
Dit diagram illustreert hoe een rode en een gele container naast elkaar bestaan binnen dezelfde host met dezelfde hardwarebronnen en het kernelbesturingssysteem, maar zijn opgenomen in hun individuele ruimte, waardoor ze hun applicaties kunnen uitvoeren zonder externe interferentie.
Dezelfde hardware en het besturingssysteem dat op die hardware is geïnstalleerd, kunnen hun eigen applicaties en services uitvoeren, ook onafhankelijk van wat er op elke container gebeurt.
Standaard is deze container wegwerpbaar. Wanneer het wordt gestopt, worden alle software en bestanden erop verwijderd. Hetzelfde gebeurt als de host opnieuw opstart.
De containers maken ook gebruik van de firewall van de hostcomputer. Laten we dat allemaal vergelijken met een virtuele machine. Ten eerste kunt u een container op een virtuele machine uitvoeren, maar niet andersom.
Een virtuele machine simuleert een hele computer. Daarom moet het zijn eigen besturingssysteem uitvoeren, wat een betere beveiliging mogelijk maakt, maar tegelijkertijd meer configuratie en onderhoud vereist, en dit resulteert vaak in inactieve resources.
Er zijn meerdere manieren om met containers te werken, waaronder Visual Studio, Azure, Kubernetes en Windows, maar laten we het in deze video hebben over Docker.
Docker is een platform-as-a-service-product dat de taak op zich neemt om een applicatie, al zijn afhankelijkheden, en configuratie-informatie te combineren in een enkel pakket dat een container wordt genoemd.
Docker kan vervolgens worden gebruikt om die container te verzenden, uit te voeren of te verwijderen. We komen zo op dit diagram terug. Laten we een deel hiervan in actie zien en onderweg wat meer details bespreken. Hier hebben we een nieuwe installatie van Windows Server 2022.
Ik zal de wizard "Server Manager" starten om "Roles" en "Features" toe te voegen. Merk op dat ik met deze wizard de functie "Containers" kan toevoegen. Dit installeert Docker echter niet.
Dat moeten we apart doen. Dus om dat te doen, annuleer ik deze wizard, en open ik "PowerShell" om de volgende regel uit te voeren om eerst een vereiste provider te installeren.
Install-Module, de "DockerMsftProvider" en we gebruiken de "PSGallery" als een bron. Ik druk op Enter. Antwoord bij deze prompt met "Ja" om NuGet te installeren en wacht tot het klaar is.
Nu zal ik de tweede regel uitvoeren om Docker zelf te installeren. Install-Package, "docker" en geef vervolgens de "DockerMsftProvider" op die we eerder hebben geïnstalleerd. Druk op Enter. En achter de prompt waar we zo dadelijk zullen aankomen, zegt u "Ja" om door te gaan.
Let op de prompt om de computer opnieuw op te starten. Laten we dat doen door "Restart-Computer" te typen. Met de computer weer aan, open ik de "Add Roles and Features Wizard" in "Server Manager" opnieuw.
U zult merken dat de functie "Containers" al is geïnstalleerd. We hebben dit gedaan met de twee PowerShell-opdrachten die we eerder hebben uitgevoerd. In "PowerShell" zal het uitvoeren van een opdracht zoals "docker" ons een idee geven van alle dingen die we kunnen doen.
De Docker-versie zal ons bijvoorbeeld vertellen dat we werken met engine-versie 20.10.9. Een andere opdracht, "docker info" zal ons vertellen dat we onze eerste container nog moeten maken.
En dit vak geeft ons ook details zoals het aantal CPU's en RAM dat beschikbaar is voor containers, de "Default Isolation Method" en de "Network" types die zijn gemaakt, die we nu niet gaan bespreken.
Laten we gewoon de stappen uitvoeren om onze eerste container te bouwen en uit te voeren op dit Windows-apparaat waar we zojuist Docker hebben geïnstalleerd. Laten we terug in dit diagram onthouden dat Docker een hulpmiddel is om meerdere items in een container te verpakken. Dus als we bijvoorbeeld een webapplicatie in een container zouden plaatsen, moeten we verschillende items in die container plaatsen.
Eerst hebben we een "Dockerfile" nodig. Dit bestand bevat configuratie-informatie en instructies die nodig zijn om een nieuwe container te maken. Een Dockerfile ziet er als volgt uit. Het kan heel ingewikkeld of heel eenvoudig zijn.
We zullen er zo een maken. We hebben ook een containerimage nodig. Een image lijkt op een alleen-lezen sjabloon. U kunt een container bouwen met behulp van de sjabloon van "Windows Server Core" of bijvoorbeeld een "Nano Server" sjabloon gebruiken.
Deze image of sjabloon biedt ook enkele van de afhankelijkheden die de webapplicatie nodig heeft, zoals de "IIS"-service en de development framework. Ten slotte hebben we de webapplicatie zelf nodig.
Met Docker kunt u dit allemaal samenvoegen om een container te maken. Laten we bekijken hoe dit gaat. Terug op de computer waar we Docker zojuist in PowerShell hebben geïnstalleerd, schakel ik over naar de hoofddirectory van de C-schijf en maak ik een nieuwe directory met de naam "containers".
Ik zal overschakelen naar deze nieuwe directory "containers" en om onze eerste container te maken, hebben we de Dockerfile nodig die we eerder hebben besproken. Onthoud dat dit een tekstbestand is met een verzameling instructies voor de container.
Ik doe dit door "New-Item" te typen en de naam "dockerfile" op te geven. Merk op dat deze Dockerfile geen extensie heeft. We kunnen dit bestand zien dat is gemaakt in Windows Verkenner. We openen het met Kladblok.
Om deze eerste container eenvoudig te houden, voegen we drie regels toe aan deze Dockerfile. Ik zal ze een voor een uitleggen. Ten eerste vertelt de instructie "From" aan Docker welke containerimage zal worden gebruikt voor het maken van de container.
Onthoud dat een image op een sjabloon lijkt. In dit geval geven we Docker de opdracht om een image uit het Microsoft-containerregister te gebruiken dat is gebaseerd op Windows Server Core en waarop ook de rol 'IIS' is geïnstalleerd.
De tweede regel geeft aan welke opdrachten moeten worden uitgevoerd op de nieuwe containerimage zodra deze wordt uitgevoerd. We kunnen opdrachten opnemen voor het installeren van software of het maken van bestanden en directories.
Maar in dit geval geven we Docker alleen de opdracht om PowerShell op de container uit te voeren zodra deze actief is. De "Copy"-instructie, ten slotte, kopieert bestanden of directories van de hostcomputer naar het bestandssysteem van de container.
In dit geval geven we Docker de opdracht om een bestandsnaam "index.html" te kopiëren die zo zal worden gemaakt en die dient als onze voorbeeldwebapplicatie van de hostcomputer naar deze map in de container, die het standaard virtuele directorypad voor IIS blijkt te zijn.
En dat is het. Laten we deze Dockerfile opslaan. Ga nu terug naar PowerShell om de webpagina te maken die in die container wordt uitgevoerd. Ik doe dit door de opdracht "New-Item" opnieuw te gebruiken en vervolgens "index.html" op te geven als de naam van het bestand.
We openen dit bestand in Windows Verkenner met Kladblok. En om dit eenvoudig te houden, voegen we nogmaals drie regels toe aan deze voorbeeld-HTML-applicatie, gewoon een eenvoudige "Hallo wereld"-webpagina.
Ik ga dit opslaan. En nu hebben we alle componenten die nodig zijn om een container te maken. Docker is geïnstalleerd op dit Windows Server-apparaat.
We hebben de Dockerfile, die we eerder hebben gemaakt met de instructies om de servercore-image te gebruiken uit het Microsoft-register met IIS.
En ook hebben we de instructies van die Dockerfile opgenomen om de HTML-webpagina naar die nieuwe container te kopiëren zodra we deze hebben gebouwd. Maar het enige wat we hebben is een reeks instructies. Er wordt nog niets uitgevoerd.
Dus, terug in PowerShell om daadwerkelijk een image te maken op basis van die instructies, zullen we "docker", "build" uitvoeren en vervolgens de naam of tag-webserver toewijzen.
En deze punt aan het eind geeft aan dat we gaan werken aan deze containermap, waar we onze Dockerfile en onze "index.html" webpagina hebben. Ik druk op Enter.
Deze regel maakt de basisimage van waaruit onze containers worden gemaakt met behulp van de instructies die we in die Dockerfile hebben opgegeven. Omdat dit de eerste keer is dat we deze image op deze server hebben aangeroepen, moet deze worden gedownload van het Microsoft-containerregister.
Als dit allemaal is voltooid, zal het uitvoeren van een opdracht zoals docker-images een recent gedownloade image weergeven samen met de naam of tag die we eraan hebben toegewezen. Dus we hebben nu een containerimage die vergelijkbaar is met een sjabloon. Maar er worden nog geen containers uitgevoerd.
Om te laten zien dat het nog niet mogelijk is om toegang te krijgen tot onze voorbeeldwebapplicatie, open ik een webbrowser en typ ik "localhost". Dit mislukt en dit wordt verwacht omdat de host geen IIS heeft en geen webpagina kan hosten.
Om de container uiteindelijk uit te voeren met behulp van de imagesjabloon die we hebben gedownload, typen we in PowerShell "docker run" en geven we vervolgens de naam voor die container op.
We gebruiken de naam "container1". We gebruiken deze schakeloptie om op te geven dat de container op de achtergrond wordt uitgevoerd. En deze andere om aan te geven dat "port 80" op de container wordt toegewezen aan "port 80" op de host. En we specificeren dat deze container moet worden uitgevoerd met behulp van de webserver-image die we eerder hebben gedownload en gebouwd.
Dus ik druk gewoon op Enter. En dat is alles. Dit creëert en voert een container uit met de naam "container1" op basis van de webserver-image die we zojuist hadden voorbereid.
We hoefden geen geheugen toe te wijzen aan deze container. Noch CPU's noch virtuele harde schijven aan deze container, zoals het geval is bij virtuele machines.
U hoeft deze resources namelijk niet aan een container toe te wijzen. Ze gebruiken gewoon wat ze nodig hebben. Laten we teruggaan naar de browser en "localhost" opnieuw invoeren.
We zien dat onze voorbeeldwebapplicatie in de lucht is. Niet op de host. In plaats daarvan stuurt de host poort 80 door naar de container, die is gemaakt met behulp van de instellingen die we op de webserverimage hebben opgegeven, en waarnaar onze HTML-webpagina is gekopieerd volgens de instructies in de Dockerfile.
We kunnen communiceren met deze nieuw gemaakte container via de opdrachtregel. Ik open bijvoorbeeld een nieuw PowerShell-venster en voer de opdracht "docker exec -ti" in om aan te geven dat we interactief verbinding maken met deze container.
De naam van de container, "container1", en vervolgens "powershell". Deze Docker-opdracht opent PowerShell in de container1 die we zojuist hebben gemaakt en geeft ons een prompt.
Als we in dit geval bijvoorbeeld "hostname" typen kunnen we zien dat deze container een computernaam heeft gekregen. Als u een opdracht zoals "ipconfig" typt, blijkt dat deze container ook een IP-adres heeft gekregen dat Network Address Translation gebruikt om met de host en daarbuiten te communiceren.
Ik zal een kleine wijziging aanbrengen in de HTML-webpagina die we eerder hebben gemaakt. Bewerk het in Kladblok en wijzig deze kop hier, zodat er staat "container #2" in plaats van "container #1". Sla dit bestand op. En terug in PowerShell zal ik dezelfde twee regels gebruiken die we eerder hebben gebruikt om onze eerste container te bouwen en uit te voeren.
Ten eerste blijft de regel "docker build" ongewijzigd. Merk op dat wanneer ik op Enter druk, het dit vrijwel meteen doet. En dit komt omdat we de servercore-image met de IIS-rol al hebben gedownload vanuit het Microsoft-containerregister.
De tweede regel, de "docker run" -regel, we bewerken deze gewoon om een nieuwe container met de naam "container2" te maken, en we laten deze container luisteren naar "poort 8080" in plaats van "poort 80", die we hebben toegewezen aan "container1".
We drukken op "Enter" en wanneer dit klaar is, keer ik terug in de browser en ga ik terug naar "localhost" maar specificeer deze keer "poort 8080". We kunnen zien dat de webpagina die luistert op poort 8080 wordt gehost door "container #2" die we zojuist hebben gemaakt. Terwijl degene die op poort 80 luistert, de standaard voor HTTP wordt gehost door "container #1".
We kunnen hetzelfde ook zien in PowerShell door "docker ps" uit te voeren. Container #1 luistert naar poort 80, terwijl "container #2" luistert naar poort 8080. container #1 en "container #2" hebben hun eigen hostnaam, IP-adressen en hosten hun eigen websites.
Alle wijzigingen die zich voordoen in "container #1" hebben geen invloed op "container #2". Merk op dat we dit allemaal hebben kunnen doen zonder ooit de "IIS"-rol of de "hyper v"-rol op de hostserver te installeren.
We hoefden ook geen bronnen toe te wijzen, zoals RAM of CPU, of virtuele harde schijven, of netwerken te configureren. Zodra de basissjabloonimage lokaal is, kostte het maken van de container ons twee tot drie seconden.
Tot slot wil ik het kort hebben over wat u in een container kunt uitvoeren. Ten eerste werden containers op Windows voor het eerst ondersteund in Windows Server 2016 en Windows 10. Dus idealiter is de gehoste applicatie compatibel met deze besturingssystemen en nieuwer.
Als een applicatie een grafische gebruikersinterface of drivers nodig heeft, is deze niet geschikt om op een container te worden geïmplementeerd. U kunt echter een container gebruiken voor het hosten van Application Frameworks zoals "Asp.net" of "Apache", programmeertalen zoals "Python", zelfs databases in de vorm van services zoals sqlserver-express, "mongodb" of "mysql".
Momenteel wordt het niet ondersteund om Windows-infrastructuurrollen zoals "domain controller", "DNS", or "DHCP" op containers te hosten, maar wie weet wat de toekomst in petto heeft.
Dit was dus een kort overzicht van: wat zijn containers, hoe ze op een Windows-serverapparaat kunnen worden uitgevoerd en waarvoor kunt u ze gebruiken? Ik hoop dat u deze informatie nuttig vindt, en ik wil u hartelijk bedanken voor het kijken.