Condividi tramite


Strumenti della piattaforma contenitore in Windows

La piattaforma contenitore Di Windows è in espansione. Docker è stato il primo passaggio del contenitore, ora stiamo creando altri strumenti della piattaforma contenitore.

Questo articolo illustra la piattaforma contenitore Windows e Linux, nonché ogni strumento della piattaforma contenitore.

Piattaforma contenitore Windows e Linux

Negli ambienti Linux, gli strumenti di gestione dei contenitori come Docker sono basati su un set più dettagliato di strumenti per contenitori: runc e containerd.

Architettura Docker su Linux

runc è uno strumento da riga di comando Linux per la creazione e l'esecuzione di contenitori in base alla specifica del runtime del contenitore OCI .

containerd è un daemon che gestisce il ciclo di vita del contenitore dal download e dalla decompressione dell'immagine del contenitore all'esecuzione e alla supervisione del contenitore.

In Windows abbiamo adottato un approccio diverso. Quando abbiamo iniziato a lavorare con Docker per supportare i contenitori Windows, abbiamo costruito direttamente sul servizio Host Compute Service (HCS). Questo post di blog è pieno di informazioni sul motivo per cui è stato creato HCS e perché è stato adottato questo approccio ai contenitori inizialmente.

architettura iniziale del motore Docker in Windows

A questo punto, Docker chiama ancora direttamente nel servizio HCS. In futuro, tuttavia, gli strumenti di gestione dei container che si espandono per includere container Windows e l'host container di Windows potrebbero fare riferimento a containerd e runhcs nel modo in cui fanno riferimento a containerd e runc su Linux.

runhcs

runhcs è un fork di runc. Come runc, runhcs è un client della riga di comando per l'esecuzione di applicazioni in pacchetto in base al formato OCI (Open Container Initiative) ed è un'implementazione conforme della specifica Open Container Initiative.

Le differenze funzionali tra runc e runhcs includono:

  • runhcs funziona su Windows. Comunica con il HCS per creare e gestire contenitori.

  • runhcs può eseguire una varietà di diverse tipologie di contenitori.

    • Windows e Linux Hyper-V isolati
    • Contenitori di processi windows (l'immagine del contenitore deve corrispondere all'host del contenitore)

Utilizzo :

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

<container-id> è il nome dell'istanza del contenitore che si sta avviando. Il nome deve essere univoco nell'host del contenitore.

La directory bundle (usando -b bundle) è facoltativa. Come per runc, i contenitori vengono configurati usando bundle. Il bundle di un contenitore è la directory che contiene il file della specifica OCI del contenitore, "config.json". Il valore predefinito per "bundle" è la directory corrente.

Il file di specifiche OCI, "config.json", deve avere due campi da eseguire correttamente:

  • Un percorso verso lo spazio scratch del contenitore
  • Percorso della directory del livello del contenitore

I comandi del contenitore disponibili in runhcs includono:

  • Strumenti per creare ed eseguire un contenitore

    • eseguire crea ed esegue un contenitore
    • creare creare un contenitore
  • Strumenti per gestire i processi in esecuzione in un contenitore:

    • avviare esegue il processo definito dall'utente in un contenitore creato
    • exec esegue un nuovo processo all'interno del contenitore
    • pause pause sospende tutti i processi all'interno del contenitore
    • riprendere riprende tutti i processi sospesi in precedenza
    • ps ps visualizza i processi in esecuzione all'interno di un contenitore
  • Strumenti per gestire lo stato di un contenitore

    • stato restituisce lo stato di un contenitore
    • termina invia il segnale specificato (impostazione predefinita: SIGTERM) al processo init del contenitore
    • eliminare elimina tutte le risorse contenute nel contenitore spesso usato con il contenitore scollegato

L'unico comando che può essere considerato multicontenitore è lista. Elenca i contenitori in esecuzione o sospesi avviati da runhcs con la radice specificata.

HCS

Sono disponibili due wrapper in GitHub per l'interfaccia con HCS. Poiché HCS è un'API C, i wrapper semplificano la chiamata di HCS da linguaggi di livello superiore.

  • hcsshim - HCSShim è scritto in Go ed è la base per runhcs. Acquisire la versione più recente da AppVeyor o crearla manualmente.
  • dotnet-computevirtualization - dotnet-computevirtualization è un wrapper C# per HCS.

Se si vuole usare l'HCS (direttamente o tramite un wrapper), oppure si vuole creare un wrapper Rust/Haskell/LinguaDiTuaScelta intorno all'HCS, lasciare un commento.

Per un'analisi più approfondita di HCS, guardare presentazione DockerCon di John Stark.

containerd/cri

Importante

Il supporto CRI è disponibile solo in Windows Server 2019/Windows 10 1809 e versioni successive.

Mentre le specifiche OCI definiscono un singolo contenitore, CRI (interfaccia di runtime del contenitore) descrive i contenitori come carichi di lavoro in un ambiente sandbox condiviso denominato pod. I pod possono contenere uno o più carichi di lavoro in container. I pod consentono agli agenti di orchestrazione dei contenitori come Kubernetes e Service Fabric Mesh di gestire carichi di lavoro raggruppati che devono trovarsi nello stesso host con alcune risorse condivise, ad esempio memoria e vNET.

Anche se runHCS e containerd possono entrambi essere gestiti su qualsiasi sistema Windows Server 2016 o versione successiva, il supporto dei pod (gruppi di contenitori) ha richiesto modifiche di rilievo agli strumenti dei contenitori in Windows. Il supporto CRI è disponibile in Windows Server 2019/Windows 10 1809 e versioni successive.