Introduzione
In questa guida, vediamo come installare Docker e Portainer nel modo più semplice possibile, riuscendo ad ottenere anche un discreto livello di sicurezza nel caso si installasse su una VPS con ip pubblico.Il sistema operativo di riferimento sarà Debian 12, ma naturalmente la guida può essere seguita anche su OS non debian-based con i dovuti accorgimenti e modifiche ai comandi comuni.
Tralasciamo volutamente la "spiegazione" di cosa sia docker, per non allungare troppo la guida. Velocemente, ricordiamoci che le componenti fondamentali sono:
- Docker Engine: Ovvero il responsabile dell'esecuzione e gestione dei container Docker sul nostro sistema operativo (host). Di base fornisce un'interfaccia a riga di comando (CLI) per poter gestire, o più in generale "interagire" con i Container.
- Docker Images: Sono i templates che definiscono il contenuto e configurazione di un container. Le immagini contengono tutti gli elementi e i set di istruzioni necessarie per avviare l'applicazione "containerizzata". Più container possono utilizzare la stessa immagine per essere avviati. Le immagini possono essere prelevate da canali ufficiali o create per essere poi condivise sui vari canali.
- Docker Registry: Ovvero un repository pubblico utilizzato per archiviare e condividere le immagini. Docker Hub è il registro predefinito "ufficiale" da cui prelevare le immagini, ma possono essere utilizzati anche registri privati.
- Docker Compose: Si tratta di un tool ufficiale che aiuta nella configurazione e gestione dei propri contenitori. Normalmente il tutto viene gestito tramite i comandi Docker CLI. Compose ci permette invece di utilizzare un singolo file YAML per configurare i container e le eventuali relazioni fra essi.
Installazione
Se state installando Docker su una VPS accessibile pubblicamente, consigliamo intanto una lettura della guida![italianerd.com](https://italianerd.com/data/assets/logo/fb.png)
Guida Verificata - [Server] Come proteggere il tuo server Linux
Introduzione In questa breve guida, vediamo come proteggere in modo semplice un server linux, che sia una VPS, un server dedicato, o anche semplicemente il vostro raspberry connesso alla rete. Data l'enormità delle distribuzioni linux con cui è...
![italianerd.com](https://italianerd.com/data/assets/logo/favicon.png)
Prima di procedere, come sempre, assicuriamoci che il nostro sistema sia aggiornato
Bash:
sudo apt -y update && sudo apt -y upgrade
Su Debian 12, installiamo intanto i pacchetti richiesti
Bash:
sudo apt install lsb-release gnupg2 apt-transport-https ca-certificates curl software-properties-common -y
Bash:
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/debian.gpg
Bash:
sudo add-apt-repository "deb [arch=$(dpkg --print-architecture)] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
Procediamo ora con l'installazione
Bash:
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Aggiungiamo ora il nostro utente attivo al gruppo Docker, in modo da poter eseguire i comandi senza il "sudo"
Bash:
sudo usermod -aG docker $USER
newgrp docker
Assicuriamoci poi che il servizio Docker sia stato avviato
Bash:
sudo systemctl start docker && sudo systemctl enable docker
Bash:
systemctl status docker
![1.png 1.png](https://italianerd.com/data/attachments/0/91-b35c23be3600a6221579c3f4acf6100f.jpg?hash=25Q1vPuEQa)
A questo punto, docker è installato e funzionante, possiamo già usarlo per creare i nostri container con i comandi CLI. Ma noi vogliamo gestire il tutto in modo ottimale, magari con qualche aiuto grafico! Quindi procediamo nell'installazione del nostro primo container, ovvero Portainer!
Ogni container, se arrestato, perderà tutte le modifiche fatte e al prossimo avvio ripartirà secondo le istruzioni iniziali (o dell'immagine iniziale). Per ovviare a questo problema, è possibile creare un "volume permanente" sul nostro sistema host che verrà usato dal container, in modo virtualizzato.
Per installare Portainer creiamo prima un volume digitando
Bash:
docker volume create portainer_data
Adesso creiamo il container per Portainer
Bash:
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
Questo comando CLI scaricherà l'ultima immagine disponibile di Portainer, i dati locali verranno salvati nel volume creato sopra e esporrà le porte predefinite di portainer, ovvero la 9443 e la 8000. Quest'ultima (8000) è un tunnel server TCP ed è opzionale, necessaria solo se intendiamo usare l'Edge agent.
ATTENZIONE: La porta 9443 verrà esposta pubblicamente, quindi se stiamo installando Portainer su una VPS assicuriamoci di bloccarla con un firewall, ci accederemo poi tramite tunnel ssh (spiegazione di seguito). Se invece non vogliamo rendere la porta accessibile, basta modificare leggermente il comando sopra, sostituendo
-p 9443:9443
con -p 127.0.0.1:9443:9443
, in questo modo possiamo ugualmente accedere alla porta tramite tunnel ssh e la porta sarà disponibile solo in localhost.Ora, navigando su https://nostro-ip:9443 dovremmo vedere la schermata iniziale di portainer, che ci chiederà di creare un nuovo utente amministratore, ma la vediamo fra poco.
Accedere a Portainer installato su una VPS
Nel caso in cui abbiamo installato portainer su una VPS, come indicato sopra, abbiamo bloccato tramite firewall la porta 9443. Ma ora come facciamo ad accedere a questa porta dal nostro pc di casa?Semplicemente sfruttando un tunnel ssh, ovvero accediamo alla nostra macchina in ssh e creiamo un tunnel per esporre la porta 9443 SOLO al nostro computer (finchè la sessione ssh rimane attiva).
Se usiamo un sistema unix, possiamo farlo direttamente tramite il normale comando ssh:
Bash:
ssh -L [LOCAL_IP:]LOCAL_PORT:DESTINATION:DESTINATION_PORT [USER@]SSH_SERVER
Ad esempio, se la nostra macchina ha IP 1.2.3.4:
Bash:
ssh -L 9443:127.0.0.1:9443 user@1.2.3.4
navigando ora su https://127.0.0.1:9443 vedremo la schermata iniziale di Portainer
NOTA: Al primo avvio di Portainer, l'interfaccia web risponderà solo per 10 minuti, il tempo necessario per creare l'account amministratore. Quindi se da quando abbiamo avviato il container per Portainer a quando ci accediamo per la prima volta, sono passati 10 minuti, dovremmo riavviare il container per renderlo nuovamente disponibile. Possiamo farlo digitando:
Bash:
docker restart portainer
Se invece siamo su sistema Windows, possiamo creare un tunnel tramite Putty
![2.png 2.png](https://italianerd.com/data/attachments/0/92-d818d40ef6b22e13c4dc7e619b08877a.jpg?hash=AUPPVYkcWm)
Sotto la schermata "Tunnels" dobbiamo indicare la porta sorgente (Source port) e l'indirizzo destinazione (Destination). Assicuriamoci di cliccare il tasto "Add" in modo da avere una schermata simile a questa
![3.png 3.png](https://italianerd.com/data/attachments/0/93-102376c5bd178343061304ee4a270ec2.jpg?hash=NnzqkNKdUd)
Possiamo ora procedere a collegarci normalmente in SSH alla nostra VPS e portainer sarà disponibile all'indirizzo indicato.
Appena creato l'account amministratore, possiamo usare Portainer per gestire tutti i nostri container e crearli (o rimuoverli) in modo decisamente semplificato.
![4.png 4.png](https://italianerd.com/data/attachments/0/94-0dd20a7e1d639c343d0f1eb717d8c73e.jpg?hash=EgrBXX0Utv)
![5.png 5.png](https://italianerd.com/data/attachments/0/95-ed97aeaafa52487091b21a73075dadb4.jpg?hash=muhm4HmwCv)
Tramite la voce "Stack" possiamo avviare i comandi Compose, numerosi esempi sono disponibili nelle repository dei programmi noti, ad esempio per nginx (QUI l'immagine ufficiale) possiamo usare sotto la voce "Stack" quanto segue
YAML:
web:
image: nginx
volumes:
- ./templates:/etc/nginx/templates
ports:
- "8080:80"
environment:
- NGINX_HOST=foobar.com
- NGINX_PORT=80
O per Qbittorrent
YAML:
---
version: "2.1"
services:
qbittorrent:
image: lscr.io/linuxserver/qbittorrent:latest
container_name: qbittorrent
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- WEBUI_PORT=8080
volumes:
- /path/to/appdata/config:/config
- /path/to/downloads:/downloads
ports:
- 8080:8080
- 6881:6881
- 6881:6881/udp
restart: unless-stopped
Dove modifichiamo in base alle nostre esigenze i volumi, le porte e quant'altro.
Esempio simile discusso leggermente più nel dettaglio può essere trovato in fondo a questa guida:
![italianerd.com](https://italianerd.com/data/assets/logo/fb.png)
Guida Verificata - Creare un mini NAS con OpenMediaVault e Docker
Introduzione In questa guida vediamo brevemente come installare OpenMediaVault per creare il nostro piccolo NAS casalingo, sfruttando possibilmente un single board computer, come un raspberry o un odroid. In più, aggiungeremo docker per la...
![italianerd.com](https://italianerd.com/data/assets/logo/favicon.png)
Ultima nota: ricordiamoci che i container NON si aggiornano da soli, ma il più delle volte dovremmo scaricare l'immagine aggiornata e avviare nuovamente il container, con la sicurezza che i nostri file locali non verranno modificati grazie ai volumi permanenti. Ad esempio, per aggiornare Portainer, basterà usare i comandi
Bash:
docker stop portainer
Bash:
docker rm portainer
Bash:
docker pull portainer/portainer-ce:latest
Bash:
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
Come possiamo intuire, verrà usato lo stesso volume portainer_data dell'installazione precedente, il risultato sarà l'aggiornamento dell'immagine.
Per il momento abbiamo terminato, giunti alla fine di questa breve guida, spero possa esservi d’aiuto 🙂