Bent u nieuw in Docker Windows-images? Werkt u momenteel in een Windows-omgeving en bent u nieuwsgierig om meer te weten te komen over Docker-builds voor containerafbeeldingen? Dan bent u hier aan het juiste adres. De beste manier om iets nieuws te leren, is door het te doen met de docker build
– en docker build "tag"
-opdrachten!
In dit artikel leert u hoe u uw eerste Windows Docker-afbeelding maakt vanuit een Dockerfile met behulp van de docker build
-opdracht.
Laten we beginnen!
Begrip van Docker-containerafbeeldingen
Jarenlang was de enige manier om tests uit te voeren of ontwikkeling te doen op meerdere besturingssystemen (OS) het hebben van verschillende toegewijde fysieke of virtuele machines geïmaged met de OS-versie van uw keuze. Deze methodologie vereiste meer hardware en overhead om nieuwe machines te voorzien van elke software- en OS-specificatie.
Maar tegenwoordig is het gebruik van Docker container-afbeeldingen deels gegroeid vanwege de populariteit van microservices-architectuur. Als reactie op de stijgende populariteit van Docker is Microsoft begonnen met het openbaar ondersteunen van Docker-afbeeldingen voor verschillende vlaggenschipproducten op hun Docker Hub-pagina. Ze hebben zelfs native ondersteuning toegevoegd voor afbeeldingen voor Windows als een productfunctie in Windows 10 en Windows Server 2016!
A Docker image is run on a container by using the Docker Engine. Docker images have many benefits such as portability (applicable to multiple environments and platforms), customizable, and highly scalable. As you can see below, unlike traditional virtual machines, the Docker engine runs on a layer between the host OS kernel and the isolated application services that are being containerized.

Begrip van Docker Build en Afbeeldingen
Het docker build
commando kan worden gebruikt om de creatie van containerimages te automatiseren, een DevOps-praktijk van container-als-code over te nemen en containerisatie te integreren in de ontwikkelingscyclus van uw projecten. Dockerfiles zijn eenvoudigweg tekstbestanden die build-instructies bevatten die door Docker worden gebruikt om een nieuw containerimage te maken dat is gebaseerd op een bestaand image.
De gebruiker kan het basisimage specificeren en een lijst met commando’s opgeven die moeten worden uitgevoerd wanneer een containerimage wordt ingezet of opstart voor de eerste keer. In dit artikel leert u hoe u een op Windows gebaseerd dockerimage maakt vanuit een Dockerfile met behulp van een Windows-container.
Deze werkwijze heeft verschillende voordelen ten opzichte van het gebruik van een vooraf gebouwd containerimage:
- U kunt een containerimage opnieuw opbouwen voor verschillende versies van Windows – wat geweldig is voor het testen van codeveranderingen op verschillende platforms.
- U heeft meer controle over wat er in de container wordt geïnstalleerd. Dit stelt u in staat om de grootte van uw container tot een minimum te beperken.
- Om veiligheidsredenen wilt u mogelijk de container controleren op kwetsbaarheden en beveiligingsverharding toepassen op het basisimage
Vereisten:
Dit artikel is een stapsgewijze handleiding voor het leren bouwen van een Docker-image met behulp van een Dockerfile. Als u wilt meedoen, zorg er dan voor dat u aan de volgende vereisten voldoet.
- Docker voor Windows geïnstalleerd. Ik zal de Docker Community Edition (CE) versie 2.1.0.4 in mijn omgeving gebruiken.
- Internettoegang is vereist voor het downloaden van de Docker-afbeeldingen
- Windows 10+ besturingssysteem (versie 1709 wordt gebruikt voor deze handleiding)
- Ingeschakelde geneste virtualisatie
- 5 GB vrije schijfruimte op uw lokale machine
- PowerShell 5.0+
- Deze handleiding maakt gebruik van de Visual Studio Code IDE. Voel u echter vrij om de IDE te gebruiken die u verkiest.
Opmerking: Zorg ervoor dat u Windows Containers Configuration inschakelt bij het installeren van Docker.
Zich voorbereiden
U hebt eerst een map nodig om alle Docker-afbeeldingen en containers op te slaan die u zult bouwen vanuit die afbeeldingen. Open hiervoor een PowerShell- of cmd-terminal (u zult PowerShell gebruiken in dit artikel) en maak een nieuwe map genaamd C:\Containers.
Zodra de map is gemaakt, ga naar die map. Hiermee wordt de huidige werkmap van de console ingesteld op C:\Containers om alle downloads standaard naar deze map te leiden.
In dit artikel krijg je een voorsprong. De meeste bestanden voor dit project zijn al beschikbaar. Zodra de map is aangemaakt, voer een Git pull uit om de benodigde bestanden voor dit artikel van het TechSnips Github-repository naar de map C:\Containers te kopiëren. Controleer vervolgens of de map C:\Containers eruitziet zoals hieronder weergegeven.

Het downloaden van de IIS Windows Docker-image
De eerste taak die moet worden uitgevoerd, is het downloaden van een “sjabloon” of basisafbeelding. Je zult later je eigen Docker-afbeelding bouwen, maar eerst heb je een afbeelding nodig om mee te beginnen. Je zult de nieuwste IIS- en Windows Server Core-afbeeldingen downloaden die nodig zijn voor deze tutorial. De bijgewerkte lijst met afbeeldingen is te vinden op de officiële Microsoft Docker-hub-afbeeldingspagina.
Het beoordelen van de huidige Docker-basisafbeeldingen
Voordat je de afbeelding uit het afbeeldingenarchief downloadt, laten we eerst de huidige Docker-basisafbeeldingen bekijken die je momenteel op je lokale systeem hebt. Voer hiervoor een PowerShell-console uit als Administrator en typ vervolgens docker images
. Deze opdracht geeft alle afbeeldingen op je lokale systeem terug.
Zoals je hieronder kunt zien, zijn de beschikbare afbeeldingen aanvankelijk leeg.

Het downloaden van de basisafbeelding
Nu is het tijd om de basis IIS-image te downloaden van Docker Hub. Voer hiervoor het volgende commando uit: docker pull
, zoals hieronder getoond. Dit proces kan enige tijd duren, afhankelijk van de snelheid van je internetverbinding.

Voer nu docker images
uit en je zou het nieuwste Microsoft Windows Core IIS-image beschikbaar moeten hebben voor deze tutorial.

Inspecteer het Dockerfile
In een eerdere stap heb je een bestaand Dockerfile gedownload voor deze tutorial. Laten we nu eens kijken naar wat dat precies inhoudt.
Open het bestand C:\Containers\Container1\Dockerfile in je favoriete editor. De inhoud van dit Dockerfile wordt gebruikt om te definiëren hoe het containerimage wordt geconfigureerd tijdens het bouwen.
Je kunt een uitleg zien van wat elk stukje van dit bestand doet in de in-line opmerkingen.
Het bouwen van een nieuwe Docker-image
Je hebt het Docker-bestand klaar staan en een basis-IIS-image gedownload. Nu is het tijd om je nieuwe Docker-image te bouwen met behulp van het Docker-bestand.
Om een nieuwe image te bouwen, gebruik je het docker build "tag"
-commando. Dit commando maakt de image aan. Voor dit artikel zie je hieronder dat je ook de -t **
-optie gebruikt, die het “tag”-gedeelte vervangt. Deze optie stelt je in staat om je nieuwe image een vriendelijke tag-naam te geven en ook naar het Docker-bestand te verwijzen door het map-pad op te geven waar het zich bevindt.
Hieronder zie je een voorbeeld van het zorgen dat de console zich in de C:\Containers-map bevindt en vervolgens het bouwen van een nieuwe image vanuit het Docker-bestand in de C:\Containers\Container1-map.
Zodra gestart, kun je de voortgang van het commando zien terwijl het elke instructie in het dockerbestand regel voor regel doorloopt:

Zodra voltooid, zou je nu een nieuwe Docker-image moeten hebben!
Voer nu het docker images
-commando uit om de beschikbare images te bekijken. Hieronder zie je een voorbeeld van de aangemaakte container1-image.

Opmerking: het
docker build —help
-commando is een handige parameter om gedetailleerde informatie over het uitgevoerde dockercommando weer te geven.
Het uitvoeren van de Docker-container
Op dit punt zou je een nieuwe image moeten hebben aangemaakt. Het is tijd om een container op te starten met behulp van die image. Gebruik het docker run
-commando om een nieuwe container te starten.
De docker run
opdracht zal een nieuwe Docker-container starten op basis van de container1 afbeelding die je eerder hebt aangemaakt. Je kunt hieronder een voorbeeld hiervan zien.
Merk op dat de -d
parameter wordt gebruikt. Dit vertelt de Docker-runtime om de afbeelding te starten in de losgekoppelde modus en vervolgens af te sluiten wanneer het rootproces dat wordt gebruikt om de container uit te voeren, wordt afgesloten.
Wanneer docker run
is voltooid, geeft het de ID terug van de gemaakte container. Het voorbeeld hieronder vangt deze ID op in een $containerID
variabele zodat we er later gemakkelijk naar kunnen verwijzen.

Zodra de container is gestart, voer je nu de docker ps
opdracht uit. Deze opdracht stelt je in staat om te zien welke containers momenteel draaien met behulp van elke afbeelding. Let hieronder op dat de draaiende afbeelding automatisch een bijnaam krijgt (busy_habit in dit geval). Deze bijnaam wordt soms gebruikt in plaats van de container-ID om de container te beheren.

Code uitvoeren binnen een Docker-container
A new container is built from a new image you just created. Let’s now start actually using that container to run code. Running code inside of a Docker container is done using the docker exec
command.
In dit voorbeeld, voer docker exec
uit om de PowerShell-uitvoer voor de Get-ChildItem
opdracht in de container te bekijken met de onderstaande opdrachtsyntax. Dit zal ervoor zorgen dat de instructies in het Dockerfile om de standaard IIS-bestanden te verwijderen zijn gelukt.
Je kunt hieronder zien dat het enige bestand dat bestaat index.html is, wat betekent dat de standaardbestanden zijn verwijderd.

Voer nu de ipconfig
opdracht uit in de container om het lokale IP-adres van de containerafbeelding te krijgen, zodat je kunt proberen verbinding te maken met de IIS-website.
Je kunt hieronder zien dat ipconfig
is uitgevoerd in de container, net zoals het zou worden uitgevoerd op je lokale computer, en alle IP-informatie heeft teruggegeven.

ipconfig
in a Docker containerInspecteer de IIS-website
Het is nu tijd om de vruchten van je werk te onthullen! Het is tijd om te zien of de IIS-server die in de Docker-container draait, de index.html-pagina correct serveert.
Open een browser en plak het IPv4-adres dat is gevonden via ipconfig
in de adresbalk. Als alles goed is, zou je een Hello World!! bericht moeten zien zoals hieronder.

Beoordeling van Docker-geschiedenis
Een handige opdracht om te gebruiken bij het werken met Docker-containers is de docker history
-opdracht. Hoewel niet noodzakelijk gerelateerd aan het maken van een image of container zelf, is de docker history
-opdracht een nuttige opdracht waarmee je wijzigingen kunt bekijken die zijn aangebracht in de containerimage.
Je kunt hieronder zien dat docker history
alle Dockerfile- en PowerShell-activiteiten retourneert die zijn uitgevoerd op de container1 container waaraan je hebt gewerkt.

docker history
Opschonen van draaiende Docker-images
De onderstaande stappen worden gebruikt om alle gestopte containers op je machine op te ruimen. Dit zal schijfruimte en systeembronnen vrijmaken.
Voer de docker ps
-opdracht uit om een lijst van de containers die op je systeem draaien te bekijken:

Stop vervolgens de draaiende containers met de docker stop
-opdracht:

Tenslotte kun je de gestopte containers permanent verwijderen met de docker system prune
-opdracht.
