Cos’è Docker?

Docker è una piattaforma open-source che permette di eseguire applicazioni all’interno di ambienti isolati chiamati container.

Un container include tutto il necessario per eseguire un’applicazione: software, librerie e configurazioni, permettendo di installare, aggiornare e rimuovere servizi senza modificare direttamente il sistema operativo principale.

Questo approccio è particolarmente utile sui server dove vengono eseguiti diversi servizi contemporaneamente, mantenendo ogni applicazione isolata dalle altre.


Concetti fondamentali

Prima di iniziare è importante conoscere alcuni concetti fondamentali.

Immagine

Un’immagine Docker è un modello pronto all’uso contenente tutto il necessario per creare un container.

Ad esempio, un’immagine può contenere un server web o un database.

Container

Un container è un’istanza in esecuzione di un’immagine. La stessa immagine può generare piĂš container indipendenti.

Volume

I container sono progettati per essere temporanei, se vengono eliminati, anche i dati al loro interno vengono persi. I volumi Docker permettono di salvare dati persistenti all’esterno del container, come ad esempio:

  • database;
  • configurazioni;
  • file degli utenti;
  • dati persistenti dell’applicazione;

Network

Docker permette ai container di comunicare tra loro attraverso reti virtuali.

Questo permette, ad esempio, di creare ambienti isolati dove diversi servizi possono comunicare tra loro senza dover essere necessariamente esposti direttamente sulla rete pubblica.


Docker Compose

Quando un’applicazione è composta da piĂš servizi, gestire manualmente ogni singolo container può diventare complicato.

Docker Compose permette di definire un’intera applicazione attraverso un semplice file YAML, solitamente chiamato:

1
compose.yml

All’interno del file vengono definiti:

  • quali immagini utilizzare;
  • quali porte aprire;
  • quali volumi montare;
  • quali variabili configurare;
  • come collegare i vari container tra loro.

Ad esempio, un servizio web potrebbe essere composto da:

Container Web
      |
      |
Container Database

e Docker Compose permette di avviare l’intera applicazione con un solo comando:

1
docker compose up -d

Installazione di Docker su Linux

Vediamo quindi come installare Docker sulle principali distribuzioni Linux.

Debian e derivate

Prima di procedere è consigliato rimuovere eventuali versioni precedenti o pacchetti Docker installati tramite i repository della distribuzione.

Esegui sul terminale:

1
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt remove $pkg; done

Installa i pacchetti necessari:

1
2
3
sudo apt update

sudo apt install ca-certificates curl gnupg

Crea la directory per le chiavi GPG:

1
sudo install -m 0755 -d /etc/apt/keyrings

Scarica la chiave ufficiale Docker:

1
2
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release && echo "$ID")/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

Imposta i permessi corretti:

1
sudo chmod a+r /etc/apt/keyrings/docker.gpg

Aggiungi il repository ufficiale Docker:

1
2
3
4
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/$(. /etc/os-release && echo "$ID") \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Aggiorna nuovamente i repository:

1
sudo apt update

Installa Docker Engine e Docker Compose confermando l’installazione quando richiesto:

1
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Red Hat e derivate

Questa procedura è valida per Fedora, Red Hat Enterprise Linux (RHEL), AlmaLinux, Rocky Linux e le relative distribuzioni derivate.

Prima di procedere rimuovi eventuali vecchie installazioni:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
sudo dnf remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine \
podman \
runc

Installa i pacchetti necessari:

1
sudo dnf -y install dnf-plugins-core

Aggiungi il repository ufficiale Docker.

Nota: Docker distribuisce un repository dedicato per Fedora e RHEL mentre per CentOS, AlmaLinux e Rocky Linux ecc. utilizzano il repository compatibile con CentOS.

Per Fedora:

1
sudo dnf config-manager addrepo --from-repofile https://download.docker.com/linux/fedora/docker-ce.repo

Per RHEL:

1
sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo

Per CentOS:

1
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

Installa Docker Engine e Docker Compose:

1
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Arch Linux e derivate

Su Arch Linux Docker è disponibile direttamente nei repository ufficiali della distribuzione.

Digita sul terminale:

1
sudo pacman -S docker docker-compose

Configurazione post installazione

Abilita Docker all’avvio del sistema ed avvialo:

1
sudo systemctl enable --now docker

Verifica che il servizio sia correttamente in esecuzione:

1
systemctl status docker

Utilizzare Docker senza “sudo”

Per impostazione predefinita Docker richiede privilegi amministrativi e i comandi devono essere eseguiti tramite sudo. Per permettere al tuo utente di eseguire i comandi Docker senza utilizzare ogni volta sudo, aggiungilo al gruppo docker:

1
sudo usermod -aG docker $USER

⚠️ Attenzione: L’appartenenza al gruppo docker equivale, nella pratica, ad avere privilegi amministrativi sul sistema. Aggiungi solamente utenti di cui ti fidi.

Per rendere effettive le modifiche è necessario effettuare il logout dalla sessione corrente:

1
exit

E dopo aver effettuato nuovamente l’accesso verifica che Docker sia stato installato correttamente.

Esegui:

1
docker version && docker compose version

L’output dovrebbe essere simile al seguente:

Container di prova

Esegui il classico container di test fornito da Docker:

1
docker run --rm hello-world

Se tutto è andato a buon fine, Docker scaricherĂ  automaticamente l’immagine hello-world, creerĂ  un container temporaneo e mostrerĂ  un messaggio di conferma.

Da questo momento potrai installare ed eseguire qualsiasi applicazione distribuita tramite Docker e Docker Compose.