5

Sto eseguendo Docker Compose (v2) e dispongo di un servizio nodo (sito Web) e API basata su python distribuite con nginx seduto di fronte a loro.Aggiunge automaticamente il contenitore docker alla configurazione upstream del bilanciamento del carico nginx

Una cosa che mi piacerebbe fare è essere in grado di scalare i servizi aggiungendo più contenitori. Se conosco in anticipo quanti container avrò, posso eseguire l'hardcode della configurazione upstream di nginx con i riferimenti agli IP dei container resi disponibili dalla finestra mobile. Tuttavia, il problema è che voglio che la configurazione di nginx upstream sia dinamica, ad es. se aggiungo un altro contenitore Docker, semplicemente aggiunge il percorso del contenitore alla lista upstream degli IP nel blocco upstream.

La mia idea era di creare uno script che aggiungesse automaticamente i server upstream usando le variabili env quando i container cambiano, ma non sono sicuro da dove iniziare e non riesco a trovare un buon esempio.

risposta

2

Ci sono un paio di modi per raggiungere questo obiettivo. Quello a cui ti riferisci è solitamente chiamato discovery del servizio ed è disponibile in molte forme. Descriverò due di loro che ho usato prima.

Il primo e il più semplice (che funziona bene per server singoli o solo per rilevare i contenitori localmente su un server) è un proxy locale che utilizza il socket Docker o l'API. è uno dei più popolari e dovrebbe funzionare bene per la prototipazione di servizi scalabili in Compose.

Un altro modo (che è più multi-host friendly ma più complicato) sarebbe registrare servizi in un registro (come etcd o console) e quindi scrivere dinamicamente la configurazione. Per fare ciò, è possibile utilizzare un sistema di registrazione (come https://github.com/gliderlabs/registrator) per registrare i contenitori e le relative porte. Quindi il tuo proxy o applicazione possono utilizzare un file di configurazione scritto usando un sistema di template come https://github.com/kelseyhightower/confd.

+0

questo sembra essere esattamente quello che stavo cercando, grazie! – ExoticChimp