Oggi vedremo perché dovresti installare Docker su Raspberry. Prima di tutto Docker è una piattaforma open-source che consente di automatizzare il processo di creazione, distribuzione ed esecuzione di applicazioni in contenitori (container). I container sono ambienti leggeri e isolati che permettono di eseguire software in modo coerente, indipendentemente dal sistema operativo o dalla configurazione sottostante. Docker ha rivoluzionato la gestione delle applicazioni, consentendo agli sviluppatori di scrivere codice in un ambiente definito e quindi eseguire la stessa applicazione su qualsiasi macchina, sia essa un server, un laptop o un cloud.
La macro architettura di Docker si compone di due componenti principali: Docker Engine e Docker Hub. Il Docker Engine è il cuore della piattaforma e si divide in due sezioni: il Docker Daemon (un processo in background che gestisce i container) e la Docker CLI (Command Line Interface), che consente agli utenti di interagire con il sistema e gestire i container tramite comandi. I container stessi sono basati su immagini, che sono istantanee leggere di un ambiente, contenenti tutto il necessario per eseguire una determinata applicazione. Docker Hub, d’altra parte, è il registro online dove sono memorizzate e condivise le immagini Docker, permettendo agli utenti di scaricare applicazioni preconfigurate o caricare le proprie. Questo sistema consente un elevato grado di portabilità e scalabilità, rendendo Docker una soluzione ideale per ambienti di sviluppo e produzione.
Ok, tutto molto bello nella teoria, ma dove si può installare nella pratica?! Lo puoi installare sia su ambienti Windows che su ambienti Linux.
A mio avviso una delle migliori opzioni per l’installazione di Docker è Raspberry Pi, uno degli strumenti più popolari per la creazione di progetti fai-da-te, prototipi, server domestici e molto altro.
In questo articolo, esploreremo i 10 motivi per cui dovresti considerare l’installazione di Docker sul tuo Raspberry Pi.
1)Facile Gestione delle Applicazioni
Uno dei motivi principali per cui dovresti usare Docker su Raspberry Pi è la facilità con cui puoi gestire le tue applicazioni. Docker consente di eseguire un’applicazione all’interno di un “contenitore”, che è un ambiente isolato che contiene tutte le dipendenze necessarie per far funzionare il software. In questo modo, puoi installare e gestire molteplici applicazioni senza preoccuparti di conflitti di versioni o di pacchetti. Docker si occupa di tutte le configurazioni e ti permette di eseguire le tue applicazioni in modo semplice e sicuro.
2)Isolamento delle Applicazioni
Con Docker, ogni applicazione viene eseguita all’interno di un proprio contenitore isolato. Ciò significa che ogni applicazione ha il suo ambiente indipendente, e non interferisce con altre applicazioni o con il sistema operativo sottostante. Questo isolamento è estremamente utile quando si gestiscono più progetti o applicazioni sullo stesso Raspberry Pi. Se un’applicazione ha un problema o si blocca, non influirà sulle altre applicazioni in esecuzione.
3)Semplicità di Aggiornamenti
Un altro vantaggio di Docker è la sua capacità di aggiornare facilmente le applicazioni. Puoi ottenere le ultime versioni di un’applicazione semplicemente aggiornando il contenitore Docker. Questo ti permette di mantenere il tuo Raspberry Pi sempre aggiornato con le versioni più recenti del software, senza dover gestire manualmente le dipendenze o le configurazioni.
4)Consumo al Minimo di Risorse
Il Raspberry Pi è una macchina a bassa potenza, quindi è fondamentale utilizzare le risorse in modo efficiente. Docker è ottimizzato per un uso minimo delle risorse. I contenitori sono leggeri e condividono il kernel del sistema operativo, quindi consumano meno memoria e CPU rispetto alle tradizionali macchine virtuali. Questo ti permette di eseguire più applicazioni sul tuo Raspberry Pi senza sovraccaricare la macchina.
5)Portabilità delle Applicazioni
Un altro motivo per cui Docker è una scelta eccellente per il Raspberry Pi è la portabilità. Un’applicazione che esegui in un contenitore Docker su Raspberry Pi può essere eseguita anche su altri sistemi che supportano Docker, inclusi server Linux, PC o altre versioni di Raspberry Pi. Questo significa che puoi facilmente migrare le tue applicazioni o spostarle su altri dispositivi, senza preoccuparti delle configurazioni specifiche del sistema operativo.
6)Compatibilità con altri progetti popolari: Home Assistant, AdGuard, ecc
Docker offre una vasta libreria di immagini pronte all’uso, che ti permettono di eseguire facilmente applicazioni come AdGuard (per il blocco della pubblicità), Home Assistant (per l’automazione domestica) e molte altre. Questi software sono molto popolari e, grazie a Docker, puoi eseguirli in modo rapido e senza doverti preoccupare di configurazioni molto complesse. Con pochi comandi, puoi installare e avviare questi strumenti sul tuo Raspberry Pi.
7)Sicurezza Aggiuntiva
Poiché ogni contenitore Docker è isolato dal sistema operativo principale e da altri contenitori, offre una sicurezza maggiore rispetto ad altri metodi di esecuzione delle applicazioni. Ogni contenitore è come una “scatola” separata che non ha accesso diretto al resto del sistema, a meno che tu non lo consenta esplicitamente. Questo isolamento aiuta a proteggere il tuo Raspberry Pi da vulnerabilità o attacchi provenienti da software malevolo.
8)Facilità di Backup e Ripristino
Docker facilita anche la gestione del backup e del ripristino. Se desideri fare un backup dei tuoi dati, puoi semplicemente fare il backup delle immagini dei contenitori Docker, che contengono tutti i dati e le configurazioni delle tue applicazioni. In caso di guasto o se desideri spostare il sistema su un altro Raspberry Pi, puoi ripristinare rapidamente l’immagine del contenitore. Questo rende la gestione dei dati molto più semplice e sicura rispetto ai metodi tradizionali.
9)Facilità di Aggiornamento dei Progetti e Gestione di Più Versioni
Se lavori su più progetti, o se hai bisogno di testare diverse versioni dello stesso software, Docker ti permette di farlo facilmente. Puoi creare contenitori separati per ciascun progetto o versione dell’applicazione, senza doverti preoccupare delle interferenze tra le versioni. Se hai bisogno di passare a una versione più recente di un software, puoi farlo facilmente con Docker, senza compromettere le versioni precedenti. Questo ti dà la massima flessibilità nel gestire i tuoi progetti.
10)Semplicità di Configurazione e Installazione
Infine, uno dei motivi più convincenti per cui dovresti usare Docker su Raspberry Pi è la facilità di configurazione. Installare e configurare Docker è semplice, e puoi farlo rapidamente seguendo le istruzioni ufficiali. Inoltre, la maggior parte delle applicazioni che desideri eseguire su Raspberry Pi hanno immagini Docker già pronte, quindi non devi preoccuparti di configurare manualmente ogni singola dipendenza o libreria. Questo ti consente di risparmiare tempo e concentrarti sullo sviluppo o sull’uso del software.
Con Docker, puoi installare, gestire e aggiornare facilmente le tue applicazioni, migliorando l’efficienza, la sicurezza e la flessibilità del tuo ambiente Raspberry Pi. Se non hai ancora provato Docker sul tuo Raspberry Pi, ora è il momento giusto per farlo! Qui sotto ti spiegherò come fare.
Apriamo un terminale in ssh incolliamo questi comandi:
sudo apt-get update && sudo apt-get -y upgrade curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh
Il primo comando provvede ad aggiornare il sistema operativo mentre i successivi due permettono di scaricare e avviare lo script per l’installazione di Docker. L’operazione richiede un paio di minuti.
sudo usermod -aG docker pi
Riavviamo:
sudo reboot docker version docker info
Proviamo a vedere se è tutto funzionante lanciando un comando per avviare un container di test.
docker run hello-world
Dopo qualche secondo comparirà il messaggio “Hello from Docker!”, questo conferma che tutto funziona correttamente.

Vi consiglio di usare Portainer.io, è anch’esso un container e vi permetterà di gestire le vostre applicazioni tramite un’ interfaccia web semplice e intuitiva.
Per installarlo:
docker volume create portainer_data docker run -d -p 9000:9000 -p 8000:8000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
I due comandi consentono di creare un’unità virtuale che ospiterà tutti i dati di Portainer e di installare il container corrispondente.
Dopo qualche secondo l’installazione sarà terminata:

Per accedere a Portainer aprite il browser e inserite l’indirizzo del vostro Raspberry usando la porta 9000,
una cosa simile a http://192.168.1.XXX:9000/. Inserite una password sicura per la creazione dell’utente admin

Una volta fatto il login, andiamo su Environments e su poi su Local.
Sarà possibile installare i container disponibile sul Docker Hub a questo indirizzo a patto che siano compatibili con l’architettura ARM.

Per aggiungere un container, clicchiamo sulla sinistra “Containers” e poi sulla destra “+ Add container”

Ora decidiamo cosa vogliamo installare, per esempio decidiamo di voler aggiungere Home Assistant al nostro Raspberry,
nel campo Image inseriamo homeassistant/raspberrypi3-homeassistant.
Dobbiamo ricordarci di pubblicare la porta 8123 come mostrato e alla fine cliccare sul tasto “Deploy the container”. Bisognerà attendere qualche minuto.

Una volta terminato vedremo il nostro nuovissimo container nella lista.
Per vedere se tutto è andato bene, apriamo una nuova scheda del nostro browser e inseriamo l’indirizzo del nostro raspberry utilizzando la porta 8123,
una cosa simile a http://192.168.1.XXX:8123/

Se vediamo una pagina simile a questa vuol dire che tutto è andato per il meglio.
In un prossimo articolo o anche in una nuova categoria spiegherò come utilizzare questo hub dedicato alla domotica ma per adesso non mi dilungo sulla sua configurazione.
Qualche mese fa scrissi un tutorial su come installare proprio OpenLiteSpeed su Raspberry, se sei interessato puoi leggere l’articolo.
Proviamo a installare il container di OpenLiteSpeed sempre per la versione ARM/ARM64.
Ho trovato questo https://hub.docker.com/r/eurobertics/openlitespeed. Possiamo creare i container anche da riga di comando se lo riteniamo più veloce.
Se hai già installato OpenLiteSpeed sul Raspberry, bisogna arrestare il servizio con il comando:
sudo systemctl stop lsws.service
Ora possiamo procedere con l’installazione del container con questo comando e attendere il download:
docker run -d --name ols -p 7080:7080 -p 8088:8088 eurobertics/openlitespeed:1.8.1-lsphp83
Il nostro server web che gira sotto Docker è pronto per essere utilizzato.
Ho voluto fare un piccolo test sulle performance della pagina di esempio nella mia rete locale. Usando una macchina con KALI Linux ho lanciato il comando
wrk -t 4 -c 10 -d 60s http://192.168.x.x
- 4 thread: Bilancia l’uso della CPU.
- 10 connessioni simultanee: Un numero ragionevole per un ambiente di test.
- 60 secondi: Durata del test per limitare l’impatto.
- http://192.168.x.x è la pagina che si vuole testare
Come mostrato qui sotto abbiamo ottenuto una media di 380 richieste al secondo circa.

Stoppando il container appena creato e usando la precedente installazione di OpenLiteSpeed otteniamo un risultato leggermente superiore,
circa 395 richieste al secondo, come mostrato qui di seguito.

In questo ultimo esempio possiamo intuire che Docker migliora i tempi di installazione, configurazione e deploy delle applicazioni introducendo un’inevitabile overhead che si traduce poi in una piccola perdita di prestazioni su hardware con risorse limitate.
Per avere un termine di paragone, ho utilizzato lo stesso comando impostando come target libero.it ottenendo 685 richieste/s e
per un mio apparato di rete ottenendo circa 33 richieste/s.

L’articolo è terminato, spero di averti almeno incuriosito illustrandoti i 10 motivi per installare Docker 🐳,
questo tipo di tecnologia che stravolge il concetto delle classiche Virtual Machine.
Troverai altri articoli su Docker 🐳 perché velocizzano e semplificano tantissimo l’installazione delle applicazioni non compromettendo il sistema operativo originale.