Docker composi bridge networking

Docker composi bridge networking
Docker Compose è un modo semplice per distribuire applicazioni multi-container. Automatizza gran parte della manutenzione della prenotazione, della rete e della gestione delle risorse delle applicazioni in un unico documento ordinato.File YML. È possibile ottenere l'app eseguendo Docker-Opse e abbassarla usando Docker-Opse Down.

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 Bridge Network

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 -Network
$ Docker ispezionare la mia rete

Vedrai, tra le altre cose, una maschera di sottorete e un gateway predefinito.

..
"Config": [

"Sotthet": "172.18.0.0/16 ",
"Gateway": "172.18.0.1 "

..

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: ultimo
$ Docker run -dit --name container2 --network my -network ubuntu: ultimo

Se 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 rete
..
"Contenitori":
"8ce5cd67e6aed180b5d0b6b0fcd597175d6154c9208daa9de304aec94757e99b":
"Nome": "Container1",
"EndpointId": "93d020d22172d6c98a0b88e78a7a01f6d1a3d44b983e7454fba7c1f1be5fae9d",
"MacAddress": "02: 42: AC: 12: 00: 02",
"Ipv4Address": "172.18.0.2/16 ",
"Ipv6Address": ""
,
"AF1434DF6F86D2DF96ACA1D7348DD6C815A4989EC07FB0F3CFEA95D4A38B4F74":
"Nome": "Container2",
"EndpointId": "3a5f57639c71685a10584fd392c20abc5ae693684860bef486404d26b3332395a",
"MacAddress": "02: 42: AC: 12: 00: 03",
"Ipv4Address": "172.18.0.3/16 ",
"Ipv6Address": ""

..

Se 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-app
$ cd my-app
$ vim docker-compose.YML

E aggiungi i seguenti contenuti al docker.File YML:

Versione: '3'
Servizi:
mio-nginx:
Immagine: nginx: ultimo

Nota, come non abbiamo esportato alcun porte. Distribuiamo questa app:

$ Docker -Opse Up -D

Questo 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: ultimo
$ Docker Exec -It Container4 Bash
root@a32acdf15a97:/# curl http: // my-app_my-nginx_1

Questo 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'
Servizi:
mio-nginx:
Immagine: nginx: ultimo
porta:
- "8080: 80"

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-compone

Questa 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'
reti:
My-Network:
Driver: ponte

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'
Servizi:
mio-nginx:
Immagine: nginx: ultimo
reti:
- My-Network
- qualche altro rete # Questa è un'altra rete che potresti aver creato.

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'
Servizi:
mio-nginx:
Immagine: nginx: ultimo
reti:
- My-Network
reti:
My-Network:
Driver: ponte

Ulteriori informazioni

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.