Docker Compose: cos’è, a cosa serve e perché si usa

4 minuti di lettura
Premessa importante: questa scheda formativa non ha l’ambizione (né lo scopo) di approfondire in dettaglio tuti gli aspetti tecnico/funzionali legati a questo potente tool di gestione. Lo scopo, semmai, è quello di fornire un’istantanea su quelle che sono le possibilità, le facilitazioni e i vantaggi della sua adozione.

Docker Compose - Logo

Non è un mistero che Docker, oggetto ideale per l’esecuzioni di applicazioni sotto forma di “container, sia ogni giorno più adottato. Noi stessi, su inDomus, siamo pubblicando guide che consentano di sfruttare le più disparate applicazioni eseguite in questa pratica ed efficace nuovo modalità. Se prima le applicazioni “si installavano” su un sistema operativo, ora si “istanziano” come container (isolato nella sua esecuzione) presso Docker.

Mentre il paradigma tradizionale prevede per l’appunto di installare applicazioni specifiche su sistema operativi e ambienti di esecuzioni specifici (con tutto ciò che ne consegue, dalla presenza di determinate dipendenze software alla gestione ordinaria di un’applicazione in esecuzione su sistema operativo e molto altro), il paradigma “a container” fa sì che, indipendentemente dal sistema operativo che ospita Docker, l’applicazione in questione “giri” in un ambiente isolato, autonomo, dotato di tutto il necessario, all’interno dell’ambito operativo di Docker stesso e avulso dalla realtà operativa soggiacente. Non è un caso che le applicazioni disponibili in questa modalità siano ogni giorno di più.

container-what-is-container

Di pari passo aumenta sempre di più l’adozione di Docker Composer, un tool di gestione piuttosto versatile che rende l’adozione di Docker ancora più agevole e facilmente gestibile l’adozione di applicazioni di questo tipo.

COS’è

Come chi si è già avventurato nell’esecuzione di applicazioni dockerizzate saprà, l’istanziamento di ognuna di essa prevede tipicamente l’esecuzione di un comando personalizzato, il quale comanda a Docker di acquisire l’immagine dell’applicazione (se non ce l’ha, provvede a scaricarla direttamente dal catalogo cloud) e di avviarla, passandogli tutti i parametri necessari (indicazioni sulla modalità di esecuzione, sulle impostazioni di rete, sui percorsi locali da esporre all’interno dell’applicazione e molto altro).

Per esempio, l’avvio del container Home Assistant Core su Docker installato su Raspberry indicativamente è il seguente:

sudo docker run --init -d --name="home-assistant" -e "TZ=Europe/Rome" -v /home/homeassistant/.homeassistant:/config --net=host --restart unless-stopped homeassistant/raspberrypi4-homeassistant:stable

Niente di trascendentale, ma certamente scomodo, anche perché è facile commettere errori nonché dimenticare, tempo dopo, “come” si era avviato il container dell’applicazione (in caso di doverlo cancellare e ricreare, magari per un aggiornamento).

Docker Compose è un tool ufficiale installabile su Linux (incluso Raspberry Pi OS), Windows, macOS e che consente, in modo piuttosto pratico, di gestire i propri container salvandone la configurazione di istanziamento in un unico file di configurazione in formato YAML, per esempio:

version: '3'
services:
   db:
     build: ./mysql
     image: poc/mysql-for-wordpress
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress
   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
       WORDPRESS_DB_NAME: wordpress
volumes:
    db_data: {}

Questo file di configurazione, per esempio, istruisce Docker Compose sull’instanziamento di due container, db (basato sull’immagine del motore MySql per Docker) e wordpress (basato sull’immagine del CRM WordPress per Docker) e altro.

A COSA SERVE

Docker Compose serve, per l’appunto, a gestire in modo immediato i propri container. I suoi comandi infatti consentono di:

  • avviare, fermare, e riavviare le applicazioni istanziate;
  • vedere lo stato dei servizi in esecuzione;
  • consultare lo stream dei log dei servizi in esecuzione;
  • eseguire comandi all’interno dei container

e altro.

In pratica, senza l’adozione di Docker Compose ogni qual volta è necessario mettere in esecuzione un container, è necessario conoscerne il comando ed eseguirlo.

Usando Docker Compose affiancato a Docker, ogni qual volta si ha necessità di aggiungere un container al proprio “stack” è sufficiente aggiungere una porzione di codice di configurazione ad esso relativa al proprio file docker-compose.yaml, il quale consentirà a Docker Compose di “conoscere” le caratteristiche del nuovo container (oltre a quelli già presenti) e quindi consentirne una rapida e pratica gestione.

Per esempio, nel caso di cui sopra relativo all’esecuzione di Home Assistant Core, invece di eseguirlo “a mano”, con Docker Compose è sufficiente aggiungere alla sua configurazione una porzione di codice YAML come segue, equivalente nei parametri a quelli indicati nella riga di comando di cui sopra:

home-assistant:
  container_name: home-assistant
  image: homeassistant/raspberrypi4-homeassistant:stable
  volumes:
  - "/home/homeassistant/.homeassistant:/config"
  environment:
  - "TZ=Europe/Rome"
  network_mode: host
  restart: unless-stopped 

dopodiché ci si può dimenticare della configurazione: in futuro (per riavvii e ricostruzioni del container) ci penserà Docker Compose.

PERCHé SI USA

Per praticità.
Immaginiamo banalmente di dover amministrare un certo numero di container: anche solo pensando alla nostra amata domotica personale, volendo istanziare tutte le componenti necessarie in un sistema di media complessità, potremmo arrivare a definirne anche una decina.

Va da sé che per ognuno sarebbe necessario segnarsi da parte il corretto comando di esecuzione (in base ai tanti parametri diversi di ognuno) per eseguirlo nuovamente ogni qual volta sia necessario cancellare e ricreare il container (per esempio, in caso di aggiornamento dell’immagine per sopravvenuto aggiornamento dell’applicazione).

Con Docker Compose, invece, una volta dichiarate nel suo file di configurazione le configurazioni dei vari container, di esse ci si può dimenticare: basterà infatti utilizzare i suoi comandi rapidi. Per esempio, per cancellare, aggiornare e riavviare l’istanza di esempio di Home Assistant definita su Docker Compose come sopra illustrato, basterà eseguire:

docker-compose pull home-assistant
docker-compose up --build -d home-assistant 
docker image prune -f

Docker Compose provvederà quindi al download dell’ultima immagine e a istanziarla con i parametri ad esso noti dichiarati, precedentemente, sul suo file di configurazione.

Tutte le informazioni di dettaglio su Docker Compose sono presenti sul sito di riferimento.

COME SI USA?

Alle modalità di installazione e utilizzo abbiamo dedicato un’altra scheda formativa:

Gestire applicazioni Docker tramite Docker Compose


Altre pagine con attinenza al tema Docker:

   
Telegram News Channel