[RIPRODUZIONE DI BRANI MUSICALI] DAVID MALAN: Va bene. Grazie mille per essere venuti. Si tratta di un seminario CS50 su Docker, un tecnologia che noi stessi e CS50 tendiamo hanno iniziato a utilizzare per qualche tempo. Quindi il mio nome è David Malan, io insegnare Introduzione di Harvard di Informatica. Per un po 'anni, stiamo dando agli studenti scaricabile sul lato client macchine virtuali su cui fanno i loro problemi insiemi. Che ora abbiamo la transizione a un ambiente Copertura che in realtà utilizza questa tecnologia chiamato Docker, in modo tale che tutto il CS50 gli studenti hanno ora il loro propri contenitori Docker che presto sente tutto. Inoltre, sul server di CS50 cluster di lato, per molti anni stavamo usando cloud server di Amazon. Siamo stati in esecuzione individuale macchine virtuali. Anche questo, abbiamo iniziato a passare a queste cose chiamate contenitori Docker in modo che tutte le nostre applicazioni sono ora perfettamente isolate l'una dall'altra. Quindi, per questo e altro, mi permettono di introdurre i nostri amici, Nico e Mano, da Docker sé. NICOLA Kabar: Grazie, David. Ciao a tutti. Il mio nome è Nico e questo è Mano. Noi siamo da Docker. Stiamo per essere parlare about-- dando voi ragazzi un intro a Docker, e, si spera, verso la fine di questo discorso si può realizzare quanto si può utilizzare per il medico ossalato lo sviluppo delle applicazioni e la distribuzione. Quindi, stiamo per cominciare reale veloce con alcune informazioni di base. Descrivere ciò che Docker è tutto. Come funziona? Come è architettato? Farò alcune demo. E Mano sarà che descrive come è possibile utilizzare Docker e dando passaggi specifici come si può iniziare. Le sarei grato se voi potete tenere off per le vostre domande verso la fine. In questo modo, potrei essere affrontando quelli domande durante la presentazione. Così lasceremo po 'di tempo verso la fine per le domande. Quindi, solo reale veloce, che ha in realtà mai lavorato su Docker, come ha giocato con esso? Eccezionale. Raffreddare. Grande. Così, ho intenzione di iniziare a con un po 'di storia. Così indietro negli anni '90 e primi anni del 2000, fondamentalmente come gli sviluppatori web, sviluppatori di applicazioni, quando sono andati a distribuire un'applicazione era legato al metallo nudo. E 'stato un server. E 'stato una sola applicazione. Tradizionalmente, un esempio sarebbe come un stack LAMP, dove realmente dovuto richiamare il pool di risorse. CPU, memoria, disco, rete, installazione sistema operativo per di più. Se stai servendo qualcosa, se si sta effettivamente avendo web server, avete bisogno di qualcosa di simile Apache servire. Se l'applicazione ha bisogno di database, rovescio, si dovrebbe installare qualcosa come MySQL, e così via. E se avete bisogno del tempo di esecuzione, phps e il lavoro PHP Python erano lì. E così abbiamo dovuto fare quei passi in ordine per ottenere l'applicazione installato e funzionante. Se avete bisogno di più potenza di elaborazione voi, fondamentalmente dovuto chiamare il vostro Ops ragazzo o la ragazza per andare e accumulare un nuovo pezzo di hardware, collegarlo, e si deve ripetere quelle processi ancora e ancora. Quindi questo processo è stato relativamente costoso. Era sicuramente molto lento. Era inefficiente. E in molti casi, la vostra hardware è stato sottoutilizzato. Così, nel fine degli anni '90 e primi anni 2000, la virtualizzazione dell'hardware si è imbattuto. E come potete vedere qui in immagine, in fondo quello che hanno fatto si astrae il pool di risorse hardware libero e tipo di quelli serviti agli strati superiori, in questo caso, il sistema operativo ospite. E l'idea di le macchine virtuali sono imbattuto e che veramente aiutato Nube computing come lo conosciamo oggi. Così che cosa volesse dire è si possibile eseguire più macchine virtuali, che significava pile multiple, multiple applicazione su una stessa macchina. Questo sicuramente ha aiutato con il velocità di distribuzione delle applicazioni. Sicuramente con le spese. Non c'è bisogno di andare a passare energia, tempo e risorse a cremagliera più server per arrivare a più di calcolo. E la velocità di effettivamente portare quelle risorse up è molto più veloce. Grande. Così abbiamo risolto la fame nel mondo, giusto? No, non proprio. Quindi, virtualizzazione quanto è in realtà ha aiutato, affrontare il problema, effettivamente introdotto un sacco di sfide. L'hypervisor sicuramente introdotto un sacco di complessità, movimentazione quelli sottostanti pool di risorse. E 'più pesante nel senso che prima hai avuto un unico sistema operativo che è come tre, quattro concerti sul disco. Ora, se si dispone di 10 macchine su un singolo hardware si deve moltiplicare per il numero di macchine. E 'sicuramente più costoso in un certo senso è ancora avere per ottenere licenze per la tecnologia di virtualizzazione se non è open source. Ma cerchiamo di non prendere tutte le credito dalla virtualizzazione. Perché quello che è successo è che c'è un sacco di pile e un sacco di software tecnologie che sono state abilitate da quanto velocemente si sono stati in grado di ottenere alle risorse con il boom Cloud. Così, oggi una singola applicazione o servizio può essere utilizzando uno dei seguenti tempi di esecuzione o database. PHP, Python, MySQL, Redis, roba del genere. Quindi c'è un sacco di complessità in questo numero di stack per portare realmente su un unico servizio. E insieme a quella, hai avuto un sacco di risorse o infrastrutture sottostanti tipi per testare implementare e fondamentalmente prendere per la produzione di tali applicazioni che si sta sviluppando. Tanto più che le vostre squadre hanno Cresciuto a lavorare su queste applicazioni, ci sono un sacco di la complessità e le sfide che sono stati portati a garantire che il cycle-- fondamentalmente applicazione ciclo di sviluppo, è in realtà di successo. Quindi, il fatto che l'applicazione sta lavorando a livello locale sul vostro VM locali non garantisce che il suo collega sta per aspettarsi gli stessi risultati. E quando il team operativo è partecipano all'adozione di quello che hai e la distribuzione in produzione scala, anche non c'è alcuna garanzia che questo è in realtà sta per accadere. Quindi questo ci lascia con una davvero big-- un sacco di punti interrogativi, un sacco di sfide in realtà di fronte allo stesso modo nei giorni. E questo ci ha ricordato di il settore dei trasporti marittimi. Quindi il settore dei trasporti marittimi aveva un sacco di merci, come si può vedere sul lato sinistro. E sul lato destro, c'è un sacco di, in fondo, modi per spedire tali prodotti. E cosa succede in coppia la gente si sono riuniti e hanno detto, abbiamo bisogno di standardizzare il modo abbiamo effettivamente spedire tali prodotti. E boom, si ha la container intermodale. Così hanno convenuto sulla più misure comuni per il contenitore. Come gestirli. Cosa esatto metodo che avete bisogno caricarli e scaricarli. E quindi, che veramente ha aiutato il settore dei trasporti marittimi. Ora più del 90% messa a fuoco trasportato a livello globale stanno usando quei contenitori. E che diminuisce sicuramente le spese nonché i danni dovuti alla spedizione. Quindi prendiamo lo stesso modello e noi applicare il software di sviluppo due app architettura, nel senso che containerizzazione ha preso la virtualizzazione di un livello. Così, invece di farlo a livello hardware, è diventato più di un esercizio la virtualizzazione a livello di sistema. E lo facciamo fornendo ogni applicazione in una leggera, isolato, eseguibile, e portatile, soprattutto, un modo per confezionare effettivamente tutto ciò di cui ha bisogno per funzionare. Ovunque si può essere eseguito. Quindi, a prescindere se si sta eseguendo su ambiente dev locali, la vostra produzione ambiente, la vostra messa in scena o prove. Non importa quale sottostante infrastruttura è lì, hai avuto una applicazione che lavora funzionale. Ecco, questo è esattamente ciò che fondamentalmente contenitori fanno a questo problema. Si rivolgono dal imballaggio in modo tale che si può garantire che è distribuito con successo, non importa dove vive. Quindi, se si sta andando come, Bob è ancora OK. Se sei confuso con quello che sto dicendo, Ho intenzione di essere elaborando su questo. Così come fa Docker stesso inserirsi in questo quadro? Così Docker è una piattaforma aperta facilmente, sottolineare facilmente, per costruire la nave, correre, auto leggero portatile contenitori app sufficienti ovunque. Quindi, se si prende qualcosa da questo parlare, si prega di prendere quanto segue. Se avete la vostra applicazione in esecuzione a livello locale e si sviluppò la utilizzando la piattaforma Docker, si aspettano per essere implementato con successo. Non importa quale sia il infrastruttura sottostante. Quindi, se avete un Docker contenitore e sta funzionando, quindi a patto che ci sia un Docker motore dall'altro side-- se l'infrastruttura operazione utilizza qualsiasi Cloud, se è AWS, o Google, o Microsoft, o uno qualsiasi dei cloud pubblici, o il proprio Cloud, o il vostro stack open Nube, o il vostro ambiente locale. Se si dispone di un motore in esecuzione, che i mezzi esso sarà implementato con successo lì. Sta andando a essere in esecuzione esattamente lo stesso comportamento Progettato come che sia. Quindi, se guardiamo at-- Vado passare attraverso quello che in realtà sono i componenti principali del Docker. Così Engine è al centro della finestra mobile. E 'il cervello del. E 'orchestra costruzione, il trasporto, e distribuzione e la gestione contenitori stessi. Tirerò in quello che fa Engine più in dettaglio in un secondo. Fondamentalmente, perché dottore è stato costruito intorno alle architetture client server, Quindi, al fine di interagire con il Engine bisogno di una sorta di un cliente. Le immagini sono i modelli in che i contenitori sono costruiti da. Così le immagini sono fondamentalmente file appena statici. Modelli e contenitori è in realtà ciò che è è in esecuzione in fase di runtime che sta scontando l'applicazione o fare qualcosa con i dati. Registro è affrontata come un problema di come effettivamente distribuire le immagini. Quindi, se avete bisogno di condividere un'immagine che hai lavorato ad un tuo collega o al team ops, è usarlo utilizzando Registro di sistema. È possibile scaricare un open source versione di esso che Docker lavorato su e open source. Oppure è possibile utilizzare Docker aiuto, che è la versione Copertura per spingere e tirare le immagini là fuori. Questa è una cosa enorme. Perché c'è un enorme ecosistema intorno Docker ed è davvero utilizzando pesantemente l'hub. Quindi, per riassumere qui, questo è come il minimalista cliente workflow Docker. L'interazione con l'ospite, in questo caso sono i demoni finestra mobile. E 'la stessa cosa di motore. Tu fai comandi come Docker costruire, tirare, correre. E il motore si va e fa queste cose. Quindi, o interagisce con Registro di sistema per tirare quelle immagini e gli strati delle immagini. Sia se si desidera distribuire, eseguire contenitori, li uccidono, buttarli giù, quant'altro. Quindi questo riassume il flusso di lavoro di tutti questi componenti. Quindi, se si prende ogni componente da solo. Così Engine, è solo un demone. Sarà tipo di giocare a supporto su Linux perché fa richiedono alcune funzioni del kernel di Linux. Ma Windows sta lavorando a fare la stessa cosa. Si suppone di essere sostenuta da Windows Server 2016. Così, ancora una volta, le responsabilità con il motore, o devono, costruire immagini. Estrarre immagini dal Docker Hub o il proprio Registro di sistema. Se hai finito con le immagini o si crea un nuovo immagini, si può spingere chi è rimasto a Registro di sistema per distribuirli ad altre squadre. E cercando di contenere localmente e gestire il ciclo di vita contenitori localmente. È costruito attorno HTTP API REST. Quindi tecnicamente è possibile scrivere il proprio cliente fintanto che utilizza HTTP, che è un meccanismo standard per parlare a motore e un sacco di altri servizi. E si può vedere da qui che, indipendentemente di ciò dell'infrastruttura è, fino a quando si can-- tutto avete bisogno è un operativo sistema Linux in particolare. Ed è possibile installare Docker Engine per di più e farlo correre ed orchestra, fondamentalmente, tutte queste app uno, due, e tre sono contenitori attuali. Ecco, questo è Engine. Come ho detto prima, perché è necessario interagire con motore, c'è il cliente. Ma in realtà quando si installa Docker, le navi con esso. Così viene installato, quindi è un unico binario. E si può fare chiamate locali al vostro Docker motore. O chiamate remote al Motori remoti. Si fa uso di HTTP, come Ho già detto in precedenza. C'è un client GUI chiamata Kitematic da Docker. E ci sono sicuramente un sacco di altre persone che stanno costruendo un sacco di GUI che in fondo implementano alcuni HTTP chiama per parlare con motore. Solo alcuni comandi di esempio. Se lo fai versione Docker, sarebbe vi mostrerà la versione client, nonché la versione server. Se lo fai informazioni Docker lo farà dirvi tutte le informazioni a quanti contenitori sono in esecuzione o creata, quante immagini avete, e così via e così via. Qui ho, nel prossimo a ultima casella, ho dottore corsa. Ecco come realtà sono creando contenitore. E io sto dando a echo Ciao Mondo e dormire per un secondo e quant'altro. E si può vedere il risultato. Quindi è in corso. E simile a ps Linux, si può vedere tutti i processi e, in questo caso, tutti i contenitori di funzionamento. Questo uno indietro riferendosi a il contenitore Ho appena creato. Così, questo è molto importante perché, come, può essere un po 'di confusione. Così le immagini sono di sola lettura del raccolta di file, giusto? Sono ciò che il nostro contenitore si basa su. Ma sono di sola lettura sola. Quindi si inizia con un'immagine di base. Essa tende a imitare OS-like, così Ubuntu, CentOS, immagine di base quant'altro. E poi iniziare a costruire in cima che, certi strati, che costituiranno l'immagine finale, il risultato finale qui. E ciascuno di questi strati dovrebbe avere un'immagine genitore che fa riferimento quando si in realtà vuole creare. Essi sono immutabili, nel senso che di sola lettura perché sono, non si può in realtà apportare modifiche a loro. È possibile utilizzarli per creare un container da un'immagine che chiamerà tutti i successivi immagini richieste sotto. È possibile apportare modifiche a un livello diverso, si tratta di uno strato di riscrittura io sarò parlare in un secondo. Ma ciascuno di questi strati non sono mai cambiati. Fondamentalmente immagini utilizzano qualcosa chiamato Unione File System, UFS. E ci sono archiviazione diverso backend che utilizzano questa tecnologia. E ciò significa che riunisce i file system distinti per farli apparire come uno. Così si può effettivamente, da punto di vista applicativo, si dispone di una cima di una vista che mostra tutto il file system diverso bisogno per tale applicazione per l'esecuzione. Ma sono in realtà, su questo, sono in realtà in luoghi separati ed essendo utilizzato da altri contenitori pure. Quindi, come si può vedere qui che se cominciamo immagine demone con come un'immagine di base, e quindi entriamo e aggiungere [? emacs?] e quindi questo è un altro strato. E poi aggiungere Apache. Questo è un altro strato. E poi passiamo la container da questo. Ciascuna di tali immagini, ciascuno di questi strati, è distinto e può essere riutilizzati da altri contenitori. Se guardate contenitori stessi, sono un po 'come VM-like, ma non trattati allo stesso tempo. Quindi, non hanno, tecnicamente, il sistema operativo completo sotto di loro. Usano il singolo kernel del sistema operativo host. E costruire in cima a quello. Essi imitano in modo in cui guardare. Imitano il loro root file sistema del sistema operativo. Ma in realtà non si replicano. Così, invece di avere strati immutabili, l'ultimo strato, che è il contenitore sé, è un livello di lettura-scrittura. Che gestisce anche i processi della vostra applicazione. E dipende strati sottostanti. Ogni contenitore è creato da un'immagine. E quella può essere una singola livello o immagine multistrato. E voglio sottolineare qui che Docker utilizza pesantemente, o si basa su Copy-On-Write meccanismo. In modo che, in realtà, se non si è apportare modifiche al contenitore, non sta andando a prendere spazio extra. Ecco, questo è fondamentalmente come voi Riassumendo un Copy-On-Write. E 'intenzione di accelerare decisamente up il tempo di avvio per il contenitore. Perché se non stai facendo modifiche al contenitore, sta utilizzando ciò che c'è già. Così, come in realtà funziona. Parte di esso è come, in questo momento, utilizza almeno due kernel chiave Caratteristiche. E questo è fondamentalmente ciò che creato quel livello di isolamento per i contenitori stessi. Queste caratteristiche sono spazi dei nomi e cgroups. Così namespace sono un modo per creare risorse isolati, in modo che all'interno del contenitore stesso, solo tu puoi vedere alcune risorse. Come ad esempio l'interfaccia di rete oppure i determinati utenti o roba del genere. E questi sono solo visibili e solo accessibile all'interno del contenitore. Cgroup sugli altri limiti laterali come si utilizza tali risorse. CPU, memoria e disco. Quando si può andare, ho significa questi sono in realtà caratteristiche che sono state sviluppate per-- sono parte del kernel di Linux. Quindi non sono stati reinventati da o ricreati da Docker. Docker li usa. Che dottore davvero fatto qui è in realtà creazione orchestrato namespace per ogni contenitore e creando le cgroups modo che sia ridicolmente facile creare contenitori con quelle caratteristiche. Naturalmente, come ho descritto in precedenza, Union File Systems e Copy-On-Write veramente aiutare la velocità e il disco Riciclaggio di contenitori. E una volta che si ottiene il mani intorno Docker, si sta andando a vedere quanto velocemente è quello di in realtà spin up contenitori e lacrimogeni giù. Quindi, se si potrebbe chiedere, come può si effettivamente costruire le immagini? Costruiamo immagini da un processo di creazione contenitori e apportare modifiche, alterare loro, e li commettendo a diventare un'immagine. Quindi è un pollo e uovo di riferimento qui, perché tutti i contenitori vengono da immagini e immagini provengono dai contenitori commessi, per la maggior parte. Ci sono tre opzioni per creare immagini. Io vado a descrivere il primo e l'ultimo. È possibile manualmente andare a eseguire il contenitore e fare le modifiche, come si farebbe su qualsiasi macchina virtuale o qualsiasi altro sistema operativo, ad esempio come l'installazione di nuovi binari, l'aggiunta di file system, e quant'altro. E poi si esce, come si può vedere lassù. Sto uscendo il mio contenitore. E poi sto facendo Docker commesso. E sto commettendo quello. Si può vedere che il numero qui è solo un UUID, o il primo 12 bit del UUID. O byte del UUID. E poi io chiamo la mia immagine. Così ora si prende cura di Docker registrando tutto quello che ho fatto e creando il nuovo immagine basata su quella. Non ho intenzione di parlare di archivio, ma c'è un modo è possibile ottenere un singolo, creare un singolo, o di fare un singolo immagine livello utilizzando tarball. Quello che ho intenzione di parlare di questo e ciò che è in gran parte utilizzato oggi, è Dockerfile. Che è tecnicamente la prima passaggio automatico da Docker sé. Così Dockerfiles sono cose che siete andando a vedere in un sacco di pronti contro termine GitHub oggi. E 'fondamentalmente solo una file di testo che descrive esattamente come costruire un'immagine. E per ogni linea, in realtà crea contenitore, esegue quella linea, commette quel contenitore in un nuova immagine, e, in fondo, utilizzarlo per tutte le operazioni successive fino ad arrivare all'ultima immagine. Che è fondamentalmente la finiscono obiettivo qui, alla fine. E dopo che exec-- dopo scrivere il Dockerfile, che è puramente testo, si fa un Docker costruire e il nome dell'immagine. E si punta a che questo è dove il Dockerfile è. E si può aspettare di vedere la mia immagine come immagine che si ha a livello locale. Quindi, questo è solo una visuale esempio di ciò che accade. Si inizia con un'immagine di base. Si esegue che in un contenitore che non altera l'immagine di base stessa. Ma invece crea una riscrivere strato su di esso dove si fanno le modifiche, in cui si impegnano e si ripete il processo fino a quando si arriva alla vostra immagine finale. E così facendo, ogni altra generazione processo può utilizzare gli stessi strati e lo stesso-- fondamentalmente Docker memorizza tali livelli. In modo che se sto facendo la stessa identica processo, ma invece di installare PHP, Sto installare Python. Sta andando a utilizzare Apache e Ubuntu. Quindi, in questo modo si sta utilizzando il disco. Si utilizza la cache e immagini lì. Il pezzo finale è del Registro di sistema, che è come si distribuiscono le vostre immagini. E, come ho detto prima, c'è una versione Nube di esso, che è Docker Hub. Si può andare a esplorare molti, fondamentalmente si tratta di un prodotto SAS pubblico è ancora possibile avere immagini private, ma c'è un sacco di immagini pubbliche. In realtà è illimitata, è possibile spingere immagini pubbliche illimitate lì. E questo è come si può collaborare con il tuo team. Si può solo puntare li voi REPO e si può scaricare o l'immagine e si può scaricare il programma. Quindi basta con le chiacchiere. Chi vuole vedere alcuni demo reale veloce? Tutto ok. Così qui ho. CA voi ragazzi vedere il mio schermo? Tutto ok. Così ho Docker correre qui, quindi può controllare it's-- Questa è la versione di Docker che è in esecuzione. Può fare Docker informazioni. Verificate tutte le informazioni su quanti immagini che hanno, e così via e così via. Docker PS, non c'è niente di corsa. Concatenato quelli. Quindi la prima cosa che voglio fare è spettacolo come si può facilmente eseguire un contenitore. Così la bellezza di Corsa medico, se effettivamente non trova un'immagine a livello locale, Per impostazione predefinita, si parla al dottor Hub e cerca di trovare lì e download per voi. Quindi include un Docker comando di tirare, naturalmente. Quindi, se faccio un Docker corsa, ciao-mondo. Quindi, prima sta andando per cercare di individuarlo. In caso contrario, come si può vedere qui, che non riusciva a trovare a livello locale. In questo momento solo tirato due strati che ha fatto l'immagine e ho eseguito. Il ciao-mondo è fondamentalmente uscite, quello che hai fatto. Quindi questo è il più facile, uno degli esempi più semplici. Quindi in realtà Ho appena eseguito e terminato il contenitore reale veloce. Se voglio run-- e dal modo in cui, se Voglio volta che, proprio in modo da sapere, questo è quanto tempo ci vuole per in realtà spin up e contenerla. Ci stiamo misurando in millisecondi. Così si può vedere quanto questo può effettivamente aiutare non solo in fase di test, ma anche anche la distribuzione. Ecco, questo è una breve nota su questo. La prossima cosa sto intenzione di fare è in realtà eseguire un'immagine che ho già preparato. Così finestra mobile corsa. -d è solo una bandiera per raccontare il suo funzionamento in background. E -p assegna determinate porte. Perché per impostazione predefinita, il contenitori sono isolati, quindi bisogna specificare esattamente come si possa accedervi. E in questo caso, sto dicendo Docker per mappare una porta casuale sull'host ad una porta specificata all'interno il contenitore stesso. E questo è fondamentalmente dove il image-- Speriamo che questo sia quello giusto. Così fa download paralleli ciascuno di questi strati, come potete vedere qui. Questi sono degli strati fare l'immagine finale che ho costruito. Sta andando a prendere un secondo. E voilà. Così ora se faccio un ps finestra mobile, dovrei vedere qualcosa che è in esecuzione. Dovrei vedere l'ID, l'immagine che questo era basato fuori, e il comando che è stato eseguito. E come per accedervi è fondamentalmente si va a quella porta. Quindi ho intenzione di andare a-- questo è che io sono in esecuzione su AWS. Ho intenzione di andare a 32769. Oops. E qui andiamo. Quindi questo è in realtà solo un servizio web che mostra quale contenitore è servito da. Così si può vedere che è dal contenitore A9F. Ed ecco questa è la il nome del contenitore. Così voi potete vedere quanto velocemente era in realtà non solo tirare, ma anche distribuzione di questo contenitore. Ora il passo successivo è quello guardare in Dockerfiles e come possiamo realmente costruire nuove immagini. Vado solo per andare a prendere clone, un CAMPIONE Dockerfile basato sul precedente diagramma, quello di Apache e PHP. Speriamo Ricordo il mio repo. Così ho il mio repository in questo momento. E si sta andando a vedere questo molto in realtà. Non ho installato albero. Quindi, in pratica si sta andando a vedere come la documentazione del codice sorgente in giro , e poi un Dockerfile sulla come pacchetto realtà. Quindi è solo un campione di PHP che riecheggia ciao CS50. Quindi, se voglio farlo funzionare, Farò finestra mobile build. Devo costruire prima. Ho intenzione di chiamarlo demo_cs50. E avete bisogno di un tag di troppo. Così chiamiamolo v1 dot. Quindi, come ho descritto in precedenza, quello che sto facendo oggi è Sto dicendo Docker andare uso che-- realtà, mi dispiace, il mio male. Non abbiamo preso uno sguardo al Dockerfile sé. Così le uniche cose di qui sono index.php così come il file readme e un Dockerfile. Quindi, se si dà un'occhiata a il Dockerfile, quindi è molto simile a quello Ho descritto in precedenza. E 'solo un mucchio di passi che esegue Docker creando e abbattere contenitori e [? contando?] li in un'immagine. E in fondo si può see-- [incomprensibile] it qui-- ma questo è da repo locale. Sta per andare a prendere index.php. Ecco, questo è l'unico codice sorgente che sono in realtà parte della vostra applicazione. Tutto questo sono fondamentalmente sistema idraulico operativo, ottenere i pacchetti di destra e Apache e PHP, e quant'altro. Ma questo è in realtà prendendo index.php e impegnandosi nel contenitore, nell'immagine. Quindi, se si va avanti e si esegue il comando facendo quanto segue, è going-- realtà, questa operazione potrebbe richiedere un po '. Speriamo che non ci vuole troppo tempo. Così si può vedere i passaggi. E vi incoraggio ad andare torna a casa oggi e provarlo. E Mano descriverà esattamente come lo fai. Ma è davvero bello vedere esattamente cosa sta succedendo dietro le quinte. Ma è ridicolmente facile da costruire immagini e distribuire utilizzando Docker. Sta prendendo un po ' più a lungo di quanto mi aspettassi. Vediamo cosa succede quando you-- raffreddare. Quindi, come si può vedere, ciascuno di questi passi rappresentano linee nella Dockerfile. E lo dimostra qui che con successo costruito questa immagine. Quindi, se faccio immagini docker, ho intenzione di vedere tutte le immagini che ho localmente. E uno di loro si chiama il mio nome utente, e il nome dell'immagine, e il tag representing-- soprattutto si tratta di un tag di versione. Così ora se voglio correre , mi fa correre finestra mobile. E voglio solo fare un -P -d. Fare v1. Così posso vedere ora che ho due contenitori in esecuzione, quella che ho appena creato e il ciao Docker quello che ho ottenuto l'ultima. E si può vedere qui che assegnato una porta diversa. Quindi, se vado lo stesso IP, ma assegnarlo un port-- diverso si spera non l'ho fatto. Così ora si tratta di applicazione che ho appena schierato. Se voglio fare i cambiamenti, mi può modificare rapidamente il codice sorgente e procedere come segue. Facciamo ciao Harvard. Così ora che cosa sta succedendo ad accadere è che io sono andare per contrassegnare con un diverso version-- oh, Non questo guy-- Taggalo con una versione diversa. E si sta andando a see-- voi ragazzi si aspettano ed effettuare la stessa quantità di tempo costruire una seconda volta o no? Va bene, e qualcuno sa perché? Parla. PUBBLICO: [incomprensibile] NICOLA Kabar: E 'fondamentalmente noi cambia solo uno dei passi successivi. E quindi sta andando a utilizzare il cache e utilizzare ciascuno di questi livelli. E questo è veramente un po 'di caratteristiche dell'assassino di Docker è così che in realtà utilizza e reimpieghi presa in consegna il disco per lo stesso pezzi esatte di informazioni. Quindi, se facciamo la stessa cosa, ci sono voluti solo un paio di secondi. Se vogliamo redeploy-- così ora Dovrei avere tre contenitori. Ma questo è in corso servito su the-- sette uno. Così ora è il terzo contenitore. Tutti a capire quello che ho appena fatto qui? Così ora se si desidera condividere questo contenitore rapido reale con i tuoi amici, si può solo fare docker spingere il il nome del contenitore, si spera. Quindi ora sta andando a spingerlo a-- Non sto firmato qui. Mi dispiace per questo. Ma io non ho intenzione risolvere questo ora. Ma in fondo che un comando è solo salendo spingerlo. E si sta andando ad essere in grado di vedere se si va a Docker Hub E si accede, sei sarà in grado di vedere. E allora si può solo indicare chi sta di utilizzare l'immagine per andare a tirarlo. E possono usarlo. Con questo, si spera I tipi di dimostrato come è facile lavorare con finestra mobile. E sto solo andando a restituirlo a Mano. E sta andando prenderlo da qui. MANO MARCHI: Tutti i diritti grazie, grazie Nico. E allora? Così una delle cose che ho ha voluto fare è mettere insieme perché questo è un importante-- perché Docker e perché contenitori sono un tale importante nuovo sviluppo, un nuovo modo di fare realmente software. E prima di me, ho intenzione di basta introdurre alcune statistiche. Non ho intenzione di leggere tutti questi. Ma questo mostra molto su come popolare questo è nella comunità. Le tecnologie di base Docker sono open source. Ecco, questo è Docker Engine, comporre, Swarm, un mucchio di altre cose è tutto open source. E abbiamo, quello che ho fatto dire, 1.300 collaboratori. Si sta vedendo ora, se si guarda al numero di aperture di lavoro, l'ultima volta abbiamo guardato, era circa 43.000 posti di lavoro aperture menzionare direttamente la familiarità con Docker. Centinaia di milioni di immagini hanno stato scaricato da Docker Hub. E, beh, molto più grandi statistiche. Per coloro che sono curiosi, si è stato originariamente scritto in Python e poi riscritto in Go. Ed è stato solo aprire sorgente-- è solo stato rilasciato per circa 2 anni e 1/2, Il che significa che in 2 anni e 1/2, abbiamo visto una quantità enorme di crescita e l'importanza di questo nella comunità. E così voglio parlare un po 'sul perché. Quindi, solo per ribadire alcuni dei Punti chiave di Nico, Docker è veloce. E 'portatile. È riproducibile. E si imposta un ambiente standard. E Cosa-- questo è il mio schifoso debellare monoliti slide-- cosa è aiutare le persone fanno, che un sacco di industria del software iniziato a fare in primi anni 2000, si sta muovendo da questi monolitico singole applicazioni dove ogni dipendenza doveva essere testati prima l'intera applicazione ha avuto per essere distribuito, che potrebbe significare un sito web solo ma ho schierato una volta ogni tre mesi, o più, ad un servizio molto più oriented architecture o tipo diverso a componenti di architettura applicativa. E così gli stessi sono tipo di architetture che sfruttano Docker per l'esecuzione in questi tre principali aree di sviluppo, che è lo sviluppo scrivendo il codice vero e proprio, testare il codice, e la distribuzione di esso. Allora perché è così importante? Se sei a-- Vi faccio un esempio. Se sei un sito web sviluppatore dispositivo, sei lo sviluppo di un sito web che si basa sulla database che David ha prodotto qui. Spiacente David, ti sto chiamando. Se si voleva schierare il tutto, si sarebbe devono aspettare sotto un tradizionale sviluppo di software monolitico ambiente, si sarebbe dovuto aspettare fino a quando non è stato fatto con il database prima che si possa effettivamente fare eventuali modifiche al tuo sito web. Dovreste ridistribuire il intera applicazione di farlo. E che cosa Docker vi aiuta a fare è ogni persona opera su diverse componenti e aggiornarli come vanno, solo facendo Assicurarsi che le interfacce rimangono le stesse. Quindi ciò che ha fatto si è spostato persone dal fare queste massiccia monolitica software architettato che distribuito ogni mese per un continuo integrazione e continuo sviluppo ambiente. Ora questo non è unico a Docker, ma Docker rende molto più facile, il che significa che sei fondamentalmente costantemente la distribuzione. Parliamo con le imprese che sono la distribuzione di applicazioni affiancate pubblici migliaia di volte al giorno perché che vedono il valore in un solo fare piccole modifiche e fintanto quanto passa attraverso le prove, lasciandolo uscire in produzione. Nico mi diceva sempre precedenza che in molti ambienti, il ciclo di vita standard di un contenitore viene misurato in secondi, mentre una macchina virtuale potrebbe essere misurata in mesi. Volevo prendere un leggero girare qui perché sono in un istituto di istruzione. Ho voluto dare un esempio di come questo funziona in un ricerca educativa situazione. Quindi c'è una organizzazione chiamati bioboxes. Bioboxes fa DNA analisi per i ricercatori. Ora ciò che hanno trovato era che quando un researcher-- e questo non è il difetto di un particolare researcher-- ma quando un ricercatore schierato un algoritmo per analizzare, In modo particolare, un campione di DNA, avrebbero scrivere il software, pubblica che, forse a GitHub o da qualche altra parte, e poi sono stati fatti. Beh, il problema era che Non era necessariamente riproducibile. Perché, al fine di comprendere il software, sarebbero istituiti per il ambiente di sviluppo esatto che tale ricercatore utilizzato, solitamente loro laptop o un server, o di un dato centro che stavano usando. E di conseguenza, è stato molto difficile di riprodurre i risultati della ricerca quando Analizzando campioni di DNA a guardare le cose come incidence-- confrontare l'incidenza di attacchi di cuore sulla base di alcuni geni che sono presenti, per esempio, o il rischio di cancro, o qualsiasi altro genere di cose. Così quello che hanno fatto è stato invece hanno iniziato la creazione di contenitori. E si può andare a bioboxes.org, si tratta di una grande organizzazione. E quello che fanno è che producono contenitori basati su ricerche. E poi ogni volta che qualcuno invia nel loro campione, possono eseguirlo. E ha tutto l'ambiente necessari per eseguire tale algoritmo e produrre i risultati. E stanno trovando che sono molto più probabile e molto più rapidamente in grado di restituire i risultati a persone. E infatti, cosa fanno sono in esecuzione le proprie analisi sul DNA, l'invio che per bioboxes, e poi BIOBOX prende solo i dati, corre contro la varietà contenitori di diversi per vedere risultati diversi basato su una ricerca diversa. Quindi è molto potente modo in cui i ricercatori può fare una singola istanza che permette altre persone per cercare di riprodurre i risultati. Così come si fa a iniziare? Siamo ben supportato su Linux. Quindi, se si desidera installare nulla su Linux, si utilizza il normale gestore di pacchetti da installare. Se stai usando una Debian, e 'get apt. CentOS è yum. Fedora di Red Hat è rpm-- Non mi ricordo. Comunque, è tutto lì. Sosteniamo una grande varietà di distribuzioni Linux. È possibile controllare quelli fuori. Ci sono anche opzioni in modo da potrebbe funzionare su Mac o Windows. Ora Nico detto in precedenza che è stato supportato solo su Linux. Questo è vero perché ha bisogno di un kernel Linux. Ma, è possibile eseguire in una macchina virtuale. E che il Docker Toolbox FA, che è possibile scaricare, ti dà quella macchina virtuale. Quindi, solo un rapido 48 secondo, credo, scaricare. Basta una ricerca su Docker Toolbox, scaricarlo al Mac, e questa parte è di corso accelerato perché chi vuole vedere un segnale di download? Installazione Mac Standard, e allora sei andando a vedere Girolamo messo nel suo password. Questo è molto eccitante. E poi si installa un insieme di strumenti. E in particolare lo farà installare una linea di comando. E allora si potrebbe vedere Jerome testare le sue immagini. E poi sulla base di questo, si può vedere che YouTube pensa che Nico è interessato a Star Wars, The Jimmy Kimmel spettacolo, e credo che Ellen. Penso che ultimo è una clip da uno show di Ellen. Così Docker Toolbox viene però con più di una semplice macchina Docker. Così Docker Machine è la cosa che aiuta si imposta un virtuale macchina su Windows o Mac-- tua casella di Windows o Mac box-- e ti aiuta a fare il provisioning, Ma si tratta anche con Swarm e Compose, che sono progettati per aiutarti a fare grande implementazioni su larga scala della vostra applicazione. Quindi, se si desidera gestire cluster di nodi, gruppi di contenitori, comporre e Sciame sono la strada da percorrere a tale proposito. E, naturalmente, si tratta di Docker Motore e Kitematic, che è questa interfaccia grafica del desktop. Vorrei anche ricordare Registro Docker, che non è incluso nel pannello degli strumenti, ma è un modo per eseguire il proprio registri di Docker Immagini come Docker Hub, ma si può anche semplicemente usare Docker Hub come un modo per farlo. E, colpo di scena, si sta vedendo in esecuzione in un contenitore. Ed è così che siamo distribuzione dei nostri diapositive. Tutta questa presentazione è in realtà un ponte diapositiva HTML. Ed è in esecuzione in un contenitore, che è possibile ottenere per-- NICOLA Kabar: Sì, così è in esecuzione a tempo pieno sul mio Max. E sto presentando da esso. E basta fare Docker dopo installare il Toolbox. Si può solo fare una corsa finestra mobile e lo fanno, e utilizzare le diapositive. MANO MARCHI: E questo è tutto. Quindi noi tutti ringraziamo per essere venuti. E siamo felici di rispondere alle domande. Devo dire prima che qualcuno lascia c'è magliette laggiù. Siamo spiacenti qualcuno che sta guardando questo su Livestream o video, ma abbiamo Docker magliette laggiù. E sappiamo studenti Docker, e nella mia esperienza, professori troppo, come l'abbigliamento libero. Quindi grazie a tutti per essere venuti. E seguici su Twitter se volete, o no. Non mi interessa. Anche seguire Docker su Twitter. Questo è anche interessante. E poi il gioco è fatto. Docker.com. Grazie. [APPLAUSI]