‫Entriamo nel Dockerfile, che in realtà è una ricetta per creare la tua immagine.
‫Finora, tutte le immagini Docker che stavamo utilizzando sono state create da Dockerfiles in cui è possibile
‫esaminarle su Docker Hub.
‫Se hai clonato il mio repository dalle risorse elencate nella prima sezione dovresti vedere una directory del file di
‫esempio 1, e lì dovremmo avere un solo file. Un Dockerfile.
‫Stiamo andando riga per riga e parliamo di queste diverse stanze. Un Dockerfile sembra sembrare uno script di
‫shell, ma non lo è.
‫Non è un file batch, non è uno script di shell. nome predefinito è Dockerfile con la maiuscola D.
‫È un linguaggio di file totalmente diverso che è unico per Docker e il
‫Ma, dalla riga di comando, ogni volta che devi gestire un Dockerfile usando il
‫comando docker, puoi effettivamente utilizzare il trattino f. Che in realtà è comune tra molti strumenti con Docker,
‫puoi usare dash f per specificare un file diverso da quello predefinito.
‫Quindi, il primo è il comando da. Il comando da è in ogni file Docker. È richiesto di essere lì.
‫Normalmente è una distribuzione minima.
‫In questo caso è Debian.
‫Ma molte volte al giorno d'oggi sarà alpino.
‫E davvero, la ragione per cui li useresti è di risparmiare tempo e dolore. Perché queste distribuzioni minime sono in realtà molto
‫più piccole dei CD che usereste per installare una macchina virtuale da loro.
‫Ad esempio, Ubuntu non ha nemmeno CURL in esso, mentre ovviamente, se hai installato un'installazione
‫completa di Ubuntu su una VM, avrebbe cURL e molti altri comandi già installati.
‫Poiché tutte queste distribuzioni sono immagini ufficiali, significa che saranno sempre aggiornate con le
‫ultime patch di sicurezza e che puoi fidarti e fidarti di loro.
‫E uno dei principali vantaggi del loro utilizzo in contenitori consiste nell'utilizzare i loro sistemi di distribuzione dei
‫pacchetti per installare qualsiasi software necessario nel pacchetto.
‫In questo caso, stiamo effettivamente utilizzando la versione di Jessie, che è ciò che è dopo i due punti.
‫E, come ricordi dalla nostra conversazione Docker Hub, ci sono molte diverse opzioni che puoi specificare
‫qui per il repository Debian.
‫Successivamente, abbiamo la stanza ENV e ENV è per le variabili di ambiente.
‫È un modo per impostare le variabili di ambiente, che in realtà sono molto importanti nei
‫contenitori perché sono il modo principale in cui impostiamo le chiavi e i valori per la creazione di container e l'esecuzione di container.
‫In questo caso, in realtà sta impostando la versione di Nginx che vorrebbe che installassimo e questa variabile d'ambiente
‫verrà impostata in modo tale che tutte le linee successive possano usarla.
‫Ora, come promemoria delle lezioni precedenti, ognuna di queste stanze è uno strato reale nella nostra
‫immagine Docker.
‫Quindi l'ordine di loro è davvero importante, perché funziona al massimo.
‫Come vedrai da questo comando di corsa relativamente lunga qui per il prossimo. Vedrai che sembra un
‫lungo comando.
‫Quello che sta facendo è in realtà solo eseguire comandi di shell all'interno di questo contenitore mentre lo sta
‫costruendo.
‫comandi di esecuzione o devi eseguire alcuni decompressi o alcune modifiche al file all'interno del contenitore stesso.
‫Di solito, quando esegui l'installazione del software con un repository di pacchetti, visualizzi i
‫I comandi di esecuzione possono anche eseguire script di shell che hai copiato in precedenza nel file o qualsiasi
‫comando a cui puoi accedere
‫dal contenitore in quel momento nel file.
‫Dato che veniamo da Debian, questo comando di esecuzione ha accesso a tutti i comandi e binari che
‫sarebbero stati installati con quella versione.
‫E in questo per Nginx, questo elenco di comandi è più o meno l'aggiunta di una chiave al repository
‫in cui è possibile ottenere il pacchetto per installare l'ultimo Nginx dal repository ufficiale di Nginx.
‫Ci sono alcune cose che sono davvero fondamentali per creare dei buoni Dockerfiles e ne
‫parleremo più in una sezione successiva dove parliamo delle migliori pratiche.
‫Ma due cose da notare.
‫Il motivo per cui stiamo aggiungendo tutti questi comandi con il doppio e commerciale qui, in modo
‫che siano incatenati uno dopo l'altro, è perché, se si ricorda, ogni stanza ha il proprio livello.
‫Ciò che fa è garantire che tutti questi comandi siano adatti a un singolo livello.
‫Ci fa risparmiare un po 'di tempo.
‫Ci fa risparmiare spazio Ed è così comune che probabilmente lo vedrai in ogni Dockerfile su Docker Hub.
‫Ok, sulla linea 27 abbiamo un altro comando di marcia.
‫Si tratta di puntare i nostri file di registro allo stdout
‫e allo stderr.
‫Vedremo in seguito, il modo corretto di fare il logging all'interno di un container è di non accedere a un file di log. E non c'è syslogd o qualsiasi
‫altro servizio syslog all'interno di
‫un container. Docker gestisce in realtà tutti i nostri log per noi. Tutto quello che dobbiamo fare all'interno
‫del contenitore è assicurarsi che tutto ciò che vogliamo venga catturato nei log sia sputo su stdout
‫e stderr e docker gestiranno il resto.
‫Esistono in realtà dei driver di registrazione che possiamo usare nel Docker Engine stesso per controllare tutti i log
‫di tutti i contenitori sul nostro host.
‫E quindi è proprio quello che vuoi fare con loro.
‫Aggiunge maggiore complessità alla tua app se la tua app sta effettuando la registrazione stessa.
‫E poi, se hai a che fare con i file in ogni contenitore, ora hai un
‫problema su come puoi estrarre quei file, ricercarli e renderli accessibili. Qui, stiamo prendendo i log Nginx predefiniti e in
‫realtà li stiamo collegando allo stdout.
‫In modo che Docker possa catturarli.
‫Abbiamo anche un comando di esposizione.
‫Per impostazione predefinita, nessuna porta TCP o UDP
‫è aperta in un contenitore. Non espone nulla dal contenitore a una rete virtuale a meno che
‫non lo elenchiamo qui.
‫E, naturalmente, poiché questo è un server Web e proxy, esporrà 80 e 443.
‫Ora, questo comando expose non significa che queste porte verranno aperte automaticamente sul nostro host.
‫Questo è ciò che il comando P del dash è ogni volta che usiamo la finestra mobile.
‫Infine, abbiamo la CMD qui. o ogni volta che si riavvia un container arrestato.
‫Il CMD è un parametro obbligatorio che è il comando finale che verrà eseguito ogni volta che si avvia un nuovo contenitore dall'immagine
‫C'è una documentazione davvero eccellente su tutte queste stanze, oltre a molto altro ancora, che approfondiremo in seguito, sul sito Web della
‫documentazione di Docker all'indirizzo docs. finestra mobile. com, che
‫puoi trovare nelle risorse di questa lezione.
‫Ok, quindi queste sono le basi, giusto? Queste cinque diverse stanze sono abbastanza normali in ogni singolo Dockerfile.
‫Alcuni di essi sono obbligatori
‫Alcuni di essi, come la corsa e ENV e l'esposizione, sono facoltativi, ma sono piuttosto tipici della maggior parte dei
‫contenitori per i quali creerai le immagini.