‫Salve.
‫Questo video è stato realizzato per due motivi.
‫Uno, è nel caso in cui non si voglia eseguire Docker localmente.
‫Si desidera eseguire Docker su un server in remoto, sia per la produzione, sia per un altro uso del server o semplicemente
‫perché non è possibile eseguire Docker in locale per le risorse di licenza delle prestazioni, si sa che non si è amministratori locali.
‫Le ragioni possono essere le più svariate.
‫Si tratta del motore Docker per i server Linux.
‫Il motivo per cui dico che è un motore e i server sono componenti chiave che approfondiremo nel corso di questo video.
‫Questo video si concentrerà sull'installazione di Docker più aggiornato dalla posizione corretta, che è diversa
‫da quella dei gestori di pacchetti predefiniti di Linux.
‫Ci assicureremo quindi che l'alimentazione sia installata nel luogo da cui si intende operare, in modo da non effettuare
‫l'accesso via ssh al server per tutto il tempo.
‫Lo configureremo in modo da poterlo controllare da remoto, qual è il modo migliore per eseguire
‫un motore Docker su un server Linux?
‫Se non avete guardato il video precedente, che parla di Docker desktop
‫per i desktop Linux, non si tratta di questo.
‫Questo prima di avere Docker desktop, avevamo solo il motore Docker.
‫Ogni desktop Docker contiene un motore Docker.
‫Il motore Docker, invece, è un singolo binario chiamato Docker D o demone Docker, che può funzionare
‫su qualsiasi server Linux.
‫Se si dispone di un kernel Linux, è possibile eseguire la stessa cosa.
‫È possibile eseguirlo su un server Windows, Docker RD ESXi che può essere eseguito come servizio su un server Windows per eseguire
‫i container Windows.
‫Ma non ne parleremo in questo video.
‫Quindi il desktop di Docker, da eseguire sul sistema locale, serve solo per l'uso locale di Docker.
‫Ma questo è il motore di Docker che può essere eseguito su qualsiasi sistema Linux, sia esso locale o remoto, sia esso
‫una macchina virtuale o un server fisico, sia esso un Raspberry Pi, qualunque cosa sia.
‫Se è in esecuzione un kernel Linux, è presente nell'elenco e Docker ha un elenco compatibile di build supportate e testate
‫che sanno funzionare.
‫Non si tratta di tutte le distribuzioni Linux in circolazione.
‫Non include BSD, che non è tecnicamente Linux, e si concentra solo sui
‫grandi, come Central West, Red Hat, Ubuntu, Debian e simili.
‫E ci sono diverse architetture che supporteranno.
‫Quindi, come riferimento in questo video, vedrete il link a questa pagina che mostra l'elenco delle distribuzioni
‫Linux attualmente supportate per il motore.
‫Naturalmente utilizzerò Docker su Ubuntu, la mia distribuzione Linux preferita per i server, e vi spiegherò
‫come fare.
‫Sorvolerò sui dettagli perché in realtà dovrete solo leggere questo o eseguire lo script, di
‫cui parleremo in seguito.
‫Ora, sì, vi sto fornendo i link come risorse di questo video per tutta la documentazione relativa a tutti i modi
‫per installarlo su varianti di Linux, distribuzioni come Ubuntu, Fedora e tutte le altre.
‫Ma il modo più semplice per farlo, nella maggior parte dei casi, è l'esecuzione di uno script.
‫Se si digita nel browser, si ottiene Docker.
‫Si otterrà così uno script di shell che si può consultare, scaricare ed eseguire automaticamente.
‫Con Curl, il suo scopo è fondamentalmente quello di ottenere le impostazioni giuste e disinstallare le vecchie cose, installare le nuove,
‫assicurarsi di ottenere i sorgenti giusti e tutto il resto in un'unica soluzione.
‫Che è il modo in cui ho sempre installato Docker, da quando l'ho imparato molto, molto tempo fa, all'inizio
‫del progetto.
‫Quindi, forse per imparare, forse la prima volta che installate Docker su un server Linux, seguite la documentazione
‫che vi accompagna passo dopo passo con il vostro gestore di pacchetti.
‫Forse è apt, forse è yum, forse è APK, a seconda di ciò che si fa con la propria distro Linux.
‫Ma userò questo script, che è più semplice.
‫In pratica si tratta di ridurre lo script in un file e di eseguirlo con una shell.
‫E questo è esattamente ciò che lo script, se andaste all'ultima diapositiva, vi direbbe di copiare e incollare
‫questo script, copiarlo e poi eseguirlo.
‫Così lo facciamo e capirà su quale distribuzione sono, quale versione di quella distribuzione,
‫se è supportata e si collegherà in questo caso apt al gestore di pacchetti con la chiave per assicurarsi di ottenere
‫il giusto.
‫Repository per l'installazione e il comando viene eseguito per alcuni minuti, a seconda della velocità del
‫server.
‫E poi ci si ritrova al prompt della shell con la riga di comando di Docker, il motore o demone
‫Docker e alcune altre utilità.
‫Di solito viene fornito con alcuni plug-in, come build kit per la creazione di immagini, compose per l'esecuzione.
‫Approfondiremo tutto questo nel corso del corso.
‫Quindi, rendetevi conto che ci sono forse quattro o cinque binari in giro nel vostro sistema.
‫Ora, come in tutti gli altri modi in cui potete installare Docker, eseguite un comando Docker space version, digitate
‫quel comando nella vostra shell e dovreste ottenere almeno la versione client da riga di comando e la versione server.
‫Quando si ottiene la versione del server, significa che si è in grado di parlare con l'API del server su quel server.
‫Se si è nella shell del server, tecnicamente si sta parlando con gli host locali usando un socket.
‫Voglio solo ricordarvi che tutto ciò che avete appena fatto è open source, il motore Docker, la linea
‫di comando Docker, tutti i plug-in presenti.
‫Sono tutti completamente open source.
‫Il desktop Docker con licenza Apache, tuttavia, dai video precedenti, include tutti questi elementi
‫e il software closed source o con licenza di Docker.
‫Docker desktop è molto più di un superset di un gruppo di cose diverse.
‫Il motore Docker che stiamo installando è solo il minimo indispensabile.
‫È il demone necessario per eseguire un contenitore in Docker.
‫E come promemoria, come ho fatto nei video precedenti, se usate il comando di login di Docker, perché qui
‫avete solo accesso alla riga di comando, se digitate Docker space, log in, potete accedere
‫con il vostro ID Docker e questo vi farà ottenere altri pool.
‫Se ricordate, le piscine sono gli oggetti dei primi video di questo corso che contengono il software.
‫Si estrae l'immagine, la si esegue come contenitore e lo si fa per un certo numero di volte.
‫E Docker potrebbe alla fine lamentarsi e dire: "Ehi, guarda, hai superato e credo che il numero
‫attuale sia di 106 ore".
‫Dice che si è superato il numero di piscine.
‫Beh, se siete dietro un firewall aziendale e tutti i membri della vostra azienda usano Docker e sono
‫tutti dietro un unico indirizzo IP, quel limite può essere raggiunto molto rapidamente.
‫Ma se vi collegate semplicemente, Docker vi dà almeno il doppio dei pull per niente, gratuitamente, con l'account gratuito,
‫se pagate Docker, cosa che non dovete fare con questo corso, ma se volete pagare
‫Docker per un abbonamento Docker, avrete, credo, pool illimitati finché vi collegate con quell'account.
‫Ma passiamo al controllo di questo demone a livello locale.
‫Ora, ciò che accadrà è che qualsiasi sistema si utilizzi, diciamo che si tratta di una configurazione
‫server, oppure che non si voglia eseguire Docker sulla macchina locale.
‫Forse non ti è permesso, forse non puoi.
‫Forse non avete abbastanza risorse.
‫Forse non siete root sul vostro computer locale.
‫Ma avete la possibilità di eseguire Docker su questa macchina remota.
‫Beh, non è necessario sedersi nella shell della macchina remota e digitare tutti i comandi lì e fare tutto
‫il lavoro sul codice sorgente lì o clonare il repo per questo corso.
‫Non si può fare nulla lì.
‫Si può ignorare.
‫È possibile installare Docker in questo punto e parlarci da remoto.
‫Torniamo un attimo indietro.
‫Anni fa, prima che questa funzione di tunnel SSH esistesse intorno al 2018, si doveva entrare nel
‫server con ssh e fare tutto sul server e questo a volte fa schifo perché poi si deve copiare
‫il materiale e non è il massimo.
‫Avete tutto il resto in locale, avete il vostro editor di codice, forse state usando il codice di Visual Studio
‫e avete il vostro codice sorgente per questa classe e avete del materiale qui, giusto?
‫Quindi, l'ideale sarebbe fare tutto questo lavoro sul proprio computer locale.
‫Docker ha risolto questo problema quando è uscito per la prima volta nel 2013.
‫L'unico modo per farlo era attraverso una porta TCP, che non dispone di un'autenticazione integrata e per impostazione
‫predefinita non fornisce la crittografia per la connessione.
‫Quindi è stato generalmente considerato un modo sbagliato per connettersi a Docker.
‫Era qualcosa che si voleva fare solo su reti sicure e soprattutto perché non era autenticato.
‫Tecnicamente potrebbe consentire l'accesso root remoto a un server se ci si connettesse semplicemente da qualsiasi luogo
‫che abbia accesso a quella porta, ma è una cattiva idea.
‫Docker ha quindi aggiunto questa nuova funzione che consente di effettuare una connessione SSH trasparente, a condizione che si possa accedere
‫al server tramite SSH e che si disponga dell'autenticazione o di un certificato, preferibilmente per accedere al server tramite
‫SSH.
‫È possibile farlo e non è necessario fare i salti mortali o esporre porte aggiuntive.
‫Ecco cosa faremo.
‫Quindi questo passo consiste semplicemente nell'ottenere il client a riga di comando di Docker su qualsiasi
‫sistema da cui lavorerete, che può essere Windows, Mac, Linux, Raspberry, PI o altro.
‫Se avete un Mac, procuratevi il client da riga di comando.
‫Sorprendentemente il programma di installazione di brew, che se non conoscete brew, vi state perdendo il
‫miglior programma di installazione per Mac e Brew install Docker, non installa realmente il motore Docker completo o il desktop Docker.
‫Installa il client solo perché sono.
‫Non esiste un motore Docker per Mac.
‫I kernel Mac non supportano i contenitori, quindi l'installazione avviene sorprendentemente solo a riga di comando, che in questo
‫caso è ciò che vogliamo.
‫Se la macchina locale è Linux, si può usare il pacchetto di installazione di Linux dalla documentazione
‫di Docker e poi, una volta impostato quel pacchetto come repository, si può installare il pacchetto Docker CCI
‫da quel repository.
‫Infine, se utilizzate Windows, potreste aver sentito parlare di Chocolaty.
‫È uno dei gestori di pacchetti per Windows.
‫E si può fare un'installazione "cioccolatosa" per installare solo il client a riga di comando.
‫Ma Docker ha anche spiegato tutto questo nella sua documentazione, dove spiega come ottenere
‫le librerie client per il proprio sistema operativo e solo la libreria client.
‫Ok.
‫Il momento della verità.
‫È stato installato il motore Docker su un server Linux.
‫Indipendentemente dall'uso che ne farete, che sia solo per esercitarvi o per la produzione
‫vera e propria, avete Docker sul server e ora avete il client su Southern, la vostra macchina locale.
‫Devo ricordarvi che tutte le cose che vi ho appena detto sull'installazione del client, se avete già
‫installato Docker desktop, non è necessario farlo.
‫Docker desktop viene fornito con il client, ma possiamo dire al client dove puntare per parlare con il motore
‫del server ed è quello che faremo ora.
‫Immaginate quindi di poter entrare in un server con qualcosa come questo comando qui sopra, ssh route a un indirizzo IP o a un
‫nome di host.
‫E diciamo che ho un certificato SSH.
‫Tutto questo presuppone che abbiate compreso le basi di SSH e che sappiate come ottenere un certificato su
‫un server per potervi accedere da remoto.
‫Ci sono tonnellate di tutorial su questo argomento e si presuppone che la conoscenza sia acquisita.
‫Anche in questo caso, si presuppone una conoscenza di base di Linux prima di iniziare a lavorare con Docker.
‫Quindi, supponendo di poterlo fare, se ho questo accesso, tutto ciò che devo fare è creare una variabile d'ambiente.
‫La variabile d'ambiente Docker underscore host indica alla riga di comando di Docker con quale server parlare per impostazione
‫predefinita.
‫Se si installa Docker su qualcosa e si inizia a usare la riga di comando, si assume il socket locale
‫o l'host locale.
‫E quindi non ha nemmeno questa variabile d'ambiente.
‫E per impostazione predefinita, se è vuota, questa variabile d'ambiente, anche se Docker
‫prova a cercarla e non ne trova una, dirà: "Ok, devi presumere che devo parlare con l'host locale"
‫e lo farà senza problemi.
‫Ma se cambiamo questo aspetto aggiungendo un'esportazione docker host equals ssh colon slash slash proprio come si
‫farebbe con un URL https.
‫Quindi se lo sostituiamo con ssh colon's slash username at hostname, posso entrare in docker digitando i normali
‫comandi di docker.
‫Si noti che ho digitato una versione di docker, ma non ho Docker in esecuzione sulla mia macchina locale.
‫Ho solo il client Docker e sta già effettuando l'SSH via Internet verso questa istanza cloud remota che ho appena
‫configurato poco fa e restituisce la versione del server e la versione del client.
‫Se si iniziasse a curiosare, si vedrebbe che sono su Darwin, che è Mac OS per il mio client
‫e se si scorre verso il basso il server mostrerebbe Linux perché è lì che il server esegue
‫il motore e questo è tutto.
‫È tutto ciò che dovete fare.
‫Se si vuole deselezionare la variabile d'ambiente Docker underscore host, la riga di comando di Docker tornerà alla macchina locale,
‫supponendo che il motore sia in esecuzione localmente e che sia possibile passare da una parte
‫all'altra.
‫In effetti, si possono avere diversi server e basta cambiare la variabile d'ambiente in ogni
‫shell che si sta usando per dirle con quale server parlare.
‫Esiste un comando di contesto di Docker che può fare anche questo.
‫Non ne parleremo ancora.
‫Questo è un argomento più avanzato da trattare più avanti nel corso, ma tecnicamente c'è un comando incorporato
‫chiamato Docker context che permette di salvare queste impostazioni e di gestire un elenco di motori diversi con cui si vuole parlare.
‫Ma questo è ottimo per iniziare e l'ultimo passo è clonare localmente il repository di questo corso, quello che è stato
‫menzionato qualche lezione indietro nelle lezioni scritte, dove c'è il repository del corso che si scarica,
‫da mettere sul proprio computer locale insieme al proprio editor di codice e a tutto
‫il resto e al client Docker.
‫L'unica cosa che sarà presente sul server è il motore che abbiamo installato e non avremo
‫bisogno di collegarci costantemente via ssh, perché tutti i comandi Docker che eseguiamo localmente verranno eseguiti
‫sul server remoto.
‫Il server remoto.
‫A proposito, ricordate che ogni volta che digito local host nel browser per testare le cose in Docker, ad esempio
‫un sito web o qualcosa che stiamo eseguendo in Docker, non dovete digitare local host,
‫ma il nome host del server o l'indirizzo IP su cui avete installato Docker.
‫È la macchina che fa girare il motore, che gestisce i vostri container e che dovrete digitare nel
‫vostro browser.
‫Oppure, se si eseguono altri comandi locali come curl o ping, è necessario eseguirli
‫sull'IP del server e questo è tutto.
‫Ora avete un motore in esecuzione su un server Linux da qualche parte nel mondo.
‫Si è in esecuzione sul sistema locale con il codice, il repo e tutto il resto e si è pronti
‫a iniziare.