Docker Compose ora supporta i profili per l'uso selettivo dei servizi. Servizi nel tuo docker-compose.yml
può essere collegato a uno o più profili con nome. Passaggio di un nome di profilo a docker-compose up
avvierà solo i servizi in quel profilo, consentendoti di creare varianti del tuo stack per ambienti e configurazioni specifici.
Compose si è precedentemente concentrato sulla definizione di un singolo stack che è una distribuzione canonica della tua applicazione. I profili aggiungono più spazio per la personalizzazione delle parti dello stack da utilizzare, rendendo più modulari e configurabili insiemi complessi di servizi.
Perché usare i profili?
L'uso dei profili è del tutto facoltativo. I tuoi file Docker Compose esistenti continueranno a funzionare e non è necessario adottare profili immediatamente.
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, per raggiungere questo obiettivo era necessario suddividere le definizioni del servizio su più file. Avresti quindi bisogno di un ingombrante up
comando per avviare tutto in fase di sviluppo:
# docker-compose.yml version: "3" services: app: image: my-app:latest # docker-compose-dev.yml version: "3" services: debug: image: my-app-debug:latest
# start in production docker-compose up -d # start in development 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. Questo crea un'esperienza più conveniente che è meno seccante per documentare, scrivere ed eseguire.
Definizione dei profili
I profili vengono creati impostando i profiles
campo sui servizi nel tuo docker-compose.yml
. I profili sono specificati come un elenco. Ad ogni servizio possono essere assegnati uno o più profili.
version: "3" services: app: image: my-app:latest debug: image: my-app-debug:latest profiles: - dev
Le istanze del profilo vengono create implicitamente dai nomi dati ai tuoi profiles
campi. I servizi che condividono un profilo vengono automaticamente aggiunti.
Per avviare i servizi inclusi in un profilo, aggiungi il --profile
contrassegnare per docker-compose up
:
docker-compose up --profile dev
Questo comando avvierà sia l'app
e debug
servizi dal file Compose sopra. Se hai eseguito docker-compose up
, omettendo il --profile
flag, solo l'app
il servizio partirebbe.
Puoi avviare più profili contemporaneamente ripetendo il --profile
bandiera. Compose supporta anche il COMPOSE_PROFILES
variabile di ambiente in alternativa a --profile
. Questo accetta un elenco di nomi di profili separati da virgole.
Servizi senza profiles
il campo verrà sempre avviato, indipendentemente dal profilo richiesto. Una volta che a un servizio è stato assegnato un profilo, verrà avviato solo se quel profilo è stato richiesto. Per i servizi con più profili, la richiesta di uno qualsiasi di essi consentirà l'avvio del servizio.
Inizio 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, eseguendo docker-compose run debug
avvierebbe debug-utils
servizio, anche se dev
il profilo non è stato selezionato in modo esplicito:
version: "3" services: app: image: my-app:latest debug-utils: image: my-app-debug-utils:latest profiles: - dev debug: image: my-app-debug:latest depends_on: debug-utils profiles: - dev
Gli inizi impliciti si applicano solo ai dipendenti diretti del servizio specificato. Se debug-utils
aveva anche un depends_on
e quel servizio non condivideva dev
profilo, non si avvierebbe correttamente.
Affinché la risoluzione delle dipendenze funzioni correttamente con docker-compose run
, 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 --profile
flag per attivare esplicitamente eventuali profili aggiuntivi richiesti.
Riepilogo
I profili di servizio sono una comoda funzione di composizione che semplifica la gestione di diverse combinazioni di servizi. Utilizzando i profili, puoi evitare di dividere i servizi in più file Compose. Aggiunta di --profile
di solito sembra più naturale che unire più file YAML insieme.
I profili ti consentono di creare sotto-stack all'interno della tua applicazione Compose principale. La loro introduzione come parte delle specifiche Compose è un riconoscimento del fatto che gli stack in fase di sviluppo spesso incorporano servizi aggiuntivi oltre a quelli utilizzati nella produzione.
Più in generale, i profili rendono Compose più versatile facilitando la personalizzazione dello stack. Sebbene siano 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 mysql
e mariadb
profili:ora puoi passare facilmente tra i servizi di database preconfigurati per selezionare il motore che corrisponde alle tue preferenze.
Docker Compose 1.28 ha introdotto i profili all'inizio di quest'anno. Se hai una versione recente del binario Compose o Docker Desktop per Windows e Mac, puoi aggiungere profiles
ai tuoi file Compose per iniziare ad abilitare i servizi in modo selettivo.