Aprile 2017

Volume 32 Numero 4

Il presente articolo è stato tradotto automaticamente.

Contenitori - Disponibilità di Docker per gli sviluppatori Windows con i contenitori di Windows Server

Da Brown Taylor | 2017 aprile

Negli ultimi due anni contenitori Docker e sono stati uno degli argomenti più importanti in cerchi di sviluppo e nelle aziende, tutto il mondo. La versione di Windows Server 2016 autunno scorso aggiunto molto alla conversazione aprendo contenitori per gli sviluppatori di Windows. Come il mondo di Windows e Docker caratteristiche insieme? Viene avviato durante il che estate Puget Sound splendide del 2014 come il team di Base di Windows si è assunta un nuovo progetto che in definitiva diventerebbe contenitori Windows Server. Questa è la storia del codice e una panoramica in qual era per compilare una delle principali nuove funzionalità di Windows Server 2016.

Cronologia di contenitori e la radice di Docker

In 2013 contenitori subito a generazione interesse alla tastiera di Solomon Hykes, che al momento è il fondatore e avvio di un Platform-as-a-Service (PaaS), DotCloud. Hykes ha richiesto un set di poco e Linux difficile da utilizzare le funzionalità di kernel e metterli insieme in uno strumento open source è stato chiamato Docker. Che non era tenta intenzionalmente di diventare il re di contenitori, ma si stava cercando una soluzione per un problema incontrato DotCloud: Come gli sviluppatori potrebbero fornire codice che ha lavorato allo stesso modo dei server come accadeva nel proprio ambiente di lavoro? 

Un vero problema per servizi quali le forme DotCloud dal set di clienti di applicazioni software complete e diverse desidera distribuire, software compilato con i processi di sviluppo diversi, requisiti, scritti in linguaggi diversi e cicli di patch diverso (sia codice e parlata) e con dipendenze diverse. La virtualizzazione hardware, macchine virtuali (VM), è disponibile lo strumento migliore, ma presentato problemi durante la spedizione di software da computer portatili per gli sviluppatori nell'ambiente di produzione. Era necessario utilizzare macchine virtuali completamente configurate dallo sviluppatore, la scalabilità e gestione difficile, o si ha dovuto apportare gli strumenti di distribuzione e gli script per prendere le macchine virtuali e installare le applicazioni per gli sviluppatori, che non è molto flessibile e può essere fragili.

Hykes ritenuti Docker è stata la risposta al problema e, tornando, aveva a un elemento. Tuttavia, egli non è stato il primo servizio cloud da analizzare per contenitori; in realtà, era la necessità di un servizio cloud diverso che viene avviato l'idea, Google. Nel 2006, una patch del kernel Linux presentata Rohit Seth, un tecnico in Google, aggiunto il supporto per raggruppare i processi in un set comune di controlli di risorse in una funzione è stato chiamato cgroups. Descrizione di Seth di tale patch inizia con: "Commodity HW sta diventando più potente. Questo è consentendo di eseguire diversi carichi di lavoro sulla stessa piattaforma per l'utilizzo ottimale delle risorse hardware "(bit.ly/2mhatrp). Sebbene cgroups risolto il problema dell'isolamento delle risorse, che non risolvono la distribuzione coerente, Docker utilizzati non solo cgroups, ma anche un'altra porzione della tecnologia Linux: spazi dei nomi.

Gli spazi dei nomi sono stati introdotti nel kernel Linux nel 2002, offrendo un modo per controllare le risorse a un processo può vedere e quelli che vengono chiamate tali risorse. Gli spazi dei nomi sono piuttosto diverse da controlli di accesso perché il processo non conosce le risorse esistono o che sta utilizzando una versione di essi. Un esempio semplice di questo è l'elenco dei processi: potrebbe esserci 20 processi in esecuzione in un server, ma un processo in esecuzione all'interno di uno spazio dei nomi potrà vedere solo cinque di tali processi con il resto nascosto dalla visualizzazione. Un altro esempio potrebbe essere per un processo a pensare che sta leggendo dalla directory radice quando in realtà è stato virtualizzato da un altro percorso separato. È la combinazione di cgroups e le tecnologie di file system Copy-on-Write (copia su scrittura) e spazi dei nomi in un prodotto di facile utilizzo open source che è diventato la base di Docker.

Da mid-2013, il set di strumenti Docker Hykes e il suo team compilato ha iniziato a decollare, diventando uno dei primi progetti tendenza su GitHub e formalmente avviando il marchio di Docker. Spostata lo stato attivo degli Hykes da DotCloud a Docker e ha infine rimosso l'azienda DotCloud rimanendo i CTO di Docker Inc.

Windows Server Containers

Nello stesso periodo che Docker era ottenere si noti che in Linux cerchi, il team di Base di Windows era stato alla ricerca di metodi per isolare e aumentare l'efficienza dei servizi di Microsoft Azure che eseguito codice cliente o di terze parti. Un prototipo di ricerca Microsoft nome in codice "Levatoio" fornito una via di indagine; un contenitore di isolamento processo sfruttando una libreria del sistema operativo è stato compilato il progetto (bit.ly/2aCOQxP). Sfortunatamente, levatoio soggetto a limitazioni relative alla gestibilità, prestazioni e compatibilità tra applicazioni, rendendolo inadatto come una soluzione generica. Un'altra tecnologia prototipo precedente anche noto come silo di server inizialmente ci è sembrata vale la pena. Silo espanso sull'approccio oggetti processo Windows esistente, che fornisce il raggruppamento e risorse il controllo dei processi (simile a cgroups in Linux) (bit.ly/2lK1AbI). Ciò che il server di un aumento a dismisura prototipo aggiunto è un ambiente di esecuzione isolato inclusi file system, Registro di sistema e oggetto spazi dei nomi (simili agli spazi dei nomi in Linux). Il prototipo di silo di server è stato sottoposto a shelving anni precedenti a favore di macchine virtuali ma sarebbe reinventato come base di Windows Server Containers.

Il codice di prototipo silo di server non era stato esaminato in anni. Non è stato anche compilare, tantomeno funzione e era prototipo scritto codice per dimostrare la tecnica è valido in Windows, ma molto dall'ambiente di produzione. Il team ha dovuto una scelta, ricominciare da zero oppure tentare di ripristinare il prototipo e proseguire da quel punto. Si è scelto di quest'ultimo. Quando il prototipo è stato sviluppato, è solo un piccolo team di sviluppatori dimostrando che la tecnologia era valida, ma ora la forza del team di progettazione di Windows completa dietro il progetto. Gli architetti e tecnici su Windows sono state redatte per consentire. Il team di archiviazione ha creato la virtualizzazione del file system; il team di rete creato l'isolamento rete; il team di kernel ha creato la gestione della memoria e la pianificazione astrazioni; E così via.

Alcune importanti domande dell'architettura è rimasta; in particolare, come Microsoft gestisce i processi di sistema? In Linux, un contenitore viene spesso eseguito solo un singolo processo che condivide i servizi di sistema nel kernel con l'host e altri contenitori. Tuttavia, per migliorare la sicurezza e facilità di manutenzione, Windows ha spostato codice esternamente al kernel e i processi in modalità utente per molti anni. Questo rappresentato un problema per il team: È possibile condividere tutti i servizi di sistema, richiedere modifiche a tutti i servizi di sistema per informarli dei contenitori o iniziare una nuova copia dei servizi di sistema in modalità utente in ogni contenitore. Si trattava di una decisione difficile: abbiamo temono l'impatto del tempo densità e avvio dell'avvio di nuove istanze di tutti i servizi in modalità utente in ogni contenitore. Su altro lato, abbiamo preoccuparsi delle complessità e costi in corso di aggiornamento di tutti i servizi di sistema in Windows, sia per noi e per sviluppatori di Windows. Alla fine abbiamo atterrato su una combinazione dei due approcci, ovvero un insieme di servizi ha rilevato con contenitore, ma la maggior parte dei servizi eseguiti in ogni contenitore.

Poiché i contenitori di condividono memoria di sola lettura tra loro e l'host, in modo che solo la memoria privata per ogni contenitore è stato minimo l'impatto sulla densità. Tempo di avvio è stato un compito arduo, tuttavia, la chiamata a questa decisione in questione più volte; Quando si è dimostrato prima Windows Server Containers nell'introduzione di Build 2015, impiegato alcuni secondi per iniziare, in gran parte a causa del tempo di avvio dei servizi di sistema. Tuttavia, il team delle prestazioni di Windows Server era al caso. Essi profilato, analizzati e ha collaborato con i team attraverso Windows per rendere i servizi più veloce e ridurre le dipendenze per migliorare il parallelismo. Il risultato di questo impegno reso non solo avvio contenitore più veloce ma effettivamente migliorata avvio ora di Windows, nonché. (Se il Xbox o area avviato avvio più veloce ultimo anno, è possibile grazie contenitori.) Avvio del contenitore è passato sulle sette e otto secondi per un avvio di frazioni di secondo tempo in meno di un anno e questa traiettoria per ridurre il tempo di avvio continua anche oggi.

Isolamento di Hyper-V

Spesso, la prima domanda controllabili relative isolamento Hyper-V è simile, "non contenitori forniscono isolamento già? Quindi, perché è necessario Hyper-V?" I contenitori forniscono isolamento e per la maggior parte degli scenari di isolamento è probabilmente sufficiente completamente. Tuttavia, il rischio è che se un utente malintenzionato è in grado di compromettere il kernel può potenzialmente uscire il contenitore e impatto altri contenitori o l'host. Con attacchi kernel da relativamente comune in Windows (in genere diverse per ogni anno), il rischio per i servizi come automazione di Azure o Azure Machine Learning che usano ed eseguire il codice gestito dall'utente o di terze parti in un'infrastruttura condivisa è troppo elevato fare affidamento solo l'isolamento del kernel. I team di creare e gestire questi tipi di servizi che era per gestire la densità e avvio dei costi di macchine virtuali complete oppure compilare diverse tecniche di sicurezza e isolamento. Ciò che è stato necessario è un meccanismo di isolamento generico che è stato matura per gli intrusi ancora safe multi-tenant: Windows Server Containers con isolamento di Hyper-V.

Il team si è già impegnato in Windows Server Containers e questo fornito un'esperienza eccezionale e un modello di gestione per i team di servizi di compilazione. Accoppiando la tecnologia con l'isolamento testata di Hyper-V, è possibile fornire la protezione richiesta. Tuttavia, è necessario per risolvere i problemi di densità e ora di avvio tradizionalmente associati a macchine virtuali.

Come la maggior parte delle piattaforme di virtualizzazione, Hyper-V, è stato progettato per eseguire guest con un'ampia gamma di sistemi operativi sia vecchi che nuovi. Con l'obiettivo di si comporta come Analogamente hardware possibile, per raggiungere questi obiettivi della soluzione la maggior parte delle scelto di piattaforme di virtualizzazione è stato emulazione hardware comuni. Come la virtualizzazione è diventato comune, tuttavia, sistemi operativi sono stati "abilitate" (modificato in modo specifico per fungere anche da una macchina virtuale guest) in modo che la maggior parte di emulazione di non era più necessaria. Un buon esempio di questa è la tecnologia Hyper-V generazione 2 macchine virtuali, che ignora l'emulazione a favore di tempi di avvio migliorate e prestazioni, ma comunque ottenere lo stesso obiettivo dello stesso comportamento come se il guest era in esecuzione direttamente nell'hardware (bit.ly/2lPpdAg).

Per i contenitori, era un'esigenza diversa e obiettivi differenti: Non dobbiamo eseguire eventuali sistemi operativi meno recenti e sapevamo esattamente ciò che il carico di lavoro all'interno della macchina virtuale doveva essere, ovvero un contenitore. Quindi, abbiamo creato un nuovo tipo di macchina virtuale, che è stato progettato per l'esecuzione di un contenitore. Per soddisfare l'esigenza per un tempo di avvio veloce è stato creato tecnologia clonazione. Ciò non è sempre una sfida per le macchine virtuali tradizionali perché il sistema operativo diventa specializzato con elementi quali i nomi host e di identità, non può essere modificato facilmente senza riavviare il computer. Tuttavia, poiché i contenitori sono hostname le proprie identità, che non era più un problema. La clonazione inoltre collaborato con la sfida di densità, ma è stato necessario procedere: È necessaria la condivisione della memoria.

Esistono due approcci per la condivisione di memoria. È possibile cercare la memoria non comune tra più macchine virtuali e in modo efficace deduplicare (sebbene tecnologia casuale memoria kernel la maggior parte la difficoltà). Oppure è possibile seguire lo stesso approccio che kernel viene separando la memoria di sola lettura (pubblica) dalla memoria di lettura / scrittura (privata). Quest'ultimo richiede in genere che il gestore della memoria nelle macchine virtuali guest interagiscono tra loro, ovvero contatore ai requisiti di isolamento. Tuttavia, se si modifica la modalità di avvio delle macchine virtuali e accedere ai file, è stato rilevato un modo in cui l'host non deve considerare attendibile il guest e il guest non dispone di trust reciproche. Anziché la macchina virtuale l'avvio da e accesso ai file da un disco rigido virtuale, esegue l'avvio e accede ai relativi file direttamente dal file system host. Ciò significa che l'host può fornire la stessa condivisione di sola lettura memoria (pubblica). Ciò è essenziale per migliorare densità di diversi ordini di grandezza e indicano al percorso di continuare a migliorare densità per molti anni a venire.

L'altro valore che abbiamo scoperto con isolamento di Hyper-V è eseguendo un kernel diverso per il contenitore per gli sviluppatori che creano applicazioni nei contenitori sul proprio computer Windows 10, è possibile comunque eseguire kernel del server, garantire che applicazioni funzionerebbe allo stesso modo nell'ambiente di produzione come avviene nei computer di sviluppo. Pertanto, con l'aggiornamento di Windows 10 anniversario, abbiamo abilitato contenitori Windows Server con isolamento di Hyper-V e si lavorando con Docker Docker per Windows per sfruttare la nuova tecnologia per gli sviluppatori.

Contenitori docker e Windows Server

È rimasta una domanda: come utenti interagirà con questa nuova tecnologia di piattaforma? Nel mondo Linux Docker era stata raccogliendone lode e stato rapidamente diventando lo standard de facto per la gestione dei contenitori. Perché non consentire agli utenti di utilizzare Windows Server Containers allo stesso modo? Che rientrano che scenari a San Francisco per incontrarsi con Docker, certi cosa pensi la società di un contenitore basato su Windows e che saranno interessato nella creazione del tutto su Windows. Ero per una sorpresa: Solomon considerato che l'idea di contenitore di Windows era eccezionale! Anche se sarebbe creare società al suo interno? Tale conversazione modificato completamente l'aspetto del progetto. Solomon detto semplicemente, "Si è certi Docker open source, è possibile aggiungere il codice per il funzionamento in Windows e ti aiuteremo a" che ha fatto. Da allora, John Howard, software engineer del team di Hyper-V, è diventato un gestore del progetto Docker e, in effetti, arrivato al collaboratore di codice un quarto (bit.ly/2lAmaZX). Figura 1 Mostra l'architettura di base di contenitori e Docker per Linux e Windows.

Confronto tra l'architettura di base di contenitori e Docker in Windows e Linux
Figura 1 architettura di base di contenitori e Docker il confronto tra Windows e Linux

In sintesi

Quattro mesi a Microsoft Ignite, verrà avviato Windows Server 2016 e ha annunciato l'espansione della nostra relazione con Docker, ovvero che la versione supportata in commercio del motore di Docker senza alcun costo aggiuntivo fornirà ai clienti di Windows Server. Da allora, è stato un turbinio di attività. I clienti Tyco usano contenitori Docker e Windows Server per rivoluzionare le modalità di creazione di software e per modernizzare le applicazioni esistenti, con la stessa piattaforma (bit.ly/2dWqIFM). Visual Studio 2017 è completamente integrato di strumenti per i contenitori di Windows e Linux, incluso il debug con F5, e Visual Studio Code è Dockerfile e comporre integrato direttamente nel supporto. Servizi di contenitore di Azure e Amazon avere aggiunto il supporto per Windows Server Containers e immagini del contenitore basato su Windows ben oltre 1 milione prelevate hub Docker. Per ottenere l'orchestrazione e la sicurezza end-to-end, Data Center di Docker è la piattaforma per sviluppatori e gli amministratori di sistema di compilazione, spedire ed eseguire le applicazioni distribuite in qualsiasi punto. Con Docker, frictionlessly organizzazioni compattare recapito dell'applicazione da mesi ai minuti, spostare i carichi di lavoro tra i Data Center e cloud e raggiungere 20 volte maggiore efficienza l'utilizzo delle risorse di elaborazione.

Quando ho intrapreso contenitori sapevo che doveva essere un progetto intensa. Sapevo stava per eseguire alcune notti lungo, i fine settimana alcuni funzionante e un notevole sforzo, ma vale la pena perché consentiva milioni di sviluppatori creare applicazioni più veloce. Sapevo avrebbero dovuto essere divertente e che avesse la possibilità di modifica della modalità di sviluppato e l'esecuzione di applicazioni in Windows. È stato divertente che potrei avere mai previsto e, mentre anche più di lavoro è previsto, non scambi questa esperienza gli elementi. Ricordo una fine settimana nelle prime fasi del progetto, guardare attraverso la finestra dell'ufficio come ho lavorato a un giorno splendide, soleggiato estate e pensare all'utente corrente "che spero persone addette per utilizzare questo materiale..."


Taylor Brownè una gestione del programma principale lead nel Windows e gruppo di dispositivi in Microsoft.  Come membro del team di progettazione di Windows di Base che è responsabile della strategia per gli sviluppatori di Windows Server, nonché in particolare sulle tecnologie di contenitore, tra cui Windows Server Containers. Brown iniziato la propria carriera in Windows funzionante nello stack 1394/Firewire per Windows 2003, quindi lavorando ACPI/risparmio energia per Windows Server 2003 SP1 prima di unire il team di macchina virtuale appena creato. Da allora ha contribuito alla tecnologia ogni macchina virtuale fornito da Microsoft, tra cui Virtual PC, Virtual Server e ogni versione di Hyper-V, rendendo quest'ultimo è riconosciuto come un settore esperto in tecnologie di virtualizzazione. Contattarlo all'indirizzo taylorb@microsoft.com.

Grazie al seguente esperto tecnico per la revisione dell'articolo: David Holladay