4.1 Windows-containers implementeren

Virtualisatie is al sinds de begindagen van Windows een belangrijk kenmerk. Virtueel geheugen bestaat al tientallen jaren; Windows kan schijfruimte gebruiken om het systeem te laten lijken alsof het meer geheugen heeft dan het werkelijk heeft. Hyper-V virtualiseert hardware, creërt computers op een computer die hun eigen processors, geheugen en schijven lijken te hebben, terwijl ze in feite de bronnen van de hostserver delen. Containers is een nieuwe functie in Windows Server 2016 dat besturingssystemen virtualiseert.

4.1.1 Bepaal de installatievereisten en de juiste scenario’s voor Windows containers

Net zoals virtuele machines voorzien wat afzonderlijke computers lijken, bieden containers dat ook, wat afzonderlijke exemplaren van het besturingssysteem lijken te zijn, elk met een eigen geheugen en bestandssysteem en met een schoon, nieuw exemplaar van het besturingssysteem. In tegenstelling tot virtuele machines, die echter afzonderlijke kopieën van het besturingssysteem draaien, delen containers het besturingssysteem van het hostsysteem. Het is niet nodig om een afzonderlijk exemplaar van het besturingssysteem te instellaren voor elke container, noch voert de container een opstartvolgorde uit, het laden bibliotheken of geheugen besteden aan de bestanden van het besturingssysteem. Containers starten binnen enkele seconden, en u kunt meer containers maken op een hostsysteem dan virtuele machines.

Gebruikers die met containers werken, zien ze in eerste als een schoen systeeminstallatie instantie, klaar voor toepassingen. De omgeving is volledig gescheiden van de host en andere containers, met behulp van naamruimte-isolatie en resource governance (bronbestuur).

Naamruimte-isolatie betekent dat elke container alleen toegang heeft tot de bronnen die beschikbaar voor hen beschikbaar zijn. Bestanden, poorten en actieve processen lijken allemaal specifiek voor de container te zijn, zelfs wanneer deze gedeeld worden met de host en andere containers. De werkomgeving lijkt op die van een virtuele machine, maar in tegenstelling tot een virtuele machine, die afzonderlijke kopieën van alle bestanden van het besturingssysteem onderhoudt, deelt een container deze bestanden met de host, en kopieert ze niet. Enkel wanneer een gebruiker of toepassing een bestand in een container wijzigt wordt een kopie is gemaakt in het bestandssysteem van de container.

Resource governance betekent dat een container alleen toegang heeft tot een gespecificeerde hoeveelheid van processorcycli, systeemgeheugen, netwerkbandbreedte en andere bronnen, en niet meer. Een toepassing die in een container wordt uitgevoerd, heeft een schone sandbox-omgeving, zonder toegang tot bronnen die aan andere containers of aan de host zijn toegewezen.

4.1.1.1 Container images

De mogelijkheid om in enkele seconden nieuwe containers te maken en de geïsoleerde aard van elke container, maakt ze tot een ideaal platform voor applicatieontwikkeling en het testen van software. Echter, er is meer dan dat alleen.

Containers zijn gebaseerd op images. Om een nieuwe container te maken moet men een image downloaden vanuit een repository en het uitvoeren. Als u een afbeelding van Windows Server 2016 Server Core uitvoert, verkrijgt u een container met een schone instantie van het besturingssysteem dat erin draait. Alternatief, kunt u Windows Server-images downloaden met rollen of toepassingen, zoals internet Information Services (IIS) of Microsoft SQL Server, reeds geïnstalleerd en klaar voor gebruik.

De image van het basisbesturingssysteem verandert nooit. Als u een toepassing installeert in de container en vervolgens een nieuwe afbeelding maakt, zal de resulterende image alleen de bestanden en instellingen bevatten die nodig zijn om de applicatie uit te voeren. Natuurlijk is de nieuwe afbeelding die u hebt gemaakt relatief klein, omdat het niet het hele besturingssysteem bevat. Om de applicatie met andere mensen te delen te delen, hoeft u alleen de nieuwe, kleinere image te sturen, als ze de afbeelding van het basisbesturingssysteem hebben.

Dit proces kan zoveel iteraties doorlopen als je nodig hebt, met laag na laag van images die op de originele basis voortbouwen. Dit kan resulteren in een uiterst efficiënte software ontwikkelomgeving. In plaats van enorme VHD-bestanden over te dragen of constant te creëren en het installeren van nieuwe virtuele machines, kunt u kleine containerafbeeldingen overbrengen die uitgevoerd worden zonder hardware compatibiliteitsproblemen.

4.1.2 Installeer en configureer Windows Server container host in fysieke of gevirtualiseerde omgevingen

Windows Server 2016 ondersteunt twee soorten containers: Windows Server Containers en Hyper-V-containers. Het verschil tussen de twee ligt in de mate van container-isolatie die ze bieden. Windows Server Containers werken in de gebruikersmodus en delen alles met de hostcomputer, inclusief de kernel van het besturingssysteem en het systeemgeheugen.

Daarom is het denkbaar dat een toepassing, hetzij per ongeluk of doelbewust, zou kunnen ontsnappen uit de grenzen van zijn container en andere processen beïnvloeden die op de host of in andere containers worden uitgevoerd. Deze optie wordt daarom verondersteld om de voorkeur te hebben wanneer de applicaties die in verschillende containers worden uitgevoerd in principe betrouwbaar zijn.

Hyper-V-containers biedt een extra isolatieniveau door de hypervisor te gebruiken die afzonderlijke kopie van de kernel van het besturingssysteem voor elke container maakt. Hoewel ze zijn niet zichtbaar of getoond aan handmatig beheer, maakt Hyper-V, met behulp van de basiscontainerafbeeldingen, virtuele machines met Windows-containers erin. De containerimplementatie is in wezen hetzelfde, het verschil zit in de omgevingen waarin de twee soorten containers bestaan.

Omdat ze binnen een VM bestaan, hebben Hyper-V-containers hun eigen geheugen aan hen toegewezen, evenals geïsoleerde opslag en netwerk-I/O. Dit biedt een containeromgeving die geschikt is voor wat Microsoft “vijandige multi-tenant”-applicaties noemt, zoals een situatie waarin een bedrijf containers aan klanten levert voor het uitvoeren van hun eigen code, die misschien niet betrouwbaar is. Dus met de toevoeging van Hyper-V-containers, biedt Windows Server 2016 drie isolatieniveaus, variërend van het afzonderlijke besturingssysteem installatie van virtuele Hyper-V-machines, de gescheiden kernel en geheugen van Hyper-V containers, of de gedeelde kernel en andere bronnen van Windows Server Containers.

4.1.2.1 Installeer een container host

Windows Server 2016 bevat een functie genaamd Containers, welke u moet installeren om containerondersteuning te bieden. Maar om containers te maken en te beheren, moet u  de applicatie Docker downloaden en installeren die deze functie ondersteunt.

Om de functie Containers te installeren, kunt u de wizard Rollen en Functies toevoegen in gebruiken Hyper-V Manager en Containers op de pagina Functies selecteren.

Opmerking Installatie van Windows Server

Om Windows Server-containers te maken, moet het hostbesturingssysteem geïnstalleerd zijn op de C-schijf van de computer, wat de standaardinstelling is. Dit is om het delen van de kernel van het besturingssysteem te vergemakkelijken. Dit is geen vereiste voor het maken van Hyper-V-containers, want de hypervisor is verantwoordelijk om elke container een kopie van de kernel te voorzien.

Als u Hyper-V-containers wilt maken, moet u zowel de functie Containers als de Hyper-V-rol installeren. Ook al creëer je geen virtuele machines voor de containers, de functie Hyper-V installeert de hypervisor die nodig is om de afzonderlijke kopie van de Windows-kernel voor elke Hyper-V-container te maken.

De rol van Hyper-V heeft algemene hardwarevereisten die hoger zijn dan die van Windows Besturingssysteem Server 2016 zelf. Voordat u de Hyper-V-rol op een server kunt installeren met Windows Server 2016 moet u over de volgende hardware beschikken:

  • Een 64-bit processor met hardware-ondersteunde virtualisatie en tweede niveau adresvertaling (SLAT). Dit type virtualisatie is beschikbaar in processors die een virtualisatieoptie bevatten, zoals de Intel Virtualization Technology (Intel VT) of AMD Virtualization (AMD-V) technologie.
  • Hardware afgedwongen preventie van gegevensuitvoering (DEP), die Intel beschrijft als eXecuted Disable (XD) en AMD beschrijft als No eXecute (NS). CPU’s gebruiken deze technologie om geheugengebieden te scheiden voor opslag van processorinstructies of voor opslag van gegevens. In het bijzonder moet u Intel XD bit inschakelen (bit uitschakelen uitvoeren) of AMD NX-bit (geen bit uitvoeren).
  • VM Monitor Mode-uitbreidingen, te vinden op Intel-processors als VT-c.
  • Een systeem-BIOS of UEFI die de virtualisatiehardware ondersteunt en waarop de virtualisatiefunctie is ingeschakeld.

Wanneer u de Hyper-V-rol installeert met Hyper-V Manager, vraagt de Wizard Rollen en Functies Toevoegen om ook Hyper-V Management-tools te installeren. Als u Hyper-V-containers maakt maar geen Hyper-V virtuele machines, heeft u de de management tools niet nodig.

4.1.2.2 Containers virtualizeren

Windows Server 2016 ondersteunt het gebruik van containers binnen virtuele Hyper-V-machines. U kunt de Container-functie en de Docker-bestanden op elke virtuele machine installeren. Om Hyper-V-containers op een virtuele machine te maken, moet het systeem echter voldoen aan de vereisten voor geneste virtualisatie.

Om een geneste Hyper-V-hostserver te maken, moeten de fysieke host en de virtuele machine aan waarmee u de Hyper-V-containers maakt, beide Windows Server 2016 gebruiken. De VM kan de volledige installatie-optie Desktop Experience, Server Core of Nano Server uitvoeren. Bovendien moet de fysieke host een Intel-processor met VT-x en Extended Page Tables (EPT) virtualisatie-ondersteuning hebben.

Voordat u Hyper-V op de virtuele machine installeert, moet u de virtuele processor toegang geven tot de virtualisatietechnologie op de fysieke computer. Om dit te doen, moet u de virtuele machine afsluiten en op de fysieke host volgende opdracht als volgt uitvoeren, in een PowerShell-sessie met beheerdersrechten:

Set-VMProcessor -VMName server1 -ExposeVirtualizationExtensions $true

Bovendien moet u de volgende configuratiewijzigingen aanbrengen op de VM die functioneert als een Hyper-V-host. Elke wordt eerst gegeven als de locatie in het dialoogvenster VM-instellingen in Hyper-V Manager en vervolgens als een PowerShell-opdracht:

  • Geef de VM op de geheugenpagina minimaal 4 gigabyte (GB) RAM en schakel dynamisch geheugen uit.
    Set-VMMemory -VMName server1 -StartupBytes 4gb -DynamicMemoryEnabled $false
  • Stel op de pagina Processor het aantal virtuele processors in op 2.
    Set-VMProcessor -VMName server1 -Count 2
  • Schakel op de pagina Netwerkadapter / Geavanceerde functies MAC-adresspoofing in.
    Set-VMNetworkAdapter -VMName server1 -Name "network adapter" -MacAddressSpoofing on

Nadat u deze wijzigingen hebt aangebracht, kunt u de VM starten, de Hyper-V-rol installeren en Docker gebruiken om Hyper-V-containers te maken.

4.1.3 Installeer en configureer Windows Server containerhost op Windows Server Core of Nano Server in een fysieke of gevirtualiseerde omgeving

Een computer die is geïnstalleerd met de Server Core-optie kan als containerhost fungeren. De vereisten zijn hetzelfde als voor een server geïnstalleerd met de volledige Desktop Experience, behalve dat u de opdrachtregel moet gebruiken om de vereiste functies te installeren of om het systeem op afstand te beheren.

Nadat u bent overgeschakeld naar een PowerShell-sessie, kunt u de functie Containers en de Hyper-V-rol met de volgende opdracht installeren:

Install-WindowsFeature -Name containers, hyper-v

4.1.3.1 Configureer Nano Server als een container host

Nano Server, opgenomen in Windows Server 2016, ondersteunt beide Windows Server containers en Hyper-V-containers. De Nano Server-implementatie omvat pakketten ondersteunt zowel de Containers-functie als de Hyper-V-rol, die u kunt toevoegen wanneer u maak een Nano Server-afbeelding met de cmdlet New-NanoServerImage in Windows PowerShell, zoals in het volgende voorbeeld:

New-NanoServerImage-Deploymenttype guest -Edition datacenter -MediaPath D:\ -TargetPath C:\nano\nano1.vhdx -ComputerName nano1 -DomainName contoso -containers

Met deze opdracht maakt u een Nano Server-image met de volgende kenmerken:

  • DeploymentType guest – Maakt een afbeelding voor gebruik op een virtuele Hyper-V-machine
  • Edition datacenter – Maakt een afbeelding met de Datacenter-editie van Windows Server
  • MediaPath D:\ – Geeft toegang tot de Nano Server-bronbestanden vanaf de D-schijf
  • TargetPath – D:\nano\nano1.vhdx – Maakt een VHDX-afbeeldingsbestand in de map C:\nano met de naam Nano1.vhdx
  • ComputerName nano1 – Wijst de Nano Server de computernaam Nano1 toe
  • DomainName contoso – Voegt de computer toe aan het Contoso-domein
  • Containers – Hiermee wordt de functie Containers geïnstalleerd als onderdeel van de image
  • Compute – Installeert de Hyper-V-rol als onderdeel van de image

Als u van plan bent Hyper-V-containers op de gast Nano Server te maken, moet u deze opgeven met toegang tot de virtualisatiemogelijkheden van de Hyper-V-server, met behulp van de volgende procedure.

  1. Maak een nieuwe virtuele machine met de Nano Server-image die u hebt gemaakt, maar deze start u nog niet.
  2. Geef de virtuele machine op de Hyper-V-hostserver toegang tot de virtualisatiemogelijkheden van de fysieke processor van de Hyper-V-server, met behulp van de volgende opdracht:
    Set-VMProcessor -VMName nano1 -ExposeVirtualizationExtensions $true
  3. Start de virtuele machine van Nano Server.

Zodra de virtuele machine van Nano Server actief is, moet u een remote PowerShell-sessie instellen vanaf een andere computer, zodat u deze kunt beheren. Voer hiervoor volgend commando uit op de computer die u gebruikt om Nano Server te beheren:

Enter-PSSession -ComputerName nano1 -Credential

Opmerking Remote Nano Server Management

In dit gedeelte wordt ervan uitgegaan dat de Nano Server zich op een netwerk bevindt met een DHCP-server die zijn TCP IP-instellingen toewijst en die met succes lid is geworden van een Active Directory Domain Services-domein. Als dat niet het geval is, moet u de TCP/IP-instellingen voor de Nano Server handmatig configureren vanaf de console en vervolgens de Nano Server toevoege aan de lijst met vertrouwde hosts op de computer die u gebruikt om het te beheren.

4.1.4 Installeer Docker op Windows Server en Nano Server

Docker is een open source tool die al jaren containermogelijkheden biedt aan de Linux gemeenschap. Nu het is geporteerd, kunt u diezelfde mogelijkheden implementeren in Windows. Docker bestaat uit twee bestanden:

  • Dockerd.exe – De Docker-engine, ook wel een service of daemon genoemd, die draait op de achtergrond op de Windows-computer
  • Docker.exe – De Docker-client, een opdrachtshell die u gebruikt om container te maken en te beheren

Naast deze twee bestanden, die u moet downloaden en installeren om containers te maken, bevat Docker ook de volgende bronnen:

  • Dockerfiles – Scriptbestanden met instructies voor het maken van containerafbeeldingen
  • Docker Hub – Een cloudgebaseerd register waarmee Docker-gebruikers kunnen linken naar images en code repositories, evenals het bouwen en opslaan van hun eigen images
  • Docker Cloud – Een cloudgebaseerde service die u kunt gebruiken om uw containertoepassingen te implementeren

4.1.4.1 Installeer Docker op Windows Server

Omdat Docker een open source-product is, is het niet inbegrepen bij Windows Server 2016. Op een Windows Server 2016 Desktop Experience of Server Core-computer moet u Docker downloaden en installeren voordat u containers kunt maken. Om Docker te downloaden, gebruikt u OneGet, een cloudgebaseerde pakketbeheerder voor Windows.

Om toegang te krijgen tot OneGet, moet u de DockerMsftProvider-module installeren met behulp van het volgende commando. Als u wordt gevraagd om een NuGet-provider te installeren antwoord u met ja.

Install-Module -Name dockermsftprovider -Repository psgallery -Force

De cmdlet Install-Module downloadt de gevraagde module en installeert deze op in de map C:\Program Files\Windows PowerShell\Modules, waar het toegankelijk is vanaf elke PowerShell-prompt. Voer vervolgens de volgende Install-Package commando uit om Docker te downloaden en te installeren. Als de opdracht u vraagt om te bevestigen dat u een niet vertrouwd pakket wilt installeren, antwoord u Ja.

Install-Package -Name docker -ProviderName dockermsftprovider

Met deze opdracht wordt Dockerd.exe na het downloaden van de Docker-bestanden als een Windows service geregistreerd en voegt het de Docker.exe-client toe aan het pad, zodat deze uitvoerbaar is vanaf elke locatie in het bestandssysteem.

Nadat de installatie is voltooid, start u de computer opnieuw op met de volgende opdracht:

Restart-Computer-Force

4.1.4.2 Installeer Docker op Nano Server

Nadat u een externe PowerShell-sessie met een Nano Server-computer hebt opgezet, kunt u Docker installeren met dezelfde opdrachten als voor een Desktop Experience of Server Core systeem. Microsoft beveelt echter aan dat, zodra de Dockerd-service op de Nano Server is geïnstalleerd, u de Docker-client vanaf het externe systeem uitvoert.

Hiervoor moet u de volgende taken uitvoeren:

  1.  Maak een firewallregel. Om Docker-clientverkeer op het Nano Server toe te staan, moet u een nieuwe firewallregel maken die poort 2375 opent voor TCP-verkeer. Om dit te doen voert u de volgende opdracht uit in de Nano Server-sessie:
    netsh advfirewall firewall add rule name="docker daemon" dir=in action=allow protocol=tcp localport=2375
  2. Configureer de Dockerd-engine om netwerkverkeer te accepteren. Docker vindt zijn oorsprong in Linux, en net als de meeste Linux-applicaties, gebruikt het tekstbestanden voor configuratie. In staat te stellen de Dockerd-engine om clientverkeer via het netwerk te accepteren, moet u een tekstbestand maken met de naam daemon.json in de map C:\ProgramData\Docker op de Nano Server dat de volgende regel bevat: { “hosts”: [“tcp://0.0.0.0:2375”, “npipe://”] } De volgende twee PowerShell-opdrachten maken het nieuwe bestand en voegt de vereiste tekst in:
    New-Item -Type file C:\programdata\docker\config\daemon.json
    Add-Content 'C:\programdata\docker\config\daemon.json' '{ "hosts": ["tcp://0.0.0.0:2375", "npipe://"] }'
  3. Herstart de Dockerd-engine. Nadat u het daemon.json bestand hebt gemaakt, moet u de Dockerd-engine opnieuw opstarten met de volgende opdracht:
    Restart-Service docker
  4. Download de Docker-client. Om de Dockerd-engine op afstand te beheren, moet u de Docker.exe-client op het externe systeem downloaden en installeren (niet binnen de Nano Server sessie). Om dit te doen, kunt u een browser openen en de volgende URL intypen om het Docker-pakket te downloaden: https://download.docker.com/components/engine/windowsserver/cs-1.12/docker.zip
  5. Gebruik hiervoor de volgende opdracht om dit in PowerShell te doen:
    Invoke-webrequest “https://download.docker.com/components/engine/windowsserver/cs-1.12/docker.zip” -outfile “$env:temp\docker.zip” -Usebasicparsing
  6. Installeer Docker.exe. Als u de Docker zipbestand via een browser hebt gedownload, installeert u de applicatie door het Docker.exe-bestand uit het zip-archief te extraheren en als u het naar een map kopieert, moet u de map C:\ProgramData\Docker maken. Om dit te doen voert met PowerShell de volgende opdracht uit:
    Expand-Archive -Path "$env:temp\docker.zip" -DestinationPath $env:programfiles
  7. Stel de PATH omgevingsvariabele in. Om de Docker-client vanaf elke locatie op het beheersysteem te kunnen uitvoeren, moet u de map C:\ProgramData\Docker toevoegen aan de PATH systeem omgevingsvariabele. Om dit grafisch te doen, opent u het Systeem Eigenschappenblad vanuit het Configuratiescherm en op het tabblad Geavanceerd klikt u op Omgevingsvariabelen om het dialoogvenster weer te geven.
  8. Voer de volgende opdracht uit om dit in PowerShell te doen:
    [environment]::setenvironmentvariable("path", $env:path + ";c:\program files\docker", [environmentvariabletarget]::machine)

Nadat u deze stappen hebt voltooid, kunt u de Docker.exe-client buiten de Nano Server-sessie uitvoeren, maar moet u de volgende parameter opnemen in elke opdracht, waarbij de ipaddress variabele vervangen wordt door het adres van de gewenste Nano-server die u wilt beheren:

-h tcp://ipaddress:2375

Als u bijvoorbeeld een nieuwe container met de microsoft/nanoserver image wilt maken, zou een u opdracht zoals het volgende kunnen gebruiken:

docker -h tcp://172.21.96.1:2375 run -it microsoft/nanoserver cmd

Om te voorkomen dat u de parameter -h aan elke opdracht moet toevoegen, kunt u een nieuwe omgevingsvariabele als volgt maken:

docker_host = "tcp://ipaddress:2375"

Om dit in PowerShell te doen, gebruikt u een opdracht zoals de volgende:

$env:docker_host = "tcp: //172.21.96.1: 2375"

4.1.5 Docker Daemon opstartopties configureren

Zoals vermeld in de vorige sectie, is het configuratiebestand voor de Dockerd-engine een tekstbestand met de naam daemon.json, dat u in dezelfde map plaatst als het Dockerd.exe bestand. In aanvulling op datgene wat u eerder gebruikte om clientverkeer via het netwerk toe te staan, zijn er veel andere configuratie-instellingen die u in het bestand kunt opnemen. Alle instellingen die u kunt opnemen in een enkel daemon.json-bestand moeten worden ingesloten in een enkele set accolades, zoals in het volgende voorbeeld:

{"
graph": "d:\\docker"
"bridge" : "none"
"group" : "docker"
{"dns": 192.168.9.2, 192.168.9.6 }
}

Examen Tip

Houd er rekening mee dat de Windows-versie van Docker veel van de Linux Dockerd configuratie-instellingen ondersteunt, ze niet allemaal ondersteunen. Als u de Docker-documentatie aan het bestuderen bent, moet u er op letten dat u naar de Windows-versie van de documenten zoekt.

4.1.5.1 Images en containers omleiden

Om de Dockerd-engine te configureren om imagebestanden en containers op een alternatieve locatie op te slaan, neemt u volgende opdracht op in het bestand daemon.json, waar d:\\docker vervangen is door de locatie die u wilt gebruiken:

{"graph": "d:\\docker"}

4.1.5.2 NAT onderdrukken

Standaard maakt de Dockerd-engine een NAT-omgeving (Network Address Translation) aan voor containers, waardoor ze met elkaar en met het externe netwerk kunnen communiceren. Om dit standaardgedrag te wijzigen en te voorkomen dat de engine NAT gebruikt, neemt u volgende opdracht op in het bestand daemon.json:

{"bridge": "none"}

4.1.5.3 Een administratieve groep aanmaken

Standaard kunnen alleen leden van de lokale groep Administrators de Docker-client gebruiken om de Dockerd-engine te besturen wanneer u op het lokale systeem werkt. In sommige gevallen kunt u gebruikers deze mogelijkheid verlenen zonder hen het lidmaatschap van Administrators te geven. U kunt Dockerd configureren om een andere groep te herkennen – in dit geval wordt de groep “docker” genoemd – door middel van de volgende instelling in het bestand daemon.json.

{"group": "docker"}

4.1.5.4 DNS server adressen instellen

Om alternatieve DNS-serveradressen op te geven voor de besturingssystemen in containers, kunt u de volgende instelling toevoegen aan het bestand daemon.json, waar adres1 en adres2 de IP-adressen van DNS-servers zijn:

{"dns": "address1", "address2"}

4.1.6 Configureer Windows PowerShell voor gebruikt met containers

De Dockerd-engine wordt voorzien met een Docker.exe-clientshell, maar is hier niet afhankelijk van. U kunt ook Windows PowerShell-cmdlets gebruiken om dezelfde functies uit te voeren. De Docker PowerShell-module, net als Docker zelf, is in een constante staat van coöperatieve ontwikkeling, en is daarom niet inbegrepen bij Windows Server 2016.

U kunt de huidige versie van de PowerShell-module downloaden en installeren vanaf een repository genaamd DockerPS-Dev, met behulp van de volgende opdrachten:

Register-PSRepository -Name dockerps-dev -SourceLocation https://ci.appveyor.com/nuget/docker-powershell-dev
Install-Module docker -Repository dockerps-dev -Scope Currentuser

Nadat de download is voltooid, kunt u een lijst met Docker-cmdlets bekijken door de volgende opdracht uit te voeren:

Get-Command -Module docker

Nadat u de repository hebt geregistreerd en de Docker-module hebt geïmporteerd, hoeft deze opdrachten niet meer opnieuw uitvoeren. U kunt altijd de nieuwste versie van de module verkrijgen door de volgende opdracht uit te voeren:

Update-Module docker

4.1.7 Een basis besturingssysteem installeren

Met de Dockerd-engine en de Docker-client geïnstalleerd en operationeel, kunt u de eerste stap zetten in het maken van containers, namelijk het downloaden van een image van het basisbesturingssysteem vanuit de Docker Hub-repository. Microsoft heeft de repository van Windows voorzien Server 2016 Server Core- en Nano Server-images, die u kunt downloaden en gebruiken om containers te maken en vervolgens uw eigen containerafbeeldingen te maken.

Om de Docker-client te gebruiken, voert u het Docker.exe-bestand uit met een opdracht en soms extra opties en parameters. Om een image te downloaden, voert u Docker uit met het Pull-commando en de naam van de image. Bijvoorbeeld de volgende opdracht downloadt de Server Core-afbeelding uit de repository.

docker pull microsoft/windowsservercore

Het PowerShell-equivalent is als volgt:

Request-ContainerImage -Repository microsoft/windowsservercore

De uitvoer van de opdracht (dat enige tijd duren, afhankelijk van de snelheid van uw Internetverbinding) wordt weergegeven.

Standaard download de Docker Pull-opdracht de nieuwste versie van de opgegeven image, die wordt geïdentificeerd door de tag: “latest”. Wanneer er meerdere versies van de dezelfde image beschikbaar zijn, zoals in een applicatieontwikkelingsproject, kunt u bijvoorbeeld een van de vorige afbeeldingen specifiëren om te downloaden, door de tag op te geven. Als je de Docker Pull-opdracht met de parameter -a, u krijgt alle versies van de image. Als de image die je binnenhaalt uit meerdere lagen bestaat, zal de opdracht automatisch alle de lagen downloaden die nodig zijn om de image in een container te plaatsen.

Als u weet dat de repository een Nano Server-image heeft, maar u er niet zeker van de naam bent, kunt u de opdracht Docker Search gebruiken om deze te vinden en vervolgens Docker Pull to gebruiken om het te downloaden.

4.1.8 Tag een image

Tagging in een containerrepository is een mechanisme voor versiebeheer. Wanneer je meerdere versies van dezelfde afbeelding creëert, zoals de opeenvolgende builds van een applicatie, kunt met Docker tags toewijzen die de versies identificeren. Tags zijn meestal cijfers die de relatieve leeftijd van de image iteraties aangeven, zoals 1.1, 1.2, 2.0, enzovoort.

Er zijn twee manieren om een tag aan een image toe te wijzen. Een daarvan is om Docker met de tag opdracht uit te voeren en de andere is om Docker Build met de parameter -t uit te voeren. In beide gevallen is de indeling van de image-ID is hetzelfde.

Als u een image op uw lokale containerhost wilt taggen, gebruikt u de volgende syntaxis: 

docker tag imagename: tag

Als u de afbeelding naar de Docker Hub gaat uploaden, moet u de afbeelding voorafgaan naam met uw Docker Hub-gebruikersnaam en een schuine streep, als volgt:

docker tag username/imagename:tag

Een gebruiker met de naam Holly Holt kan bijvoorbeeld de nieuwste build van haar nieuwe applicatie taggen als volgt:

docker tag hholt/killerapp:1.5

Om hetzelfde in Windows PowerShell te doen, gebruikt u de Add-ContainerImageTag-cmdlet, als volgt:

Add-Containerimagetag -Imageidorname c452b8c6ee1a -Repository hholt / killerapp -Tag 1.5

Als u de tagwaarde uit de opdracht weglaat, wijst Docker automatisch de image tagwaarde ‘new’ toe, wat tot enige verwarring kan leiden. Wanneer u een afbeelding uit een repository binnenhaalt zonder een tag op te geven, geeft de repository u de image met de “latest” tag. Dit betekent echter niet noodzakelijk dat de image die u krijgt de nieuwste zal zijn.

De “latest” tag wordt verondersteld aan te geven dat de image de meest recente is versie. Of dat waar is of niet, hangt af van de mensen die de tags van die repository beheren. Sommige mensen denken dat de “latest” tag automatisch wordt toegewezen aan de meest recente versie van een image, maar dit is niet het geval. U kunt de “latest” tag toewijzen aan elke versie van een image, de oudste of de nieuwste. Het is uitsluitend aan de managers van de repository om de tag-waarden correct te onderhouden. Wanneer iemand u vertelt om de laatste build van een afbeelding te kirjgen, bedoeld de persoon die u verwijst naar de meest recente build of de build met de “latest” tag? Ze zijn niet altijd hetzelfde.

4.1.9 Een besturingssysteem image deïnstalleren

Als Docker wordt uitgevoerd met de opdracht Images, worden alle images op de containerhost weergegeven.

In sommige gevallen kunt u de lijst met iamges bekijken en images vinden die u niet meer nodig hebt. In dit voorbeeld zijn er twee niet-Engelse versies van Nano Server die per ongeluk zijn gedownload.

Om images te verwijderen die u niet nodig hebt  en de opslagruimte vrij te maken die ze gebruiken, voert u Docker uit met de opdracht Rmi en geeft u de repository en de tag van de specifieke image mee om te verwijderen, of de image-ID-waarde, zoals in de volgende voorbeelden:

docker rmi -f microsoft/nanoserver:10.0.14393.206_de-de
docker rmi -f a896e5590871

Het PowerShell-equivalent is de cmdlet Remove-ContainerImage, zoals hieronder:

remove-containerimage microsoft/nanoserver:10.0.14393.206_de-de
remove-containerimage a896e5590871

Het is mogelijk dat dezelfde image met meerdere tags wordt vermeld. Je kunt dit zien aan de overeenkomende image-ID waarden. Als u een van de image met de tag probeert te verwijderen, verschijnt er een fout, omdat de image met andere tags gebruikt wordt. Het toevoegen van de parameter -f forceert de opdracht om alle getagde verwijzingen naar dezelfde afbeelding te verwijderen.

4.1.10 Windows Server containers maken

Met de functie Containers en Docker geïnstalleerd, bent u klaar om een Windows Server-container te maken. Gebruik hiervoor de opdracht Docker Run en geef de image op die u in de container wilt uitvoeren. Met de volgende opdracht maakt u bijvoorbeeld een nieuwe container met de Server Core-image gedownload van Docker Hub:

docker run -it microsoft/windowsservercore powershell

Naast het laden van de image in de container, doen de parameters in deze opdracht ook het volgende:

  • i – Creëert een interactieve sessie met de container
  • t – Opent een terminalvenster in de container
  • powershell – Voert de PowerShell-opdracht uit in de containersessie

Het resultaat is dat nadat de container is geladen, een PowerShell-sessie verschijnt, waarmee u in staat wordt gesteld om in de container te werken. Als u de Get-ComputerInfo-cmdlet in deze sessie uitvoert, ziet u bovenaan de uitvoer, dat Server Core wordt uitgevoerd in de container, wanneer de volledige Desktop Experience-editie op de containerhost wordt uitgevoerd.

U kunt Docker Run-switches combineren, zodat de -I en -t verschijnen als -it. Na de naam van In de image kunt u elke opdracht opgeven die in de container moet worden uitgevoerd. Bijvoorbeeld cmd specificeren zou de standaard Windows-opdrachtshell openen in plaats van PowerShell.

Opmerking Images verkrijgen

Een image uit de Docker Hub binnenhalen is geen vereiste stap voordat u kunt uitvoeren. Als u een Docker Run-opdracht uitvoert en u hebt niet de vereiste image op uw containerhost, Start Docker automatisch een pull en maakt het de container. Voor grote images kan is het echter beter om ze vooraf binnen te halen, dit bespaart tijd bij het maken van nieuwe containers.

De opdracht Docker Run ondersteunt veel opdrachtregelparameters en switches, die u kunt gebruiken om de omgeving van de container die u maakt af te stemmen. Om ze te tonen, kunt u de volgende opdracht uitvoeren:

docker run - help

Opmerking Dockeropdrachten uitvoeren

Merk op dat deze en andere Docker-opdrachten soms dubbele koppeltekens gebruiken om de opdrachtregelparameters te verwerken.

Volgende afbeelding geeft ruwweg de helft van de beschikbare parameters weer. Bijvoorbeeld met de -h parameter kunt u een andere hostnaam voor de container opgeven dan de hexadecimale tekenreeks die de opdracht standaard toewijst.

Het PowerShell-equivalent van de opdracht Docker Run gebruikt de cmdlet New-Container, zoals in het volgende voorbeeld:

New-Container -Imageidorname microsoft/windowsservercore -Input -Terminal -Commando powershell

4.1.11 Hyper-V containers maken

Het proces voor het maken van een Hyper-V-container is bijna identiek aan het proces voor het maken van een Windows Server-container. U gebruikt dezelfde Docker Run-opdracht, behalve dat u de parameter –isolation = hyperv toevoegt, zoals getoond in het volgende voorbeeld:

docker run -it --isolation = hyperv microsoft / windowsservercore powershell

Nadat u een Hyper-V-container hebt gemaakt, is deze vrijwel niet van een Windows Server container te onderscheiden. Een van de weinige manieren om de typen containers uit elkaar te houden, is door te onderzoeken hoe ze met processen omgaan. U kunt bijvoorbeeld twee containers maken en in elk een commando uitvoeren waarmee ze zichzelf continu pingen, zoals getoond in de volgende opdrachten:

docker run -it microsoft/windowsservercore ping -t localhost
docker run -it --isolation=hyperv microsoft/windowsservercore ping -t localhost

De Windows Server-container die met de eerste opdracht is gemaakt, heeft een PING-proces actief in de container, zoals weergegeven door de opdracht Docker Top. Het proces ID (PID)-nummer, in dit geval, 404. Wanneer u vervolgens de cmdlet Get-Process uitvoert, om de processen (beginnend met P) weer te geven die op de containerhost worden uitgevoerd, ziet u hetzelfde PING-proces met de 404 ID. Dit komt omdat de container de kernel van de container host deelt.

Wanneer u de opdracht Docker Top uitvoert op de Hyper-V-container, ziet opnieuw het PING-proces, dit keer met een PID van 1852. De cmdlet Get-Process toont echter geen PING-proces, omdat deze container zijn eigen kernel heeft die voorzien wordt door de hypervisor.