Introduzione
La containerizzazione ha preso molto slancio nel settore tecnologico del software negli ultimi anni. Questo può essere attribuito a Docker che è una piattaforma di container che semplifica la gestione dei processi all'interno dei container.
I container sono ambienti standardizzati leggeri, virtualizzati, portatili e definiti dal software che consentono al software di essere eseguito in isolamento rispetto ad altri software in esecuzione sulla macchina host fisica. Questa caratteristica di portabilità consente agli sviluppatori di modularizzare le proprie applicazioni in servizi isolati. Inoltre, possono essere distribuiti in modo indipendente, lasciando spazio alla scalabilità.
Sebbene suddividere un'applicazione in più servizi sia decisamente fantastico, comporta l'onere di gestire diversi container. È necessario assicurarsi che comunichino, si avviino e si spengano contemporaneamente. Grazie a uno strumento chiamato Docker Compose, questo diventa un compito facile. Docker Compose consente agli sviluppatori di eseguire applicazioni Docker multi-container utilizzando regole definite in un file YAML. Il file YAML contiene le definizioni per i servizi dell'applicazione e come questi possono condividere volumi di dati e reti. Una volta definiti i servizi, è possibile avviarli tutti con un singolo comando. In questo tutorial, vi mostreremo come installare, configurare e iniziare a utilizzare Docker Compose su Ubuntu 20.04.
Prerequisiti
-
Poiché si tratta di un tutorial pratico, dovresti avere un'installazione di Ubuntu 20.04 come ambiente operativo iniziale. Dovresti anche avere un utente non root con privilegi sudo. Ecco un tutorial passo-passo per aiutarti a configurare il tuo server Ubuntu. Segui questo tutorial per configurare il tuo file sudoers.
-
È inoltre necessario installare Docker. Fai riferimento a questo tutorial su come installare e utilizzare Docker su Ubuntu 18.04.
Passo 1: Installazione di Docker Compose
Scaricheremo l'ultima versione stabile di Docker Compose dal suo repository GitHub ufficiale. Puoi trovare l'ultima versione dalla pagina delle release, al momento della stesura di questo tutorial, l'ultima versione è 1.28.5.
Per prima cosa, accedi al tuo server Ubuntu con l'utente sudo non root e inserisci il seguente comando. Questo scarica l'ultima release (1.28.5) e salva l'eseguibile nella directory /usr/local/bin/docker-compose. Questo lo rende accessibile a livello globale come docker-compose:
|
1 |
sudo curl -L "https://github.com/docker/compose/releases/download/1.28.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
Una volta scaricato, inserisci il seguente comando per impostare i permessi appropriati affinché il comando docker-compose sia eseguibile:
|
1 |
sudo chmod +x /usr/local/bin/docker-compose |
Ora, verifica che l'installazione sia andata a buon fine e che il comando possa essere richiamato eseguendo il seguente comando:
|
1 |
docker-compose –version |
Dovresti ottenere un output come questo:

Questo conferma che Docker Compose è stato installato con successo sul tuo sistema.
Passo 2: Creazione del file docker-compose.yml
Per aiutarti a capire come lavorare con docker-compose.yml, configureremo un ambiente server web utilizzando l'immagine ufficiale immagine Nginx da Docker Hub. Una volta distribuito, dovremmo essere in grado di servire una pagina HTML di base dal container.
Creeremo la nostra directory di lavoro nella cartella home da cui lavoreremo. Inserisci il seguente comando per creare la directory:
|
1 |
mkdir ~/compose-example |
Successivamente, spostati nella directory:
|
1 |
cd ~/compose-example |
Una volta all'interno della directory, crea una cartella dell'applicazione che sarà la radice del documento per l'ambiente Nginx. Possiamo chiamare questa cartella app:
|
1 |
mkdir app |
- Creazione di una pagina HTML
Usiamo l'editor di testo nano per creare il file index.html all'interno della cartella app:
|
1 |
nano app/index.html |
Successivamente, aggiungi il seguente codice HTML al file:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<!DOCTYPE html> <html lang="it"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content=""> <meta name="generator" content="Hugo 0.80.0"> <title>Esempio Docker Compose</title> <!-- CSS principale di Bootstrap --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous"> </head> <body> <main> <section class="py-5 text-center container"> <div class="row py-lg-5"> <div class="col-lg-6 col-md-8 mx-auto"> <h1 class="fw-light">Fantastico esempio di Docker Compose con CloudSigma</h1> <p class="h4"> Questa è una pagina HTML statica di base. </p> <p class="lead text-muted"> Questa pagina viene servita da un container Docker Nginx creato utilizzando <b>docker-compose </b> </p> </div> </div> </section> </main> </body> </html> |
Per salvare il file, premi CTRL +O, INVIO. Quindi, chiudi con CTRL +X. Successivamente, creeremo il file docker-compose.yml all'interno della radice del nostro progetto.
- Ospitare la pagina HTML utilizzando docker-compose
Successivamente, inserisci il seguente comando per aprire il file con l'editor nano:
|
1 |
nano docker-compose.yml |
Dopodiché, aggiungi il seguente frammento di codice all'interno del file:
|
1 2 3 4 5 6 7 8 |
version: '3.7' services: webserver: image: nginx:alpine ports: - "8000:80" volumes: - ./app:/usr/share/nginx/html |
Il docker-compose.yml il file inizia con il numero di versione che indica a Docker Compose quale versione di configurazione stiamo utilizzando. Segui questo link per saperne di più su gestione delle versioni di Docker Compose.
Dopo il numero di versione, abbiamo il blocco dei servizi che contiene i servizi che compongono l'ambiente. In questo tutorial, abbiamo specificato solo un singolo servizio chiamato webserver. Il servizio webserver utilizzerà l'immagine nginx:alpine. Abbiamo anche definito il reindirizzamento delle porte 8000:80. Questo significa che tutte le richieste dalla porta 8000 sulla macchina host saranno reindirizzate al container del webserver sulla porta 80, dove Nginx è in esecuzione.
La direttiva volumes consente di creare un volume condiviso tra la macchina host e il container che possiamo utilizzare per rendere persistenti i dati. Nel nostro yml frammento di codice, condividiamo la cartella locale app con il container. All'interno del container, verrà posizionata nel percorso /usr/share/nginx/html. Pertanto, sovrascrive la document root predefinita di Nginx. Ora puoi salvare e chiudere il file.
Fino a questo punto, hai creato la tua pagina web HTML di esempio e il file docker-compose.yml con le istruzioni per creare un ambiente server web containerizzato. Vediamo come possiamo avviare questa configurazione nel passaggio successivo.
Passo 3: Esecuzione del comando Docker Compose
In questo passaggio, eseguiremo il comando per avviare il nostro ambiente containerizzato. Di seguito è riportato il singolo comando che avvierà il processo di download delle immagini Docker, creerà un container per il servizio webserver e avvierà l'ambiente containerizzato in background:
|
1 |
docker-compose up -d |
Docker è progettato per essere veloce ed efficiente, quindi, quando esegui il comando precedente, controlla prima il tuo sistema locale alla ricerca dell'immagine definita. Se manca, la scaricherà dal repository Docker Hub. Dovrebbe mostrare un output simile a questo:

Al termine dell'esecuzione del comando, l'ambiente del container verrà avviato in background. Puoi verificare che sia in esecuzione utilizzando il comando:
|
1 |
docker-compose ps |
Dovresti ottenere un output simile:

Se navighi all'indirizzo IP o al nome di dominio del tuo server e aggiungi la porta 8000, ovvero server_domain_or_IP:8000 dovresti essere in grado di vedere la pagina HTML di esempio che abbiamo creato:

Se ricordi, abbiamo configurato un volume condiviso tra il container e il sistema host. Questo mantiene i file nel container sincronizzati con i file sul sistema host. Pertanto, se apporti una modifica al file index.html, questo si sincronizza automaticamente con il container e si riflette quando ricarichi la pagina nel browser. Puoi provare con l'editor nano. Impariamo altri comandi nel passaggio successivo.
Passo 4: Comandi Docker Compose aggiuntivi per la gestione degli ambienti dei container
Ora che hai distribuito con successo una pagina web utilizzando il singolo comando docker-compose-up, vediamo alcuni comandi aggiuntivi che possono essere utili nella gestione degli ambienti containerizzati.
Inizieremo con il comando logs. I log possono essere cruciali quando si risolvono i problemi di malfunzionamento dell'applicazione. Per prima cosa, esegui il comando seguente per visualizzare i log prodotti dal container Nginx:
|
1 |
docker-compose logs |
Ecco un esempio di output dei log:

Puoi mettere in pausa l'esecuzione dell'ambiente senza modificare lo stato dei container utilizzando il comando:
|
1 |
docker-compose pause |
![]()
Successivamente, per riprendere l'esecuzione utilizza il comando:
|
1 |
docker-compose unpause |
![]()
Potresti voler arrestare i container senza distruggere i loro dati. Per fare ciò, utilizza il comando seguente:
|
1 |
docker-compose stop |
![]()
Per distruggere i container, le reti e i volumi associati all'ambiente containerizzato, utilizza il comando:
|
1 |
docker-compose down |
![]()
Tieni presente che il comando precedente non rimuove le immagini di base utilizzate da Docker Compose per avviare l'ambiente. Questo garantisce build più rapide quando avvii il tuo ambiente, poiché controlla la macchina locale alla ricerca di immagini corrispondenti. Se desideri rimuovere completamente l'immagine di base, devi specificarlo nel comando. Per il nostro esempio, possiamo rimuovere l'nginx:alpine immagine usando il comando:
|
1 |
docker image rm nginx:alpine |

Infine, puoi trovare altri comandi nella documentazione ufficiale di Docker Compose Command-line reference.
Conclusione
In questo tutorial, hai installato Docker Compose su Ubuntu 20.04, hai creato un ambiente containerizzato basato su un'immagine del server web Nginx e hai imparato a gestire i vari servizi utilizzando i comandi di Docker Compose.
Se desideri imparare a distribuire un'applicazione dinamica reale che dipende da diversi container, leggi il nostro tutorial su Distribuire Laravel, Nginx e MySQL con Docker Compose. Puoi anche trovare un elenco completo dei comandi docker-compose nella documentazione ufficiale di Docker Compose Docs.
Buon computing!
Commenti
Ancora nessun commento. Scrivi il primo.