Introduzione
Docker è un ottimo strumento per automatizzare la distribuzione di applicazioni Linux all'interno di contenitori software, ma per sfruttare appieno il suo potenziale ogni componente di un'applicazione dovrebbe essere eseguito nel proprio contenitore individuale. Per applicazioni complesse con molti componenti, l'orchestrazione di tutti i contenitori per l'avvio, la comunicazione e l'arresto insieme può diventare rapidamente ingombrante.
La community di Docker ha trovato una soluzione popolare chiamata Fig , che ti ha permesso di utilizzare un singolo file YAML per orchestrare tutti i contenitori e le configurazioni Docker. Questo è diventato così popolare che il team Docker ha deciso di creare Docker Compose in base alla fonte Fig, che ora è obsoleta. Docker Compose consente agli utenti di orchestrare più facilmente i processi dei contenitori Docker, inclusi l'avvio, l'arresto e l'impostazione dei collegamenti e dei volumi all'interno del contenitore.
In questo tutorial, ti mostreremo come installare l'ultima versione di Docker Compose per aiutarti a gestire le applicazioni multi-container su Ubuntu 18.04 LTS.
Prerequisiti
Per seguire questo articolo, avrai bisogno di un server Ubuntu 18.04 con il seguente:
- Un utente non root con privilegi sudo.
- Docker installato: Come installare e utilizzare Docker su Ubuntu 18.04.
Nota: anche se i prerequisiti forniscono istruzioni per l'installazione di Docker su Ubuntu 18.04, i comandi docker
in questo articolo dovrebbero funzionare su altri sistemi operativi fintanto che Docker è installato.
Se il tuo intento è installare Docker Compose su un server in remoto continua a leggere, altrimenti salta il primo paragrafo "Connessione al Server" e leggi il successivo.
Connessione al Server
Per accedere al server, è necessario conoscere l'indirizzo IP. Avrai anche bisogno dell'username e della password per l'autenticazione. Per connettersi al server come utente root digitare il seguente comando:
ssh root@IP_DEL_SERVER
Successivamente sarà necessario inserire la password dell'utente root.
Se non utilizzate l'utente root potete connettervi con un'altro nome utente utilizzando lo stesso comando, quindi modificare root con il vostro nome_utente:
ssh nome_utente@IP_DEL_SERVER
Successivamente vi verrà chiesto di inserire la password del vostro utente.
La porta standard per connettersi tramite ssh è la 22, se il vostro server utilizza una porta diversa, sarà necessario specificarla utilizzando il parametro -p, quindi digitare il seguente comando:
ssh nome_utente@IP_DEL_SERVER -p PORTA
Installare Docker Compose
Sebbene possiamo installare Docker Compose dal repository ufficiale di Ubuntu, si tratta di diverse versioni secondarie dietro l'ultima versione, quindi installeremo Docker Compose dal repository GitHub di Docker. Il comando seguente è leggermente diverso da quello che troverai nella pagina Release. Utilizzando il flag -o
per specificare prima il file di output anziché reindirizzare l'output, questa sintassi evita di incorrere in un errore di autorizzazione negato causato durante l'utilizzo sudo
.
Controlleremo la versione corrente e, se necessario, la aggiorneremo nel seguente comando:
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
Successivamente imposteremo le autorizzazioni:
sudo chmod +x /usr/local/bin/docker-compose
Quindi verificheremo che l'installazione è andata a buon fine controllando la versione:
docker-compose --version
Questo stamperà la versione che abbiamo installato:
Outputdocker-compose version 1.21.2, build a133471
Ora che Docker Compose è installato, siamo pronti per eseguire un esempio di "Hello World".
Eseguire un contenitore con Docker Compose
Il registro pubblico Docker, Docker Hub, include un'immagine Hello World per dimostrazione e test. Illustra la configurazione minima richiesta per eseguire un contenitore tramite Docker Compose: un file YAML che chiama una singola immagine.
Innanzitutto, creeremo una directory per il file YAML e ci sposteremo in esso:
mkdir hello-world
cd hello-world
Quindi, creeremo il file YAML:
nano docker-compose.yml
Inserisci i seguenti contenuti nel file, salva il file ed esci dall'editor di testo:
nano docker-compose.yml
my-test:
image: hello-world
La prima riga nel file YAML viene utilizzata come parte del nome del contenitore. La seconda riga specifica quale immagine utilizzare per creare il contenitore. Quando si esegue il comando docker-compose up
cercherà un'immagine locale dal nome che abbiamo specificato, hello-world
. Quindi salviamo e usciamo dal file.
Possiamo visualizzare manualmente le immagini sul nostro sistema con il comando docker images
:
docker images
Quando non ci sono immagini locali, vengono visualizzate solo le intestazioni di colonna:
REPOSITORY TAG IMAGE ID CREATED SIZE
Ora, mentre siamo ancora nella directory ~/hello-world
, eseguiremo il seguente comando:
docker-compose up
La prima volta che eseguiamo il comando, se non esiste alcuna immagine locale denominata hello-world
, Docker Compose la estrarrà dal repository pubblico Docker Hub:
Pulling my-test (hello-world:latest)...
latest: Pulling from library/hello-world
c04b14da8d14: Downloading [==================================================>] c04b14da8d14: Extracting [==================================================>] c04b14da8d14: Extracting [==================================================>] c04b14da8d14: Pull complete
Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9
Status: Downloaded newer image for hello-world:latest
. . .
Dopo aver estratto l'immagine, docker-compose
crea un contenitore, si collega ed esegue il programma Hello, che a sua volta conferma che l'installazione funzioni:
. . .
Creating helloworld_my-test_1...
Attaching to helloworld_my-test_1
my-test_1 |
my-test_1 | Hello from Docker.
my-test_1 | This message shows that your installation appears to be working correctly.
my-test_1 |
. . .
Quindi stampa una spiegazione di ciò che ha fatto:
Output of docker-compose up1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.
I contenitori Docker funzionano solo finché il comando è attivo, quindi una volta terminata l'esecuzione di hello
, il contenitore si arresta. Di conseguenza, quando esaminiamo i processi attivi, verranno visualizzate le intestazioni di colonna, ma il contenitore hello-world
non verrà elencato perché non è in esecuzione.
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Possiamo vedere le informazioni sul contenitore, di cui avremo bisogno nel prossimo passaggio, usando il flag -a
che mostra tutti i contenitori, non solo quelli attivi:
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
06069fd5ca23 hello-world "/hello" 22 minutes ago Exited (0) 22 minutes ago drunk_payne
In questo modo vengono visualizzate le informazioni necessarie per rimuovere il contenitore al termine.
Rimuovere l'immagine (opzionale)
Per evitare l'utilizzo di spazio su disco non necessario, rimuoveremo l'immagine locale. Per fare ciò, dovremo eliminare tutti i contenitori che fanno riferimento all'immagine usando il comando docker rm
, seguito dall'ID CONTAINER o dal NOME. Di seguito, stiamo usando l'ID CONTAINER dal comando docker ps -a
che abbiamo appena eseguito. Assicurati di sostituire l'ID del tuo contenitore:
docker rm 06069fd5ca23
Una volta rimossi tutti i contenitori che fanno riferimento all'immagine, possiamo rimuovere l'immagine:
docker rmi hello-world
Conclusione
Abbiamo installato Docker Compose su Ubuntu 18.04 LTS, testato la nostra installazione eseguendo un esempio Hello World e rimosso l'immagine di prova e il contenitore.