4.2 Beheer Windows containers

4.2.1 Beheer Windows- of Linux-containers met behulp van de Docker-daemon

Wanneer u de opdracht Docker uitvoeren gebruikt om een nieuwe container te maken, kunt u de -it parameter opnemen om er interactief mee te werken, of u kunt het weglaten om de container in de achtergrond te laten werken. Hoe dan ook, u kunt de Docker-client blijven gebruiken om de container te beheren, zowel in Windows of Linux.

4.2.1.1 Containers oplijsten

Als u een PowerShell- of CMD-sessie wilt verlaten die u in een container bent gestart, typt u de volgend:

exit

Dit sluit niet alleen de sessie, het stopt ook de container. Een gestopte container bestaat nog steeds op de host, het is gewoon functioneel uitgeschakeld. Om een sessie te verlaten zonder afsluiten de container te stoppen, drukt u op Ctrl+P en vervolgens op Ctrl+Q.

U kunt een lijst van alle actieve containers op de host weergeven met behulp van de Docker PS commando. Als u de switch -a (voor iedereen) toevoegt, zoals in het volgende voorbeeld, toont de opdracht alle containers op de host, of deze nu draaien of niet.

docker ps -a

4.2.1.2 Containers starten en stoppen

Om een uitgeschakelde container te starten, gebruikt u de Docker Start-opdracht, zoals het voorbeeld hieronder:

docker start dbf9674d13b9

U kunt een container ook met geforceerd stoppen door de opdracht Docker Stop te gebruiken, als volgt:

docker stop dbf9674d13b9

De zes-byte hexadecimale tekenreeks in deze opdrachten is de container-ID Docker toewijst aan de container wanneer deze wordt gemaakt. U deze waarde in Docker-opdrachten gebruiken om de container te indentificeren die u wilt beheren. Deze waarde wordt ook de computernaam van de container, zoals u kunt zien als u Get-ComputerInfo uitvoert vanuit een container sessie.

Als u Docker PS uitvoert met de parameter –no-trunc (voor geen truncatie), ziet u dat de container-ID een hexadecimale tekenreeks van 32 bytes is, hoewel het veel handiger is om alleen de eerste zes bytes op de opdrachtregel te gebruiken.

4.2.1.3 Verbinden met containers

Gebruik de opdracht Docker Attach om verbinding te maken met een sessie op een actieve container, zoals in het volgende voorbeeld:

docker attach dbf9674d13b9

Als u de opdracht in meerdere vensters uitvoert, worden extra sessies geopend, zodat u dit werk in meerdere vensters tegelijk kunt doen.

4.2.1.4 Images maken

Als u een container op enigerlei wijze heeft gewijzigd, kunt u de wijzigingen in een nieuwe image opslaan door de opdracht Docker Commit uit te voeren, zoals in het volgende voorbeeld:

docker commit dbf9674d13b9 hholt/killerapp: 1.5

Met deze opdracht maakt u een nieuwe afbeelding met de naam hholt/killerapp met een tagwaarde van 1.5. De De opdracht Docker Commit maakt geen duplicaat van de basisimage met de wijzigingen jij hebt gemaakt; het slaat alleen de wijzigingen op. Als u bijvoorbeeld de Microsoft/windowsservercore basisimage gebruikt om de container te maken en vervolgens uw applicatie installeert, zal Docker Commit alleen de applicatie opslaan. Als u de nieuwe image aaneen collega geeft, moet deze de basisimage hebben (of verkrijgen) om de container te kunnen uitvoeren.

4.2.1.5 Containers verwijderen

Om een container volledig te verwijderen, gebruikt u de Docker RM opdracht zoals in het volgende voorbeeld:

docker rm dbf9674d13b9

Containers moeten gestopt zijn voordat u ze op deze manier kunt verwijderen. Echter, als u de switch -f (for force) toevoegt, verwijdert het Docker RM-commando iedere container, zelfs een die gestart is.

4.2.2 Beheer Windows- of Linux-containers met Windows PowerShell

Zoals eerder vermeld, vereist de Dockerd-engine geen gebruik van het Docker.exe-client programma. Omdat Docker een open source project is, is het mogelijk om een alternatieve client-implementatie te creëren die u kunt gebruiken met Dockerd, en Microsoft, de samenwerking met de Docker-gemeenschap doet precies dat door een PowerShell-module te maken die u kunt gebruiken om Docker-containers maken en te beheren.

Omdat de Docker-module voor PowerShell in ontwikkeling is, ondersteunen het noodzakelijkerwijs niet alle functies die mogelijk zijn met de Docker.exe-client. Echter, de primaire functies zijn er, zoals getoond in de volgende paragrafen.

4.2.2.1 Containers oplijsten

U kunt een lijst van alle containers op de host weergeven door de cmdlet Get-Container uit te voeren in Windows PowerShell. In tegenstelling tot de Docker PS-opdracht geeft de Get-Container-cmdlet alle containers op de host weer, of ze nu actief zijn of gestopt.

4.2.2.2 Containers starten en stoppen

Wanneer u een container maakt met de cmdlet New-Container, wordt de container niet automatisch gestart. U moet het expliciet starten. Om een uitgeschakelde container te starten, gebruikt u de Start-Container-cmdlet, zoals in het volgende voorbeeld:

Start-Container dbf9674d13b9

U kunt een container ook stoppen door het werkwoord eenvoudig te wijzigen in de cmdlet Stop-Container, als volgt:

Stop-Container dbf9674d13b9

4.2.2.3 Verbinden met containers

Gebruik de cmdlet Enter-ContainerSession om verbinding te maken met een sessie op een actieve container, zoals in het volgende voorbeeld:

Enter-ContainerSessiondbf9674d13b9

Deze cmdlet kan ook gebruikt worden met de alias Attach-Container, waarmee een ander commando opnieuw gebruikt kan worden met een werkwoordverandering.

4.2.2.4 Images maken

Als u een container heeft gewijzigd, kunt u de wijzigingen in een nieuwe image opslaan door de ConvertTo-ContainerImage-cmdlet uit te voeren, zoals in het volgende voorbeeld:

ConvertTo-Containerimage -Containeridorname dbf9674d13b9 -Repository hholt/killerapp -Tag 1.5

Aan deze cmdlet wordt ook alias Commit-Container toegewezen.

4.2.2.5 Containers verwijderen

Gebruik de cmdlet Remove-Container om een container te verwijderen, zoals in het voorbeeld:

Remove-Container dbf9674d13b9

Net als bij het Docker RM-commando, moeten containers in een stopstand staan voordat u kunt ze kunt verwijderen. Als u de Force-switch toevoegt, zal de opdracht elke container verwijderen, zelfs een container in uitvoering.

4.2.3. Beheer containernetwerken

Containers hebben toegang tot het externe netwerk. Dit is eenvoudig te bewijzen door een server op het lokale netwerk of het internet te pingen. Echter, als u de opdracht ipconfig /all uitvoert in een containersessie, zou je verbaasd kunnen zijn over wat je ziet.

In dit voorbeeld is het IP-adres van de netwerkadapter in de container 172.25.117.12/12, dat helemaal niet lijkt op het adres van het netwerk waarop de containerhost is staat. Als u echter de opdracht Ipconfig /all op de containerhost uitvoert, wordt de situatie duidelijker.

Er worden twee Ethernet-adapters op het containerhostsysteem weergegeven. Men heeft een IP-adres op het 192.168.2.0/24 netwerk, dit is het adres dat wordt gebruikt voor het fysieke netwerk waarmee de containerhost is verbonden. De andere adapter heeft het adres 172.25.112.1/12, die zich op hetzelfde netwerk bevindt als het adres van de container. In feite terugkijkend naar de configuratie van de container, wordt het adres van de containerhost vermeld als standaard Gateway en DNS-serveradres voor de container. De containerhost is in wezen functionerend als een router tussen het 172.16.0.0/12 netwerk waarop de container zich bevindt en 192.168.2.0/24, het fysieke netwerk waarmee de host is verbonden. De host functioneert ook als de DNS-server voor de container.

Als u naar een andere container op dezelfde host kijkt, heeft deze een IP-adres op dezelfde host netwerk als de eerste container. De twee containers kunnen ook elkaars adressen pingen als die van systemen buiten het 172.16.0.0/12 netwerk.

Dit is mogelijk omdat de Containers functie en Docker standaard een netwerkadres vertaling (NAT) gebruiken, om een netwerkomgeving te creëren voor de containers op de gastheer. NAT is een routeringsoplossing waarin de netwerkpakketten worden gegenereerd door en bestemd voor een systeem die hun IP-adressen aangepast, zodat het lijkt alsof het systeem op een ander netwerk is.

Wanneer u een computer in het hostnetwerk pingt vanuit een containersessie, wijzigt de container host de ping-pakketten en vervangt het door het eigen 192.169.2.43-adres door het container adres 172.25.117.12 in elk. Wanneer de antwoorden uit het gepingd systeem , gebeurt het proces in omgekeerde volgorde.

De Dockerd-engine maakt standaard een NAT-netwerk wanneer het voor de eerste keer wordt uitgevoerd, en kent elke container een adres toe op dat NAT-netwerk. Het gebruik van de 172.16.0.0/12 netwerkadres is ook standaard gecodeerd in Docker. U kunt deze standaardinstellingen wijzigen, door een ander NAT-adres op te geven of helemaal geen NAT te gebruiken.

De netwerkadapters in de containers zijn natuurlijk virtueel. U kunt eerder getoonde configuratie zien in de dat de adapter voor die container wordt geïdentificeerd als vEthernet (Container NIC 76b9f047). Op de containerhost is er ook een virtuele adapter, genaamd vEthernet (HNS Internal NIC). HNS is de Host Network Service, de NAT implementatie gebruikt door Docker. Als u de Get-VMSwitch-cmdlet op de containerhost uitvoert of in de Virtual Switch Manager in Hyper-V Manager kijkt, kan u zien dat Docker ook een virtuele switch heeft gemaakt met de naam nat. Dit is de switch waarmee de adapters in de containers allemaal zijn verbonden. Daarom kunt u die containers zien als zij die net functioneren als virtuele machines, voor zover het netwerken betreft.

4.2.3.1 NAT-standaardinstellingen wijzigen

Als u een ander netwerk adres voor de Docker NAT configuratie wilt gebruiken, omdat u al een netwerk hebt dat hetzelfde adres gebruikt, is dit mogelijk. Als u een alternatief adres wilt opgeven, moet u het daemon.json-configuratiebestand gebruiken als eerder besproken in de externe Docker-clientconfiguratie.

Daemon.json is een tekstbestand dat u maakt in de map waarin het Dockerd.exe programma staat. Om een alternatief NAT-netwerkadres op te geven, neemt u de volgende tekst op in het bestand:

{ "fixed-cidr":"192.168.10.0/24" }

U kunt elk netwerkadres gebruiken voor de NAT-implementatie, maar om adres conflicten op het internet te voorkomen, moet u een netwerk gebruiken in een van de volgende gereserveerde privé-netwerken netwerkadressen:

  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16

Om te voorkomen dat de Dockerd-engine überhaupt een netwerkimplementatie creëert, plaatst u de volgende tekst in het bestand daemon.json:

{"bridge": "none"}

Als u dit doet, moet u handmatig een containernetwerk maken als u wilt dat uw containers netwerkconnectiviteit hebben.

4.2.3.2 Port mapping

Als u van plan bent een servertoepassing in een container uit te voeren die poorten moet openstellen voor inkomend clientverkeer, moet u een techniek gebruiken die poortmapping wordt genoemd. Poortmapping maakt het de containerhost mogeljke, het clientverkeer dat ontvangangen wordt, om de pakketten door te sturen naar de juiste poort in de container die de toepassing uitvoert. Als u poorttoewijzing wilt gebruiken, voegt u de switch -p toe aan het Docker Run-commando, samen met de poortnummers op de containerhost en de container, zoals in het volgende voorbeeld:

docker run -it -p 8080:80 microsoft\windowsservercore uit powershell

In dit voorbeeld is er verkeer dat binnenkomt via poort 8080 van de containerhost doorgestuurd naar poort 80 van de container. Poort 80 is het bekende poortnummer voor internet serververkeer, en met deze opstelling kan de container deze standaardpoort gebruiken zonder het te monopoliseren op de containerhost, die mogelijk poort 80 nodig heeft voor zijn eigen webserver.

4.2.3.3 Een transparant netwerk creëren

In plaats van NAT te gebruiken, kunt u ervoor kiezen om een transparant netwerk te maken, een netwerk waarin de containers zijn verbonden met hetzelfde netwerk als de containerhost. Als de containerhost een fysieke computer is, zijn de containers verbonden met het fysieke netwerk. Als de container host is een virtuele machine, zijn de containers verbonden met elke virtuele switch van de VM dat het gebrukt.

Docker maakt standaard geen transparant netwerk, dus moet u het maken met behulp van de Docker Network Create-opdracht, zoals in het volgende voorbeeld:

docker-network create -d transparant trans

In dit voorbeeld maakt de opdracht een nieuw netwerk met behulp van het transparant stuurprogramma, aangegeven door de switch -d en kent deze de naam trans toe. De volgende opdracht geeft een lijst weer van alle containernetwerken, inclusief het trans-netwerk dat u zojuist hebt gemaakt.

docker network ls

Nadat u het transparante netwerk hebt gemaakt, kunt u containers maken die het gebruiken door de netwerkparameter aan uw Docker Run-opdracht toe te voegen, zoals in het volgende voorbeeld:

docker run -it --network = trans microsoft / windowsservercore powershell

Wanneer u de opdracht Ipconfig/all in deze container uitvoert, kunt u zien dat deze een IP heeft adres op het 10.0.0.0/24-netwerk, hetzelfde als het netwerk dat wordt gebruikt door de virtuele machine die als containerhost functioneert.

Wanneer u een transparant netwerk maakt en de containers die het gebruiken, verkrijgen ze allemaal IP adressen van een DHCP op het hostnetwerk van de container, indien beschikbaar. Als er geen DHCP-server beschikbaar, moet u echter de netwerkadresinstellingen opgeven wanneer u het netwerk maakt en handmatig het IP-adres van elke container configureren door het op te geven op de Docker Run-opdrachtregel.

Om een transparant netwerk met statische IP-adressen te maken, gebruikt u een opdracht zoals het volgende:

docker-network create -d transparant --subnet=10.0.0.0/24 -gateway=10.0.0.1 trans

Om vervolgens een container met een statisch IP-adres op het netwerk wilt maken, gebruikt u de Docker Run-opdracht als volgt:

docker run -it --network=trans --ip=10.0.0.16 --dns=10.0.0.10 microsoft/windowsservercore powershell

4.2.4 Beheer containergegevensvolumes

In sommige gevallen wilt u mogelijk gegevensbestanden in verschillende containers bewaren. Docker laat u dit te doen door datavolumes op een container te maken die overeenkomen met een map op de container host. Eenmaal gemaakt, zijn de gegevens die u in het gegevensvolume op de container plaatst ook beschikbaar in de bijbehorende map op de containerhost. Het tegenovergestelde is ook waar, u kunt bestanden kopiëren naar de map op de host en ze in de container openen.

Datavolumes blijven onafhankelijk van de container. Als u de container verwijdert, blijven de gegevens op het volume van de containerhost bewaard. U kunt vervolgens de map van de containerhost koppelen aan een andere container, waarmee u uw gegevens kunt bewaren via meerdere iteraties van een applicatie die in uw containers draaien.

Als u een gegevensvolume wilt maken, voegt u de switch -v toe aan een Docker Run-opdracht, zoals in het volgend voorbeeld:

docker run -it -v c:\appdata microsoft/windowsservercore powershell

Deze opdracht maakt een map met de naam c:\appdata aan in de nieuwe container en koppelt deze op de containerhost aan een submap in C:\ProgramData\docker\volumes. Om de exacte locatie te weten, kunt u de volgende opdracht uitvoeren en kijken in het gedeelte Mounts.

docker inspect dbf9674d13b9

Het gedeelte Mounts (wat een klein onderdeel is van een lange, uitgebreide lijst met die van de container specificaties) bevat Bron- en Bestemmingseigenschappen. Bestemming geeft de mapnaam aan van de container en Bron is de map op de containerhost. Om het gegevensvolume opnieuw te gebruiken, kunt u zowel de bron- als de doelmap opgeven in de Docker Run opdracht, zoals in het volgende voorbeeld:

docker run -it -v c:\sourcedata: c:\appdata microsoft/windowsservercore powershell

Als u een gegevensvolume maakt, en u een map opgeeft in de container die al bestanden bevat, wordt de bestaande inhoud overlapt door het datavolume, maar niet verwijderd. Die bestanden zijn weer toegankelijk wanneer het datavolume wordt ontkoppeld.

Standaard maakt Docker datavolumes in de lees-/schrijfmodus. Om alleen-lezen gegevensvolume te creëren, kunt u :ro aan de naam van de containermap toevoegen, zoals in het volgende voorbeeld:

docker run -it -v c:\appdata:ro microsoft / windowsservercore powershell

Opmerking Een gegevensvolume toevoegen

Om een datavolume aan een bestaande container toe te voegen, is uw enige optie om de Docker Commit te gebruiken om eventuele wijzigingen die u in de bestaande container heeft aangebracht, op te slaan in een nieuwe image en vervolgens Docker Run gebruiken om een nieuwe container van de nieuwe image te maken, inclusief de -v schakelaar om het datavolume toe te voegen.

4.2.5 Resourcebeheer

Zoals eerder opgemerkt, ondersteunt de Docker Run-opdracht vele parameters en switches, sommige waarvan in dit hoofdstuk al is aangetoond. U hebt bijvoorbeeld gezien hoe met de it-switch een interactieve container wordt gemaakt die een specifieke shell of een andere opdracht uitvoert.

Om een container te maken die op de achtergrond wordt uitgevoerd, in de zogenaamde ontkoppelde modus, gebruikt u de switch -d, zoals in het volgende voorbeeld:

docker run -d -p 80:80 microsoft/iis

Voor interactie met een vrijstaande container kunt u netwerkverbindingen of een gedeeld bestandssysteem gebruiken. U kunt ook verbinding maken met de container met de opdracht Docker Attach.

4.2.5.1 Werken met containernamen

Wanneer u een container maakt met de opdracht Docker Run, kent de Dockerd engine standaard drie identificatiekenmerken toe aan de container:

  • Lange UUID – Een 32-byte hexadecimale reeks, vertegenwoordigd door 64 cijfers, zoals in het volgend voorbeeld: 0e38bdac48ca0120eff6491a7b9d1908e65180213b2c1707b924991ae8d1504f
  • Korte UUID – De eerste zes bytes van de lange UUID, weergegeven als 12 cijfers, zoals in het volgend voorbeeld: 0e38bdac48ca.
  • Naam – Een willekeurig gekozen naam bestaande uit twee woorden gescheiden door een onderstrepingsteken, zoals in het volgende voorbeeld: drunk_jones

U kunt elk van de drie ID’s gebruiken wanneer u op de opdrachtregel naar de container verwijst. U kunt ook uw eigen naam aan de container toewijzen wanneer u deze maakt, door de toe name parameter aan de oprdrachteregel toe te voegen met de Docker Run-opdrachtregel, zoals in het volgende voorbeeld:

docker run -it microsoft/windowsservercore powershell --name core1

4.2.5.2 Geheugen beperken

De opdracht Docker Run ondersteunt parameters waarmee u kunt opgeven hoeveel geheugen dat een container mag gebruiken. Standaard kunnen containerprocessen zoveel host- en wisselgeheugen gebruiken als nodig is. Als u meerdere containers op de dezelfde host uitvoert of een geheugenintensieve toepassing op de host zelf, kunt u beperkingen in het geheugen opleggen  die door bepaalde containers kunnen worden gebruikt.

De geheugenparameters die u kunt gebruiken in een Docker Run-opdracht zijn als volgt:

  • -m (of –memory) – Geeft de hoeveelheid geheugen aan die de container kan gebruiken. Waarden bestaan uit een geheel getal en de eenheid-ID b, k, m of g (voor bytes, kilobytes, megabytes of gigabytes, respectievelijk).
  • -memory-swap – Specificeert de totale hoeveelheid geheugen plus virtueel geheugen dat de container kan gebruiken. Waarden bestaan uit een geheel getal en de eenheididentificatie b, k, m of g.
  • -memory-reservation – Hiermee geeft u een zacht geheugenlimiet op dat de host voor de container behoudt, zelfs wanneer er strijd is voor systeemgeheugen. Bijvoorbeeld, kan u misschien de switch -m gebruiken om een harde limiet van 1 GB en een  geheugenreserveringswaarde van 750 MB in te stellen. Wanneer andere containers of processen extra geheugen vereisen, kan de host tot 250 MB van het geheugen van de container recuperen, maar laat minstens het 750 MB intact. Waarden bestaan uit een geheel getal kleiner dan dat van de waarde m of –memory-swap en de eenheididentificatie b, k, m of g.
  • -kernel-memory – Geeft de hoeveelheid geheugenlimiet aan die is ingesteld, met de switch -m, die gebruikt kan worden voor kernelgeheugen. Waarden bestaan uit een geheel getal en de eenheid-ID b, k, m of g.
  • -oom-kill-disable – Voorkomt dat de kernel containerprocessen doodt wanneer er een geheugentekort fout optreedt. Gebruik deze optie nooit zonder de -m-schakelaar om een geheugenlimiet voor de container. Anders kan de kernel processen op de host beginnen te doden wanneer een OOM-fout optreedt.

4.2.5.3 CPU cycles beperken

U kunt ook parameters opgeven die de CPU-cycli beperken die aan een container zijn toegewezen. Standaard worden alle beschikbare CPU-cycli gelijk verdeeld onder containers op een host. Door deze parameters te gebruiken, kunt u prioriteiten toewijzen aan de containers, die van kracht worden wanneer cpu geschil optreedt.

De Docker Run-parameters die u kunt gebruiken om containertoegang tot CPU’s te beheren, zijn als volgt:

  • -c (of –cpu-shares) – Specificeert een waarde van 0 tot 1024 die het gewicht aangeeft wanneer de container in strijd voor CPU-cycli. Het werkelijke aantal processorcycli dat een container ontvangt, is afhankelijk van het aantal containers dat op de host wordt uitgevoerd en hun respectievelijke gewichten.
  • -cpuset-cpus – Geeft aan welke CPU’s in een multiprocessor-hostsysteem de container kan gebruiken. Waarden bestaan uit gehele getallen die de CPU’s in de host vertegenwoordigen computer, gescheiden door komma’s.
  • -cpuset-mems – Geeft aan welke knooppunten op een NUMA-host de container kan gebruiken. Waarden bestaan uit gehele getallen die de CPU’s in de hostcomputer vertegenwoordigen, gescheiden door komma’s.

4.2.6 Maak nieuwe containerafbeeldingen met Dockerfile

Als u wijzigingen hebt aangebracht in een container sinds u deze voor het eerst hebt gemaakt met Docker Run opdracht, kunt u die wijzigingen opslaan door een nieuwe containerafbeelding te maken met Docker Commit. De aanbevolen methode voor het maken van containerafbeeldingen is echter om ze helemaal opnieuw te bouwen met behulp van een script dat een dockerbestand wordt genoemd.

Een dockerfile is een tekstbestand met de naam dockerfile, dat de opdrachten bevat die nodig zijn om uw nieuwe afbeelding te bouwen. Nadat u het dockerbestand hebt gemaakt, gebruikt u de Docker Build-opdracht om het uit te voeren en het nieuwe bestand te maken. Het dockerbestand is slechts een mechanisme dat het proces automatiseert van het uitvoeren van de stappen die u hebt gebruikt om uw container handmatig te wijzigen. Wanneer u de opdracht Docker Build uitvoert met het dockerbestand, voert de Dockerd engine elke opdracht in het script uit door een container te maken en de wijzigingen aan te brengen die u opgeeft en een Docker Commit-opdracht uitvoert om de wijzigingen op te slaan als een nieuwe afbeelding.

Een dockerbestand bestaat uit instructies, zoals FROM of RUN, en een instructie voor elk instructie. Het geaccepteerde formaat is om de instructie met een hoofdletter te schrijven. U kunt opmerkingen invoegen in het script door ze vooraf te laten gaan door het hekje (#).

Een voorbeeld van een eenvoudig dockerbestand is als volgt:

#install DHCP server
FROM microsoft/windowsservercore
RUN powershell -command install-windowsfeature dhcp -includemanagementtools
RUN powershell -configurationname microsoft.powershell -command add-dhcpserverv4scope -state active -activatepolicies $true -name scopetest -startrange 10.0.0.100 -endrange 10.0.0.200 -subnetmask 255.255.255.0
RUN md boot
COPY ./bootfile.wim c:/boot/
CMD powershell

In dit voorbeeld:

Nadat u het dockerfile-script hebt gemaakt, gebruikt u de opdracht Docker Build om de nieuwe image te maken, zoals in het volgende voorbeeld:

docker build -t dhcp .

Met deze opdracht wordt het dockerbestand uit de huidige map gelezen en wordt een image gemaakt dhcp genoemd. Terwijl de Dockerd-engine de image samenstelt, worden de resultaten van elk commando en de ID’s van de tijdelijke containers weergegeven die het maakt. Eens u de afbeelding hebt gemaakt, kunt u er vervolgens een container van maken met Docker Run commando.

4.2.7 Beheer containerafbeeldingen met DockerHub Repository voor publiek en privé scenario’s

DockerHub is een openbare opslagplaats die u kunt gebruiken om uw containerimages op te slaan en te distribueren. Wanneer u containerimages downloadt met het Docker Pull-commando, komen ze standaard van DockerHub, tenzij u een andere repository in de opdracht opgeeft. U kunt ook afbeeldingen uploaden met de opdracht Docker Push.

Door afbeeldingen te uploaden naar DockerHub kunt u ze delen met uw collega’s, en zelfs met uzelf, zodat u geen bestanden handmatig hoeft over te zetten om een containerimage te implementeren op een andere host.

Voordat u afbeeldingen kunt uploaden naar de Docker Hub, moet u zich registreren op de site op http://hub.docker.com. Nadat u dit hebt gedaan, wordt uw gebruikersnaam de naam van uw repository op de service. Bijvoorbeeld, de microsoft/windowsservercore image die u eerder hebt binnengehaald is een image met de naam windowsservercore in de Microsoft-repository. Als uw gebruikersnaam op DockerHub hholt is, beginnen uw images allemaal met die naam van de repository, gevolgd door de imagenaam, zoals in het volgende voorbeeld:

hholt/nano1

Zodra u een account hebt, moet u zich aanmelden bij de DockerHub-service vanaf de opdrachtregel voordat u images kunt duwen. U doet dit met de volgende opdracht:

docker login

Docker vraagt u om uw gebruikersnaam en wachtwoord en biedt vervolgens uploadtoegang naar uw repository.

4.2.7.1 Images zoeken

U kunt images op de DockerHub zoeken met behulp van de website. Deze interface biedt de meest recente informatie over de image, evenals opmerkingen van andere gebruikers in de Docker-community.

U kunt de DockerHub ook doorzoeken vanaf de opdrachtregel met behulp van de Docker Search opdracht, zoals in het volgende voorbeeld:

docker search microsoft --no-trunc

Door de parameter no-trunc toe te voegen, voorkomt u dat de opdracht de image beschrijvingen afkapt.

4.2.7.2 Images pushen

Om uw eigen afbeeldingen te uploaden naar de repository, gebruikt u de Docker Push-opdracht, zoals in het volgend voorbeeld:

docker push hholt/nano1

Standaard uploadt de Docker Push-opdracht de opgegeven image naar uw publieke repository op de DockerHub. Iedereen heeft op deze manier toegang tot gepushte afbeeldingen.

Omdat Docker open source software is, die images en code deelt met de gemeenschap, is dit een groot deel van de filosofie van het bedrijf. Het is echter ook mogelijk om privé repositories te maken, die u kunt delen met een onbeperkt aantal bijdragers die u selecteert.

Hiermee kunt u DockerHub gebruiken voor veilige applicatieontwikkelingsprojecten of een andere situatie waarin u geen image voor het publiek wilt inzetten. DockerHub biedt een enkele privérepository als onderdeel van de gratis service, maar voor extra repositories moet u een abonnement kopen.

Naast het opslaan en aanbieden van images, biedt DockerHub ook andere services, zoals geautomatiseerde builds. Door een docker-bestand en andere benodigde bestanden naar een repository te uploaden, kunt u DockerHub configureren om automatisch builds voor u uit te voeren met uw exacte specificaties. De codebestanden zijn beschikbaar voor uw bijdragers en nieuwe builds kunnen voorkomen wanneer de code verandert.

4.2.8 Beheer containerafbeeldingen met behulp van Microsoft Azure

U kunt containers niet alleen lokaal maken, maar ook op Microsoft Azure. Door door een virtuele Windows Server 2016-machine op Azure te maken, kunt u deze containers maken en beheren net zoals u zou doen op een lokale server. Azure biedt ook de Azure Container Service (ACS), waarmee u een cluster van virtuele machines die u kunt maken, configureren en beheren, geconfigureerd om container-gebaseerde applicaties uit te voeren met behulp van verschillende open source technologieën.

Microsoft Azure is een cloudservice op basis van een abonnement waarmee u virtuele machines en applicaties kunt implementeren en ze in uw bestaande onderneming kunt integreren. Door een maandelijkse kost te betalen, kunt u een virtuele machine voor Windows Server 2016 maken. Nadat u de virtuele machine hebt gemaakt, kunt u de functie Containers en de Docker-engine installeren. Containers en images die u op een virtuele Azure-machine maakt, zijn volledig compatibel met de Docker-implementaties op uw lokale computers.