Cosa devi sapere su Docker in Windows

Ho trascorso la fine della scorsa settimana a Monki Gras, una conferenza degli sviluppatori di Londra incentrata sull'arte dello sviluppo del software. È un evento affascinante e quest'anno si è concentrato su come confezionare il software.

Non sorprende che molti dei relatori abbiano parlato del ruolo dei container nel devops e della consegna continua. Ma c'era un malinteso generale sul supporto di Windows per i contenitori, generalmente caratterizzato come supporto per Docker in esecuzione su VM Linux.

Non è vero: Windows ha le proprie tecnologie container, che si basano su Docker ma dandogli un tocco esclusivamente Microsoft. Questa è probabilmente la fonte della confusione, con Windows 10 che aggiunge il supporto per un sottosistema Linux e Microsoft che aggiunge strumenti Docker a Windows Server 2016 nello stesso periodo. Entrambi fanno parte dell'approccio di Microsoft allo sviluppo di applicazioni cloud native, che è un elemento chiave della sua piattaforma Azure in futuro.

L'impegno di Microsoft nei confronti dei container, uno dei più importanti sviluppi intersettoriali degli ultimi anni, non dovrebbe sorprendere. Forse meglio pensato come un modo per incapsulare un'intera area utente di processi e spazi dei nomi per isolarlo da altre istanze in esecuzione sullo stesso server, i container sono diventati rapidamente una componente chiave di devops e implementazioni di integrazione continua. Microsoft ha adottato rapidamente questi approcci internamente e, come sempre, i suoi strumenti riflettono il modo in cui Redmond utilizza il software e il modo in cui crea le applicazioni.

Capire i contenitori

Separando i servizi che un'applicazione utilizza dai servizi di cui ha bisogno un sistema operativo, i contenitori moderni sono diventati un potente strumento per impacchettare e distribuire applicazioni sui server. I container offrono la portabilità tra sviluppo, data center locali e cloud privati, ibridi e pubblici. Le applicazioni incluse in un contenitore sono indipendenti dal sistema operativo host e possono essere eseguite su qualsiasi host contenitore simile senza modifiche.

Avvolgere un'applicazione in un contenitore significa che l'applicazione è facile da distribuire insieme a tutti i file di configurazione e le dipendenze appropriati: se un contenitore viene eseguito su una macchina di sviluppo o supera tutti i test di integrazione, verrà eseguito su un server senza alcuna modifica. È possibile modificare un contenitore per una nuova versione senza influire sul sistema operativo sottostante e spostare un contenitore da un server all'altro senza influire sul codice. È l'endpoint logico di un modello devops, che consente di distribuire l'infrastruttura e le applicazioni separatamente e gestirle separatamente.

Originariamente una tecnologia mainframe, contenitori (o almeno forme simili di spazio dei nomi e isolamento dei processi) potevano essere trovati in molti sistemi operativi Unix, inclusi Linux e Solaris.

All'interno dei contenitori di Windows

Ora, con il rilascio di Windows Server 2016, Windows dispone della propria tecnologia dei contenitori. Si basa sul popolare servizio di contenitori Docker open source, ma aggiunge il supporto per l'utilizzo della riga di comando di PowerShell e per un isolamento aggiuntivo con la combinazione del Nano Server incentrato sui contenitori sottili e dei contenitori Hyper-V.

Docker rimane al centro della strategia dei container di Microsoft. I suoi strumenti, come Swarm e Machine, sono ampiamente utilizzati e il suo prodotto Data Center può gestire contenitori sia Windows che Linux. Puoi persino utilizzare il client di Docker dalla shell Bash che fa parte di Windows 10, installandolo nel sottosistema Windows per Linux. Questo approccio richiede di destreggiarsi tra i certificati, quindi potresti preferire utilizzare l'app Windows di Docker come strumento di sviluppo e di gestione di base per i contenitori Windows e Linux.

I contenitori di Windows sono, come molte funzionalità di Windows Server, un ruolo che può essere installato tramite la familiare finestra di dialogo delle funzionalità di Windows o tramite PowerShell. Prendere il percorso di PowerShell ha più senso perché c'è un modulo OneGet PowerShell che installa sia la funzionalità dei contenitori di Windows che Docker, con un solo riavvio necessario per iniziare. (Dovrai anche abilitare la virtualizzazione Hyper-V se vuoi usare i contenitori Hyper-V.)

C'è una quantità sorprendente di entusiasmo per i contenitori di Windows sia da parte degli sviluppatori che dei team operativi; Microsoft ha segnalato più di 1 milione di download delle immagini Windows di base dalla libreria di contenitori Hub di Docker da quando Windows Server 2016 è entrato nella disponibilità generale.

Creazione e distribuzione di contenitori su Windows

I contenitori non sono solo uno strumento server; anche le versioni Professional ed Enterprise di Windows 10 Anniversary Edition supportano i contenitori. Dovrai abilitarli dalla finestra di dialogo Funzionalità di Windows, ma una volta abilitati puoi installare e gestire i contenitori Windows su un PC di sviluppo utilizzando PowerShell. Poiché Windows 10 supporta solo i contenitori Hyper-V, sarà necessario installare anche Hyper-V.

Una volta abilitati i contenitori di Windows, dovrai scaricare e installare il Docker Engine e il client Docker e installare le immagini di base che dovrai configurare per la tua applicazione.

L'immagine di base suggerita da Microsoft per i container Windows di nuova build è Nano Server, la sua implementazione di server incentrata sul cloud a impatto ridotto. Nano Server ha molto senso come base contenitore: è piccolo e veloce, senza interfaccia utente, quindi è veloce da distribuire e relativamente sicuro.

Una nota importante: sebbene sia possibile utilizzarlo per ospitare runtime come Node.js, Nano Server è progettato per ospitare applicazioni .Net Core, incluso ASP.Net Core, quindi non avrai tutte le funzionalità .Net a cui sei abituato . C'è abbastanza differenza dal familiare Windows Server che forse è meglio pensare ai contenitori Windows ospitati da Nano Server come uno strumento per nuove applicazioni piuttosto che come un host per il codice esistente.

Queste differenze spiegano perché molte aziende utilizzano Windows Server Core come immagine di base. Sebbene sia più grande e richieda più tempo per la distribuzione rispetto a Nano Server, Windows Server Core offre supporto per gli SDK di Windows correnti e un'implementazione .Net completa. È molto più facile spostare rapidamente il codice esistente in Server Core, dandoti la possibilità, come lo chiama il Lead Program Manager per Windows Server e Hyper-V Containers Taylor Brown, "lift and shift" dai server esistenti ai container, in modo che ' riutilizzabile dove vuoi. Una volta che l'applicazione si trova in un contenitore, gli sviluppatori possono scomporla ulteriormente; ad esempio, spostando i connettori API nei propri contenitori basati su Nano Server per semplificare la manutenzione dell'applicazione.

Il supporto dei contenitori viene integrato negli strumenti di Windows al livello più basso, con i contenitori di Windows ora un obiettivo di distribuzione per Visual Studio 2017. Puoi creare e distribuire applicazioni come contenitore, pronto per il test. Rendere i contenitori con un semplice clic del mouse è un passaggio importante.

Con Windows Azure che presto supporterà la virtualizzazione annidata, la possibilità di aggiungere più isolamento nel cloud pubblico aiuterà i settori regolamentati a giustificare il passaggio a entrambi i contenitori e al cloud.