Delen via


Hulpprogramma's voor containerplatforms in Windows

Het Windows-containerplatform wordt uitgebreid. Docker was het eerste onderdeel van het containertraject, nu bouwen we andere hulpprogramma's voor containerplatforms.

In dit artikel wordt gesproken over het Windows- en Linux-containerplatform en over elk containerplatformhulpprogramma.

Windows- en Linux-containerplatform

In Linux-omgevingen zijn hulpprogramma's voor containerbeheer, zoals Docker, gebouwd op een meer gedetailleerde set containerhulpprogramma's: runc- en container-.

Docker-architectuur in Linux-

runc is een linux-opdrachtregelprogramma voor het maken en uitvoeren van containers volgens de OCI-containerruntimespecificatie.

containerd is een daemon die de levenscyclus van containers beheert, vanaf het downloaden en uitpakken van de containerafbeeldingen tot en met het uitvoeren en controleren van containers.

In Windows hebben we een andere benadering gevolgd. Toen we aan de slag gingen met Docker ter ondersteuning van Windows-containers, hebben we rechtstreeks gebouwd op de HCS (Host Compute Service). Dit blogbericht staat vol met informatie over waarom we de HCS hebben gebouwd en waarom we deze aanpak in eerste instantie hebben gebruikt voor containers.

initiële Docker Engine-architectuur in Windows

Op dit moment roept Docker nog steeds rechtstreeks aan bij de HCS. In de toekomst kunnen hulpprogramma's voor containerbeheer echter worden uitgebreid met Windows-containers, en de Windows-containerhost kan containerd en runhcs aanroepen zoals ze op Linux containerd en runc aanroepen.

runhcs

runhcs is een fork van runc. Net als runcis runhcs een opdrachtregelclient voor het uitvoeren van toepassingen die zijn verpakt volgens de OCI-indeling (Open Container Initiative) en een compatibele implementatie is van de Open Container Initiative-specificatie.

Functionele verschillen tussen runc en runhcs zijn onder andere:

  • runhcs wordt uitgevoerd in Windows. Het communiceert met de HCS- om containers te maken en te beheren.

  • runhcs kunt verschillende containertypen uitvoeren.

    • Isolatie voor Windows- en Linux Hyper-V
    • Windows-procescontainers (containerafbeelding moet overeenkomen met de containerhost)

Gebruik:

runhcs run [ -b bundle ] <container-id>

<container-id> is uw naam voor de containerinstantie die u start. De naam moet uniek zijn op uw containerhost.

De bundelmap (met behulp van -b bundle) is optioneel. Net als bij runc worden containers geconfigureerd met behulp van bundels. De bundel van een container is de map met het OCI-specificatiebestand van de container,config.json'. De standaardwaarde voor 'bundel' is de huidige map.

Het OCI-specificatiebestand ,config.json', moet twee velden hebben om correct te kunnen worden uitgevoerd:

  • Een pad naar de tijdelijke opslagruimte van de container
  • Een pad naar de laagmap van de container

Containeropdrachten die beschikbaar zijn in runhcs zijn onder andere:

  • Hulpprogramma's voor het maken en uitvoeren van een container

    • run maakt en voert een container uit
    • een container maken maken
  • Hulpprogramma's voor het beheren van processen die worden uitgevoerd in een container:

    • start het door de gebruiker gedefinieerde proces uitvoert in een gemaakte container
    • exec- voert een nieuw proces in de container uit
    • pauze pauzeert alle processen binnen de container
    • hervat hervat alle processen die eerder zijn onderbroken
    • ps ps geeft de processen weer die in een container worden uitgevoerd
  • Hulpprogramma's voor het beheren van de status van een container

    • status de status van een container uitvoert
    • kill stuurt het opgegeven signaal (standaard: SIGTERM) naar het init-proces van de container.
    • verwijderen verwijdert alle resources die door de container worden bewaard die vaak worden gebruikt met een losgekoppelde container

De enige opdracht die als meerdere containers kan worden beschouwd, is lijst. Het toont een lijst van containers die draaien of gepauzeerd zijn en zijn gestart door runhcs met de opgegeven root-hoofdmap.

HCS

Er zijn twee wrappers beschikbaar op GitHub voor interface met de HCS. Omdat de HCS een C-API is, kunnen wrappers de HCS eenvoudig aanroepen vanuit talen op een hoger niveau.

  • hcsshim - HCSShim is geschreven in Go en het is de basis voor runhcs. Pak de nieuwste versie van AppVeyor of bouw het zelf.
  • dotnet-computevirtualization - dotnet-computevirtualization is een C#-wrapper voor de HCS.

Als u de HCS wilt gebruiken (rechtstreeks of via een wrapper), of als u een Rust/Haskell/InsertYourLanguage-wrapper rond de HCS wilt maken, laat u een opmerking achter.

Bekijk de DockerCon-presentatie van John Starkvoor een diepere blik op de HCS.

containerd/cri

Belangrijk

CRI-ondersteuning is alleen beschikbaar in Windows Server 2019/Windows 10 1809 en hoger.

Hoewel OCI-specificaties één container definiëren, beschrijft CRI (Container Runtime Interface) containers als werkbelasting(en) in een gedeelde sandbox-omgeving, een pod genoemd. Pods kunnen een of meer containerworkloads bevatten. Met pods kunnen containerorchestrators, zoals Kubernetes en Service Fabric Mesh, gegroepeerde workloads verwerken die zich op dezelfde host moeten bevinden met sommige gedeelde resources, zoals geheugen en vNET's.

Hoewel runHCS en containerd beide kunnen werken op elk Windows-systeem van Server 2016 of later, maakte de ondersteuning van Pods (groepen containers) ingrijpende wijzigingen in containerhulpprogramma's in Windows noodzakelijk. CRI-ondersteuning is beschikbaar op Windows Server 2019/Windows 10 1809 en hoger.