Composizione Docker è uno strumento per definire ed eseguire applicazioni docker multi-container in Linux. Con Compose, utilizziamo un file YAML per configurare i servizi della nostra applicazione. E poi creiamo e avviamo tutti i servizi dalla configurazione con un solo comando. Ecco una semplice illustrazione grafica che mostra come funziona Docker Compose.

Come funziona Docker Compose - Un'illustrazione grafica
Docker Compose è fondamentalmente un processo in tre fasi:
- In primo luogo, dobbiamo definire l'ambiente dell'applicazione con un Dockerfile in modo che possa essere riutilizzato di nuovo.
- In secondo luogo, definiamo i servizi che compongono l'app in docker-compose.yml in modo che possano essere eseguiti insieme in un ambiente isolato.
- Infine, eseguiamo docker-compose up command e Compose avvieranno ed eseguiranno l'intera applicazione.
Guida introduttiva a Docker Compose in Linux
Docker Compose può essere installato in due modi. Puoi trovare le istruzioni di installazione nella sezione "Installa Docker Compose" nei seguenti link.
- Come installare Docker in Ubuntu
- Come installare Docker in CentOS
Dopo l'installazione, controlla la versione di Docker Compose utilizzando i comandi:
# docker-compose -version
Oppure,
# docker-compose -v
Oppure,
# docker-compose --version

Controlla la versione di composizione della finestra mobile
Per ottenere aiuto, esegui semplicemente:
# docker-compose -help
Questo comando elencherà i comandi che Docker Compose può eseguire.

aiuto per la composizione della finestra mobile
Ora prendiamo come esempio un semplice file di composizione della finestra mobile. Ecco il contenuto del mio file di composizione.

Esempio di file di composizione della finestra mobile
Sopra il file di composizione Docker è un file minimo indispensabile per comprendere il contenuto di base all'interno del file di composizione.
Possiamo verificare la validità del file usando il comando:
# docker-compose config

Verifica la validità del file di composizione della finestra mobile
Se fornisci una versione errata all'interno del file di composizione della finestra mobile, ti verrà visualizzato un messaggio di errore.

Messaggio di errore di composizione del file Docker
Ora eseguiamo il file di composizione usando il comando:
# docker-compose up -d
Inizierà tutti i servizi con un unico comando.

Esegui composizione mobile
Per elencare i contenitori in esecuzione creati da compose file, esegui:
# docker-compose ps

Elenca i contenitori Docker in esecuzione
Possiamo chiudere l'applicazione in qualsiasi momento con il seguente comando:
# docker-compose down

Arresta i contenitori Docker
Possiamo anche assegnare una porta diversa a nginx, ad esempio 8181.
Per fare ciò, basta definire la porta nel file di composizione come mostrato nell'immagine seguente.

Definisci port nginx container
Ora nginx è esposto alla porta 8181. Avviamo il container e controlliamo se Nginx è in esecuzione sulla porta 8181.

Avvia il contenitore nginx
Apri il browser e verifica se è in esecuzione sulla porta 8181.

Testa il contenitore nginx nel browser web
Se vuoi ridimensionare il servizio, puoi farlo usando il comando:
# docker-compose up -d --scale database=3

Ridimensiona i servizi utilizzando la composizione mobile
Per visualizzare i servizi in esecuzione, esegui:
# docker-compose top

Visualizza i servizi in esecuzione utilizzando la composizione mobile
Per fermare, iniziare. riavviare l'intero servizio in una volta, i comandi sarebbero:
# docker-compose stop
# docker-compose start
# docker-compose restart
Possiamo visualizzare i log dei servizi usando il comando:
# docker-compose logs

Mostra i registri dei servizi
Rete in composizione mobile
Docker Compose configura un'unica rete per la tua app per impostazione predefinita. Ogni container si unisce alla rete predefinita e i container potranno comunicare su quella rete predefinita.
Puoi comunque creare una nuova rete usando compose se non vuoi la rete predefinita.
Ai fini di questa guida, utilizzo i seguenti tre file:
- File Docker
- docker-compose.yml
- server.py
Ecco il contenuto di Dockerfile:

contenuto del file docker
Contenuto di docker-compose.yml:

Docker compone il contenuto del file
Contenuto di server.py:

contenuto del file dell'applicazione
Ora costruisci l'immagine usando il comando:
# docker-compose build
Una volta completata la compilazione, vedrai il seguente output:

Crea immagine Docker
Come puoi vedere, l'immagine è stata creata correttamente. Puoi verificarlo usando il comando:
# docker images

Elenca le immagini della finestra mobile
Come puoi vedere nell'output sopra, un'immagine Docker denominata image1 viene creato.
Ora esegui il file di composizione:
# docker-compose up -d

Esegui il file di composizione della finestra mobile
Verifica se la nuova rete è stata creata o meno con il comando:
# docker network ls

Controlla la rete docking
Dallo screenshot sopra, possiamo confermare una nuova rete denominata dc_network_my-network è stato creato.
Verifichiamo se il container è in esecuzione o meno utilizzando il comando "docker ps":
# docker ps

output del comando docker ps
Sì, il container è in esecuzione!
Infine, esegui il file del codice dell'applicazione (server.py) usando il comando curl:
# curl localhost:15001
Oppure,
# curl 10.26.35.244:15001

output dell'applicazione
Stiamo ricevendo un output:Hello World dal nodo 1! che è scritto nel file server.py. Significa che funziona!
Lettura consigliata:
- Spiegazione dei concetti di rete Docker
- Spiegare i volumi Docker con esempi
- Come aggiornare automaticamente i contenitori Docker in esecuzione
- ctop – Uno strumento di monitoraggio della riga di comando per i container Linux
- Portainer:il modo più semplice per gestire Docker
- PiCluster:una semplice applicazione di gestione Docker basata sul Web
- Dockly:gestisci i container Docker dal terminale
Informazioni sull'autore:
Dhruv Tiwari è un ingegnere DevOps che ama automatizzare le cose, lavorare con Linux su larga scala e sognare il giorno in cui i sistemi saranno abbastanza intelligenti da non dover mai accedere a una macchina Linux. Viaggio di CI/CD dal codice sorgente alla distribuzione del codice alla produzione.