Docker Compose è uno strumento che puoi utilizzare per gestire centralmente le distribuzioni di molti contenitori Docker diversi. È uno strumento importante per qualsiasi applicazione che necessita di più microservizi, poiché consente a ciascun servizio di trovarsi facilmente in un contenitore gestito separatamente.
Cosa fa Docker Compose?
I contenitori Docker vengono utilizzati per l'esecuzione di applicazioni in un ambiente isolato. Al giorno d'oggi è abbastanza comune vedere implementazioni di applicazioni eseguite in Docker per i numerosi vantaggi che offre. Tuttavia, spesso non è così semplice come eseguire un singolo container. Di solito potresti avere molti container che si uniscono per agire come un servizio coeso composto da molte parti mobili.
Gestire tutto ciò al momento della distribuzione è complicato, quindi per ripulirlo Docker fornisce Docker Compose, uno strumento di configurazione utilizzato per eseguire più contenitori contemporaneamente. Puoi definire tutta la configurazione in un file YAML e quindi avviare tutti i contenitori con un comando.
Invece di avere tutti i tuoi servizi in un unico grande contenitore, Docker Compose ti consente di dividerli in contenitori gestibili individualmente. Questo è meglio sia per la creazione che per la distribuzione, poiché puoi gestirli tutti in basi di codice separate e non è necessario avviare manualmente ogni singolo contenitore.
L'utilizzo di Docker Compose è un processo in tre fasi:
- Costruisci le immagini dei componenti utilizzando i relativi Dockerfile o estraili da un registro.
- Definisci tutti i servizi dei componenti in un
docker-compose.yml
file. - Eseguili tutti insieme usando
docker-compose
CLI.
Docker Compose non è un altro tipo di Dockerfile. Dovrai comunque creare e pubblicare i tuoi contenitori Docker utilizzando un Dockerfile. Ma, invece di eseguirli direttamente, puoi utilizzare Docker Compose per gestire la configurazione di una distribuzione multi-container.
Come usi Docker Compose?
La configurazione per un file di composizione docker viene eseguita in docker-compose.yml
. Non è necessario inserirlo nella radice del progetto come un Dockerfile. In effetti, può andare ovunque, poiché non dipende da nessun altro codice. Tuttavia, se stai creando le immagini in locale, dovrà andare in una cartella del progetto con il codice in fase di creazione.
Un file di configurazione di Compose avrà un aspetto simile al seguente. Questa configurazione esegue un'istanza di WordPress utilizzando wordpress
contenitore dall'hub Docker. Tuttavia, questo dipende da un database MySQL, anch'esso creato da Compose.
version: '3' services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: rootpasswordchangeme MYSQL_DATABASE: wordpress MYSQL_USER: usernamechangeme MYSQL_PASSWORD: passwordchangeme wordpress: depends_on: - db image: wordpress:latest ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: usernamechangeme WORDPRESS_DB_PASSWORD: passwordchangeme volumes: db_data:
Diamo un'occhiata al formato di questo file. Innanzitutto, un numero di versione, poiché la sintassi può cambiare a seconda della versione in uso.
Quindi un elenco di servizi. Il primo si chiama "db" e utilizza mysql:5.7
container, impostato per riavviare sempre, e con variabili di ambiente per configurare il database con un utente e una password. Per mantenere i dati durante i riavvii, questa immagine è configurata con un volume Docker montato nella directory dei dati di MySQL.
L'altro servizio è "wordpress", che dipende dal servizio di database, assicurando che Docker si assicuri che il database sia avviato prima dell'esecuzione. Espone la porta 80 come porta 8000 e imposta alcune variabili di ambiente in modo che possa connettersi a MySQL. Nota che l'host per il database è impostato su db:3306
, che indica al contenitore di WordPress di connettersi al servizio "db".
Infine, i volumi sono definiti per l'archiviazione persistente. Facoltativamente, puoi anche definire una rete personalizzata per i contenitori. Ci sono molte opzioni estese che puoi configurare, quindi se stai cercando di fare qualcosa di specifico, dovresti controllare la documentazione per Docker Compose.
Una volta configurato, avviare questo servizio è facile. Esegui semplicemente docker-compose up
, che estrarrà tutti i contenitori richiesti e avvierà i tuoi servizi.
docker-compose up -d
E dovresti vedere i servizi in esecuzione sul sistema con docker ps
. In questo caso, vedrai WordPress attivo e funzionante correttamente.
RELAZIONATO: Come installare Docker e Docker Compose su Linux
Costruire con Docker Compose
Docker Compose può essere utilizzato anche all'interno di un progetto Dockerfile e può essere configurato per creare ed eseguire un'immagine in locale anziché eseguire il pull da Docker Hub.
Per farlo, devi semplicemente aggiungere un build
sezione sul servizio. Puoi impostare diverse directory di contesto, nonché diversi Dockerfile per immagini diverse.
version: "3.8" services: webapp: build: context: ./dir dockerfile: Dockerfile-alternate image: imagename:tag
In questo caso, l'image:
viene impostata anche la variabile, ma qui viene utilizzata per contrassegnare l'immagine creata da Docker Compose.