Molto viene aggiunto al nostro ambiente Docker, che viene trascurato e quindi eliminato con l'ultimo comando. Uno degli oggetti più importanti è una rete di ponti. Questo è ciò su cui ci concentreremo. Più precisamente, bridge networking.
Docker ha molti driver relativi al networking. Due dei più importanti sono il driver di networking a ponte e lo sovrappongono uno. Quest'ultimo viene utilizzato per la modalità Swarm Docker, in cui i contenitori che eseguono diversi nodi possono essere ancora parte della sottorete astratta singola. Bridge Networking, tuttavia, è quello che ci interessa qui.
Per creare una nuova rete Docker chiamata My-Network e ispezionarlo, esegui:
$ Docker Network Crea -d Bridge My -NetworkVedrai, tra le altre cose, una maschera di sottorete e un gateway predefinito.
..Qualsiasi contenitore che si collega a questa rete riceverà un IP nell'intervallo da 172.18.0.Da 2 a 172.18.255.254. Proviamo a creare un paio di contenitori su questa rete:
$ Docker run -dit --name container1 --network my -network ubuntu: ultimoSe ora esegui, ispeziona il mio network, noterai che i singoli contenitori con il loro nome corretto e gli indirizzi IP corrispondenti vengono visualizzati nel campo dei contenitori dell'output JSON.
$ Docker ispezionare la mia reteSe crei un'altra rete My-Network2, avrà una sottorete diversa come 172.19.0.0/16 e i contenitori su di esso saranno isolati da contenitori su altre reti. Quindi, idealmente, vuoi una rete per applicazione, quindi ogni app è sicura e isolata l'una dall'altra.
Come compose crea una rete
Docker Compose comprende l'idea alla base dell'esecuzione di servizi per un'applicazione su una rete. Quando si distribuisce un'app utilizzando il file Docker Compose, anche quando non vi è alcuna menzione di parametri di rete specifici, Docker Compose creerà una nuova rete bridge e distribuirà il contenitore su quella rete.
Se il docker-compone.YML è nella directory my-app, il nome della directory verrà utilizzato per nominare la rete e i contenitori montati sopra di essa. Ad esempio, se creo una directory:
$ mkdir my-appE aggiungi i seguenti contenuti al docker.File YML:
Versione: '3'Nota, come non abbiamo esportato alcun porte. Distribuiamo questa app:
$ Docker -Opse Up -DQuesto crea una nuova rete chiamata my-app_default usando bridge network driver di cui abbiamo discusso prima.Puoi elencare tutte le reti sulla tua configurazione personale utilizzando Docker Network LS e quindi scegliere l'interfaccia di rete che corrisponda al nome della tua directory. Una volta che hai il nome della rete puoi ispezionare Docker per vedere tutti i contenitori che fanno parte di quella rete insieme ai loro individui IP e alla sottorete Mask.
Se creiamo un altro contenitore, usando direttamente la CLI (questo non è consigliato per i casi d'uso del mondo reale) su questa rete, possiamo effettivamente parlare con il nostro servizio My-Ninx.
$ Docker run -dit --name container4 --network my -app_default ubuntu: ultimoQuesto stamperà un file HTML con frammenti familiari come "Welcome to Nginx" visibile in esso. Il server Web Nginx è raggiungibile all'interno della rete senza che dobbiamo pubblicare qualsiasi porte! Ancora più importante, non devi nemmeno raggiungerlo usando il suo IP privato, puoi semplicemente chiamarlo con il suo nome host (questo è il nome del contenitore come mostrato in Docker PS).
Quando si esegue un database e lo collega al frontend, non dovrai affatto pubblicare la porta del database. Invece, puoi raggiungere il DB dal server Web solo chiamando il suo nome host prevedibile. Anche quando Docker Commy viene eseguito altrove dove e l'IP e la sottorete possono ora differire, i contenitori saranno comunque in grado di parlarsi tra loro.
Naturalmente, per pubblicare un porto nel mondo esterno scriviamo qualcosa come i seguenti:
Versione: '3'Ora le persone possono accedere al server Web dalla porta 8080 all'IP del tuo host Docker. Questo può essere, ad esempio, l'IP pubblica del vicepresidente o solo localhost se stai eseguendo Docker sul desktop. Ancora una volta, sottolineo, non devi esporre alcuna porte per il tuo contenitore di database, perché il server Web può parlarne direttamente e quindi questo riduce il rischio di database esposti a Internet.
Quando abbatti l'applicazione, usando:
$ Docker-componeQuesta rete di bridge personalizzata insieme a tutti i contenitori effimeri che sono stati creati e collegati sopra di essa, utilizzando il docker.File YML, verrà eliminato. Lasciando il tuo ambiente Docker in uno stato pulito.
Definire la tua rete
Compose consente di definire la propria definizione di rete. Ciò includerebbe le opzioni per la maschera di sottorete, gli indirizzi IPv6, tra le altre cose. Il modo in cui è fatto è che abbiamo reti di alto livello proprio come i servizi o la versione sono chiavi di alto livello. Questa chiave non ha indensazione. Secondo la chiave delle reti, ora possiamo definire vari attributi della rete, per ora lo terremo semplice e menzioneremo solo che dovrebbe usare il driver di bridge.
Versione: '3'Ora ogni contenitore può connettersi a più reti, quindi nella sezione Servizi menzioniamo il nome di questa rete personalizzata. La chiave delle reti qui si aspetta un elenco di reti.
Versione: '3'Infine, l'ordine in cui la rete è definita e quindi utilizzata all'interno di una definizione del servizio è rilevante. Quindi l'intero file YML sembrerà qualcosa del genere:
Versione: '3'Mentre scrivi le tue definizioni di rete, potresti voler fare riferimento alla documentazione ufficiale. Per una rapida occhiata alla chiave delle reti di alto livello, visitare questo link e per la chiave delle reti del livello di servizio ecco il riferimento.
Puoi anche provare a specificare le sottoreti nella definizione delle reti di alto livello in modo che i servizi possano avere una gamma predeterminata di indirizzi IP.