Introduzione
Lo sviluppo di applicazioni utilizzando Docker può diventare difficile quando si destreggiano più servizi e container. Ulteriori informazioni su Docker Compose, lo strumento che ti aiuterà a eseguire ambienti applicativi multi-container.
In questo tutorial imparerai tutto su Docker Compose, i vantaggi dell'utilizzo di questo strumento, i casi d'uso e le funzionalità.
Cos'è Docker Compose?
Un'applicazione può essere costituita da più contenitori che eseguono servizi diversi. Può essere noioso avviare e gestire i container manualmente, quindi Docker ha creato uno strumento utile che aiuta ad accelerare il processo:Docker Compose.
Docker Compose è un software utilizzato per definire ed eseguire applicazioni Docker multi-container. Può gestire più container contemporaneamente nell'ambiente di produzione, staging, sviluppo, test e CI. Pertanto, utilizza Docker Compose per gestire l'intero ciclo di vita dello sviluppo del software (SDLC).
Docker Compose funziona applicando le regole definite in un docker-compose.yaml file. Il file YAML configura i servizi dell'applicazione e include regole che specificano come si desidera che vengano eseguiti. Con il file in atto, puoi avviare, interrompere o ricostruire tutti i servizi utilizzando un unico comando. Inoltre, puoi controllare lo stato di un servizio, visualizzare gli output dei log ed eseguire comandi una tantum.
L'installazione di Docker Compose è semplice. Per istruzioni dettagliate, controlla:
Come installare Docker Compose su Ubuntu 18.04Come installare Docker Compose su CentOS 7Come installare Docker Compose su Ubuntu 20.04Docker Componi casi d'uso
I casi d'uso comuni di Docker Compose includono:
- Ambienti di test automatizzati . Compose supporta il test automatizzato, che è una parte essenziale di CI/CD in quanto può creare e distruggere facilmente l'ambiente di test richiesto. Gli sviluppatori possono definire e configurare l'ambiente necessario per l'esecuzione di test end-to-end automatizzati utilizzando il file Docker Compose appropriato.
- Distribuzioni su host singolo . In Docker Compose, i container sono progettati per essere eseguiti su un singolo host poiché sono stati tradizionalmente focalizzati sullo sviluppo e sui flussi di lavoro di test.
- Ambienti di sviluppo . Compose è un modo semplice e veloce per avviare progetti in quanto può creare rapidamente nuovi ambienti di sviluppo isolati. Il software documenta e configura tutte le dipendenze del servizio dell'applicazione (inclusi database, cache, API del servizio Web, ecc.). Ti permette di creare e avviare uno o più contenitori per ogni dipendenza utilizzando un unico comando.
Vantaggi di Docker Compose
Ecco alcuni dei principali vantaggi dell'utilizzo di Docker Compose:
- Configurazione rapida e semplice. Grazie agli script YAML e alle variabili di ambiente, puoi facilmente configurare o modificare i servizi applicativi.
- Protetto comunicazione interna. Compose crea una rete per tutti i servizi da condividere. Ciò aggiunge un ulteriore livello di sicurezza per l'app poiché non è possibile accedere ai servizi dall'esterno.
- Portabilità e supporto CI/CD. Poiché tutti i servizi sono definiti all'interno del file docker-compose, gli sviluppatori possono facilmente accedere e condividere l'intera configurazione. Estraendo il file YAML e il codice sorgente, possono avviare l'ambiente in pochi minuti. Ciò contribuisce a creare e abilitare una pipeline CI/CD efficiente.
- Uso efficiente delle risorse. Docker Compose consente di ospitare più ambienti isolati su un host. L'esecuzione di tutto su un singolo componente hardware ti consente di risparmiare molte risorse. Le sue caratteristiche che gli consentono di memorizzare nella cache una configurazione e di riutilizzare i contenitori esistenti contribuiscono anche all'efficienza delle risorse.
Funzioni di composizione Docker
Esistono diverse importanti funzionalità di Docker Compose che offrono i vantaggi sopra menzionati.
Ospitare più ambienti isolati su un singolo host
Compose mantiene gli ambienti isolati l'uno dall'altro su un singolo host utilizzando i nomi dei progetti.
Per impostazione predefinita, il nome del progetto è il nome di base della directory del progetto, mentre la directory del progetto è la directory di base del file docker-compose. Puoi modificare i valori predefiniti:
- Imposta il nome del progetto utilizzando il
-p
opzione della riga di comando o ilCOMPOSE_PROJECT_NAME
variabile di ambiente. - Imposta la directory del progetto utilizzando il
--project-directory
variabile di ambiente.
Puoi utilizzare questa funzionalità su un host di sviluppo per eseguire copie stabili di ciascun ramo di funzionalità del tuo progetto creando più copie dell'ambiente con nomi diversi.
Se stai lavorando su un server CI o su un host condiviso, assicurati che le build non interferiscano tra loro. Per fare ciò, imposta i nomi dei progetti su numeri di build univoci.
Supporto delle variabili d'ambiente
Puoi personalizzare i contenitori per ambienti o utenti diversi aggiungendo variabili di ambiente nel file di composizione mobile. Ciò ti offre maggiore flessibilità durante la configurazione dei contenitori con Compose, poiché i valori delle variabili non sono codificati nella configurazione.
I valori delle variabili possono essere impostati nell'ambiente shell (da cui esegui docker-compose
) o in un file .env (memorizzato nella directory del progetto). Per impostazione predefinita, Docker Compose applica i valori specificati nel file .env. Tuttavia, i valori impostati nell'ambiente della shell hanno la precedenza su quelli del file .env.
Puoi utilizzare questa funzione per qualsiasi cosa, dalla fornitura sicura di password alla specifica di una versione del software.
Conservazione dei dati sul volume
Un'altra grande caratteristica di Docker Compose è che salva i dati utilizzati dai servizi. Pertanto, non devi preoccuparti di perdere i dati creati nei contenitori. Se sono presenti contenitori di esecuzioni precedenti, Compose li troverà e copierà i relativi volumi nella nuova esecuzione.
Riutilizzo dei contenitori esistenti
Compose ricrea solo i contenitori che sono stati modificati dall'ultima esecuzione. Se non ci sono modifiche, riutilizza il contenitore esistente.
Questa funzione si basa sulla capacità del software di memorizzare nella cache le configurazioni dei container, consentendoti di configurare i tuoi servizi più velocemente.
Comandi di base per la composizione di Docker
La sintassi di base per eseguire i comandi Docker Compose è:
docker-compose [command]
Di seguito troverai alcuni dei comandi Docker Compose più basilari e a cosa servono.
Comando | Descrizione |
---|---|
docker-compose --help | mostra aiuto, istruzioni per l'uso e argomenti per il comando docker-compose |
docker-compose build | cerca tutti i servizi che contengono il build: istruzione nel file docker-compose.yml ed eseguire una docker build per ciascuno |
docker-compose run | esegui un comando una tantum su un servizio |
docker-compose up | crea, (ri)crea, avvia e collega a contenitori per un servizio |
docker-compose -f [command] | specificare la posizione di un file di configurazione di composizione mobile aggiungendo il -f bandiera |
docker-compose start | avvia i contenitori esistenti per un servizio |
docker-compose stop | interrompi l'esecuzione dei contenitori (senza rimuoverli) |
docker-compose pause | metti in pausa i contenitori in esecuzione di un servizio |
docker-compose unpause | riattiva i contenitori di un servizio in pausa |
docker-compose down | Arresta i contenitori (e rimuovi contenitori, reti, volumi e immagini) |
docker-compose ps | elenca i contenitori all'interno del file di configurazione di composizione mobile |
docker-compose images | elenca le immagini utilizzate dai contenitori creati |
docker-compose ls | elenco dei progetti Compose in esecuzione |
Come utilizzare Docker Compose?
Ci sono tre passaggi per usare Compose:
1. Il primo passaggio consiste nella creazione di un Dockerfile per definire l'ambiente dell'applicazione. Il file crea immagini Docker, che verranno utilizzate come basi per i contenitori.
2. Successivamente, è necessario definire i servizi in un file Compose. Crea un nuovo file nella directory del progetto con il nome docker-compose.yml e definisci i tuoi servizi usando la sintassi YAML. Un esempio di tale file includerebbe il seguente contenuto:
version: "3.9"
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
3. Infine, esegui e gestisci l'app utilizzando Docker Compose CLI. Puoi eseguire un singolo docker-compose up
comando per avviare l'intera applicazione in un'istanza.