Site icon Tosolini.info

Docker e Portainer

Se abbiamo un server dove intendiamo fare il deploy di macchine Docker, la gestione via command line potrebbe risultare fastidiosa, non tanto nella creazione ma nella gestione. Questi problemi, in aggiunta ad altre feature, le risolve Portainer, un gestore grafico ad interfaccia web dedicato proprio all’ambito server.

Vediamo in questa guida come installare Docker e Portainer su una Ubuntu Server. Parto dall’assunto che la macchina Linux sia già installata ed aggiornata. Non ci sia una precedente installazione di Docker. Infatti, non useremo il Docker listato negli APT di Ubuntu, ma andremo ad inserire un nuovo repository di installazione, quello ufficiale, poiché più aggiornato rispetto alle versioni “congelate” della distribuzione.

Installazione di Docker

Per prima cosa quindi dobbiamo verificare che ci siano installati alcuni pacchetti base. Di solito sono già presenti in una installazione classica, ma in ogni caso facciamo un check.

sudo apt install \
    ca-certificates \
    curl \
    gnupg

Il passaggio successivo è quello di reperire le signature GPG di Docker ed installarle nel sistema, questo sarà necessario per “firmare” successivamente la lista da inserire in APT

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

Scarichiamo e “firmiamo” il file “.list” che si andrà ad inserire tra i repository apt di Ubuntu.

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

Aggiorniamo l’elenco dei repositories

sudo apt update

Ed infine arriviamo al punto di installare finalmente Docker

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

Installazione di Portainer

In questa fase abbiamo Docker già attivo sul sistema, tuttavia abbiamo dato le operazioni di cui sopra con il comando sudo. Comprensibilmente perché sono operazione che richiedono l’elevazione ad utente super-user, ma alla fine del giro il nostro utente base rimarrebbe escluso. Quindi risolviamo subito la questione

sudo usermod -aG docker $USER

attenzione!

affinché il comando di modifica utente abbia effetto, è necessario disconnettersi dalla sessione utente. Questo è necessario per i successivi comandi

Per prima cosa andiamo a creare un volume che ospiterà portainer

docker volume create portainer_data

ed infine andiamo a scaricare e installare il server di Portainer

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 si può vedere abbiamo mappato due porte la 8000 e la 9443 che andremo ad utilizzare per accedere alla sua interfaccia grafica.

A questo punto se diamo il comando docker ps vedremo il container di Portainer in esecuzione.

Tecnicamente se abbiamo accesso al server come localhost (ad esempio stiamo usando una VM sul nostro desktop) possiamo accedere alla URL https://localhost:9443

Nel caso di una VPS la situazione potrebbe essere più complicata, oppure in modo molto semplice non vogliamo esporre il servizio verso Internet. In questo caso la soluzione più corretta è quella di creare un Reverse Tunnel in SSH ed esporre la porta remota verso quella locale. Facciamo un esempio concreto

ssh -L 9443:0.0.0.0:9443 nome_utente_ssh@server_remoto

Con questo comando si aprirà una chiamata SSH, dove però la porta 9443 è mappata su quella locale, così facendo possiamo accedere con il nostro browser all’indirizzo https://localhost:9443

Al primo accesso Portainer chiede di definire un utente amministratore e relativa richiesta di una password. Tuttavia, se ci avete messo troppo ad accedere, Portainer medesimo si mette in protezione disattivando la pagina iniziale di accesso.

Se questo succede è necessario riavviare il container con qualche comando:

docker ps

Copiamo il docker Container ID (primo codice sulla riga) e quindi diamo il comando. Ad esempio abbiamo come id 123456ABC

docker container restart 123456ABC

Configurazione di Portainer

A questo punto dovremo aver avuto la possibilità di creare l’utente di amministratore di Portainer ed essere entrati nell’interfaccia.

Possiamo prendere confidenza con l’interfaccia se è la prima volta. In linea di massima il nodo “local” sarà il nostro nodo principale dove far girare ed istanziare immagini, container, eccetera.

Cominciamo a creare la nostra prima macchina “containerizzata“, ad esempio creiamo un server Nginx. Dal menu interno a Local (sulla sinistra, fascia blu) premiamo su “Containers“. Quindi sulla destra troveremo il meno “add container“. Si apre una Form in apparenza complessa, va compilata come da immagine seguente (cliccateci sopra per vederla ingrandita):

Premendo su “Deploy the container” il sistema scarica l’immagine e avvia la macchina, che vedremo poi listata su Containers. Super, abbiamo appena creato, con pochi click, la nostra prima vm.

E se volessimo accedere alla shell di questa macchina? Ad esempio per effettuare una configurazione. Ci sono diverse strade, quella più comoda è usare Portainer stesso. Sulla lista dove è presente anche Nginx ci sono delle icone, una di queste indica proprio la console.

La schermata successiva non tocchiamo nulla, premiamo direttamente su “Connect” e sulla pagina apparirà una Bash come utente root.

Utilizzare lo Stack

Una seconda modalità per creare una macchina, anzi più macchine se necessario, è quella di usare lo Stack. Sempre sulla sinistra, è presente la voce apposita. In questo caso andremo a sfruttare il docker-compose.yml che di solito è presente in quasi tutti i progetti.

Si tratta di un file in formato yml con le istruzioni su come comporre e configurare la macchina.

In questo caso abbiamo usato l’immagine del proxy-manager, di cui avremo modo di vedere cosa serve e come configurare in un futuro post dedicato, proprio per Portainer.

Conclusioni

Per chi è avvezzo a Vmware potrebbe cogliere dei parallelismi. Docker è l’equivalente di un Esxi mentre portainer alla Vcenter. Ovviamente le differenze sono abissali, ma diciamo che l’idea dovrebbe aiutarvi a capire qualcosa. Portainer facilita in modo esponenziale la gestione di un proprio server Docker, di fatto se ci sono le capacità a livello di server fisico, si può ottenere un piccolo datacenter privato.

Le soluzioni poi non finiscono qui, si possono creare immagini e addirittura farsi un registry (un distributore di immagini) privato.

Exit mobile version