‫I requisiti per questa lezione sono che hai visto le lezioni di rete precedenti e hai compreso i
‫concetti chiave delle reti Docker e i comandi che ne derivano.
‫Tutto ok.
‫E in questa lezione imparerai e giocherai con DNS e in che modo influisce sui contenitori in reti
‫personalizzate e reti predefinite.
‫Analizzeremo rapidamente
‫quanto sia importante disporre di un buon DNS perché non puoi fare affidamento sugli indirizzi IP all'interno dei
‫container poiché le cose sono così dinamiche. Esamineremo le differenze tra reti predefinite e personalizzate per quanto
‫riguarda il modo in cui gestiscono il DNS.
‫E poi verificheremo l'opzione --link per l'esecuzione del contenitore per abilitare il DNS sulla rete bridge
‫predefinita.
‫Quindi c'è un'altra cosa che è cruciale per tutti questi container e reti virtuali e
‫per comunicare tra loro; e questo è un nome. Perché nel mondo dei container che si avviano e
‫scompaiono costantemente, si spostano, si espandono e si restringono, e tutta la meraviglia di questi micro
‫servizi che vediamo spuntare ovunque, è che non possiamo più fare affidamento sugli indirizzi IP come il modo di
‫parlare da una cosa all'altra. Perché non possiamo supporre di minuto in minuto che
‫gli indirizzi IP saranno uguali.
‫Il contenitore potrebbe andare via o potrebbe non funzionare e quindi Docker lo porta da qualche altra parte.
‫È semplicemente troppo dinamico e troppo complicato per affrontarlo.
‫Quindi si scopre che esiste una soluzione integrata per questo, che è la denominazione DNS. Docker utilizza i nomi dei contenitori come
‫l'equivalente di un nome host per i contenitori che parlano tra loro.
‫Ora, se ricordi che avevamo solo due container in esecuzione ...
‫se ricordi che Nginx era su una nuova rete, chiamata my_app_net.
‫Destra.
‫E ha l'unico contenitore sopra. Poiché ho creato questa nuova rete,
‫questa non è la rete
‫bridge predefinita, in realtà ottiene una nuova funzionalità speciale, che è la risoluzione DNS automatica per tutti i contenitori su quella
‫rete virtuale da tutti gli altri contenitori su quella rete virtuale usando i loro nomi di contenitore.
‫Se dovessi creare un secondo container su quella rete virtuale, saranno in grado di trovarsi, indipendentemente
‫dall'indirizzo IP, con i loro nomi di container.
‫Quindi proviamo questo: nome di esecuzione contenitore docker ... e lo chiameremo il mio nginx ... e specificheremo la
‫rete come rete dell'app
‫dall'immagine nginx.
‫Ora, se guardiamo quella rete, dovremmo vedere 2 container; e, se eseguo un exec
‫contenitore docker, dal nuovo contenitore che ho appena creato - oops abbiamo anche
‫bisogno dell'IT - E facciamo un ping al nuovo nginx,
‫noterai che la risoluzione DNS funziona. Questo rende super facile avere un contenitore e devi
‫impostare un file di configurazione in cui parlare, forse diciamo che il server
‫PHP parlerà con il backend MySQL. Ctrl-c fuori da quello, e vedrai che funziona anche nell'altro modo.
‫Se salto nel nuovo contenitore nginx e provo a eseguire il ping del mio ngnix, vedrai che la risoluzione funziona in entrambi
‫i modi.
‫E questo è ciò che risolve un enorme problema quando fai girare i container perché non puoi prevedere
‫quanto dureranno e dove potrebbero essere tra un minuto in un progetto di produzione in
‫cui hai un gruppo di Server Docker Swarm.
‫Quindi potrebbe non cambiare molto sul tuo computer locale, ma se interrompi 3 o 4 contenitori,
‫quindi avvii gli stessi contenitori e li avvii in un ordine
‫diverso, potrebbero non avere lo stesso indirizzo IP. Ma i loro nomi host o nomi dei contenitori saranno
‫sempre gli stessi.
‫E così puoi contare su di loro.
‫Ora dovrei notare, se facciamo un elenco di reti docker, la rete bridge predefinita presenta uno svantaggio qui.
‫Non ha il server DNS incorporato per impostazione predefinita.
‫Quindi puoi usare il --link.
‫Pertanto, quando crei un contenitore, noterai che esiste un'opzione di collegamento e puoi effettivamente specificare collegamenti manuali
‫tra contenitori in quella rete bridge predefinita.
‫In realtà, è molto più semplice creare una nuova rete per le tue app in modo da non
‫doverlo fare ogni volta.
‫E in una sezione futura, quando parliamo di Docker Compose, vedrai come tutto ciò diventa
‫ancora più facile perché Compose creerà automaticamente nuove reti virtuali ogni volta che si avvia un'app con essa.
‫Quindi comunicare tra i tuoi contenitori diventa ancora più semplice.
‫Come riassunto rapido, abbiamo trattato in questa lezione di come i contenitori non possono davvero o non dovrebbero fare affidamento sugli
‫indirizzi IP per comunicare tra loro perché non possono essere fatti affidamento.
‫E quel DNS è davvero lo standard qui per come facciamo l'intercomunicazione tra container sullo
‫stesso host e tra host diversi.
‫E quindi ti consiglio di creare sempre reti personalizzate poiché è semplicemente più semplice
‫che fare un collegamento sempre.
‫E poi ti ho dato un teaser su Docker Compose e su come renderà tutto più
‫semplice, specialmente il networking.