Come utilizzare i profili di servizio per semplificare gli stack in Docker Compose

0
163

Docker Compose ora supporta i profili per l'uso selettivo dei servizi. I servizi nel tuo docker-compose.yml possono essere collegati a uno o più profili denominati. Passare un nome di profilo a docker-compose avvierà solo i servizi in quel profilo, permettendoti di creare varianti del tuo stack per ambienti e configurazioni specifici.

Compose si è precedentemente concentrato sulla definizione di un singolo stack che è ;sa distribuzione canonica della tua applicazione. I profili aggiungono più spazio per personalizzare le parti dello stack da utilizzare, rendendo i set complessi di servizi più modulari e configurabili.

Perché usare i profili?

L'utilizzo dei profili è del tutto facoltativo. I tuoi file Docker Compose esistenti continueranno a funzionare e non è necessario adottare subito i profili.

I profili di servizio risolvono diverse frustrazioni comuni con i flussi di sviluppo e test di Docker Compose. Potresti avere servizi che desideri utilizzare solo in fase di sviluppo, come un contenitore di debug o un servizio di registrazione. Quando sei in produzione, non hai bisogno di quei servizi e vuoi evitare di avviarli.

In precedenza, raggiungere questo obiettivo richiedeva la suddivisione delle definizioni del servizio su più file. Avresti quindi bisogno di un ingombrante comando up per avviare tutto in fase di sviluppo:

# versione docker-compose.yml: "3" servizi: app: immagine: my-app:latest   # versione docker-compose-dev.yml: "3" services: debug: image: my-app-debug:latest # avvia in produzione docker-compose up -d # avvia in sviluppo docker-compose -f docker-compose.yml -f docker-compose-dev.yml up -d

I profili consentono di combinare entrambe le definizioni di servizio in un unico file. È possibile utilizzare un flag o una variabile di ambiente per selezionare un profilo specifico, senza digitare manualmente i percorsi dei file. Ciò crea un'esperienza più comoda e meno problematica da documentare, scrivere ed eseguire.

Definizione dei profili

I profili vengono creati impostando il profile sui servizi nel tuo docker-compose.yml. I profili sono specificati come un elenco. Ad ogni servizio possono essere assegnati uno o più profili.

versione: "3" services: app: image: my-app:latest debug: image: my-app-debug:latest profili: – dev

Le istanze del profilo vengono create implicitamente dai nomi dati ai campi dei tuoi profili. I servizi che condividono un profilo vengono aggiunti automaticamente.

Per avviare i servizi inclusi in un profilo, aggiungi il flag –profile a docker-compose up:

docker-compose up –profile dev < p>Questo comando avvierebbe sia l'app che i servizi di debug dal file Compose precedente. Se eseguivi docker-compose, omettendo il flag –profile, verrebbe avviato solo il servizio app.

Puoi avviare più profili contemporaneamente ripetendo il flag –profile. Compose supporta anche la variabile d'ambiente COMPOSE_PROFILES come alternativa a –profile. Questo accetta un elenco di nomi di profili separati da virgole.

Annuncio

I servizi senza campo profili verranno sempre avviati, indipendentemente da qualsiasi profilo richiesto. Una volta che a un servizio è stato assegnato un profilo, verrà avviato solo se tale profilo è stato richiesto. Per i servizi con più profili, la richiesta di uno di essi consentirà l'avvio del servizio.

Avvio del profilo implicito

I profili verranno sempre ignorati se avvii manualmente un servizio utilizzando docker-compose run. In questo caso, Compose avvierà anche tutti i servizi da cui dipende il servizio richiesto, se condividono un profilo o non hanno un profilo assegnato.

Qui, l'esecuzione di docker-compose run debug avvierebbe il servizio debug-utils, anche se il profilo dev non è stato selezionato in modo esplicito:

versione: "3" servizi: app: immagine: mia-app:latest debug-utils: immagine: mia-app-debug-utils:latest profili: – dev debug: immagine: mia-app-debug:latest dipende_da: debug-utils profili: – dev

Gli inizi impliciti si applicano solo ai dipendenti diretti del servizio specificato. Se anche debug-utils avesse una depend_on e quel servizio non condividesse il profilo dev, non si avvierebbe correttamente.

Affinché la risoluzione delle dipendenze funzioni correttamente con l'esecuzione di docker-compose, tutti i servizi nell'albero devono condividere un profilo del servizio più in alto o essere abilitati in modo permanente. Se nessuna di queste condizioni è valida, dovrai aggiungere il flag –profile per attivare esplicitamente eventuali profili aggiuntivi richiesti.

Riepilogo

I profili di servizio sono una comoda funzionalità di Compose che semplifica la gestione di diverse combinazioni di servizi. Utilizzando i profili, puoi evitare di suddividere i servizi in più file Compose. Aggiungere –profile di solito sembra più naturale che unire più file YAML insieme.

Pubblicità

I profili ti consentono di creare sotto-stack all'interno della tua applicazione Compose principale. La loro introduzione come parte delle specifiche di Compose è un riconoscimento che gli stack in fase di sviluppo spesso incorporano servizi aggiuntivi oltre a quelli utilizzati in produzione.

Più in generale, i profili rendono Compose più versatile facilitando la personalizzazione dello stack. Sebbene concepiti come un approccio alla gestione dell'ambiente, i profili potrebbero anche aiutare la comunità a creare diverse varianti di immagini popolari. Pensa a un docker-compose.yml di WordPress con profili mysql e mariadb: ora puoi facilmente passare da un servizio di database preconfigurato a un altro per selezionare il motore che corrisponde alle tue preferenze.

Docker Compose 1.28 ha introdotto i profili all'inizio di quest'anno . Se disponi di una versione recente del binario Compose o di Docker Desktop per Windows e Mac, puoi aggiungere profili ai file Compose per avviare i servizi in modo selettivo.