In questo articolo ti spiego in dettaglio come installare Docker, l'ultima versione di docker-compose e Portainer

Installare Docker, docker-compose e Portainer su Ubuntu 18.04 e Ubuntu 20.04

07-07-2020

Ho avuto la mia prima esperienza con Docker ai tempi della mia tesi universitaria. Per il mio progetto realizzai un container per ogni servizio (uno per il database mongo ed uno per il server nodejs). All’epoca però lo utilizzai molto meccanicamente, ero ancora giovine ed inesperto 😄

Non ne capivo veramente le potenzialità, ecco!

Tanto è che, subito dopo aver presentato il progetto di tesi, ho praticamente cancellato dalla mente quelle 4 nozioni che avevo appreso e che tra l’altro applicavo troppo meccanicamente, senza manco capire bene cosa stesse succedendo sotto il cofano.

Ero preso da altre cose e non volevo approfondire questa tecnologia. Però mi è sempre rimasto il pallino e la curiosità. Con il tempo ho conosciuto sempre più colleghi sviluppatori che lo utilizzavano con soddisfazione e, c’è da aggiungere, che nel frattempo Docker si è evoluto ed ha acquisito sempre più popolarità!

Ci ho messo tempo a raggiungere un buon grado di familiarità, ma finalmente ho imparato a scrivermi i miei Dockerfile e docker-compose.yml. Quindi ho deciso di semplificare la vità a te, che leggi il mio blog!

Inizio con la base: come si installa Docker? Salterò la parte di Windows e MacOS, visto che su queste due piattaforme si tratta semplicemente di lanciare un’installer. Mi concentrerò invece sull’installazione su Ubuntu 18.04 e Ubuntu 20.04.

Docker

Iniziamo con l’aggiornare pacchetti, repository, dipendenze, librerie.. Tutto 😄

sudo apt-get update
sudo apt-get upgrade -y

Disinstalla le precedenti versioni di Docker (se presenti nel sistema):

sudo apt-get remove docker docker-engine docker.io

Procediamo poi con l’installazione di Docker direttamente da apt:

sudo apt install docker.io -y

Alla fine dell’installazione, non dovrebbe durare troppo tempo, avviamo i servizi di Docker:

sudo systemctl start docker
sudo systemctl enable docker

Ho testato l’installazione sia su Ubuntu 18.04, questo è l’output:

root@scw-nervous-clarke:~# docker --version
Docker version 19.03.6, build 369ce74a3c

Che su Ubuntu 20.04, questo è l’output:

root@scw-agitated-colden:~# docker --version
Docker version 19.03.8, build afacb8b7f0

Docker Compose

Ci sono due possibili strade percorribili per installare docker-compose. FERMATI e valuta quale delle due opzioni è più comoda per te! Non devi eseguirle entrambe, sono alternativi.

Vediamoli entrambi:

Metodo automatico

Se (come me) preferisci la strada più semplice, puoi installare docker-compose via pip:

sudo apt-get install python-pip -y
pip install docker-compose

AGGIORNAMENTO 1

Se durante l’installazione di docker-compose hai avuto questo errore (o un errore simile):

pyrsistent requires Python '>=3.5' but the running Python is 2.7.17

prova a dare da terminale:

sudo apt-get install python3-pip -y
pip3 install docker-compose

AGGIORNAMENTO 2

Durante una nuova installazione mi è capitato questo errore:

    Complete output from command python setup.py egg_info:
    
            =============================DEBUG ASSISTANCE==========================
            If you are seeing an error here please try the following to
            successfully install cryptography:
    
            Upgrade to the latest pip and try again. This will fix errors for most
            users. See: https://pip.pypa.io/en/stable/installing/#upgrading-pip
            =============================DEBUG ASSISTANCE==========================
    
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-build-zeaw7v38/cryptography/setup.py", line 14, in <module>
        from setuptools_rust import RustExtension
    ModuleNotFoundError: No module named 'setuptools_rust'
    
    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-zeaw7v38/cryptography/

Che ho risolto così:

pip3 install -U pip setuptools
pip3 install docker-compose

Metodo manuale

Innanzitutto dobbiamo verificare l’ultima release disponibile, nel momento in cui scrivo è la 1.26.2. Puoi consultare questo link.

Per l’installazione devi scrivere in un terminale il seguente comando:

sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Sostituendo nell’url 1.26.2 con il numero dell’ultima release disponibile.

I seguenti comandi servono per permetterti di scrivere docker-compose direttamente nel terminale senza ricevere errore e poi assegnare i permessi di esecuzione:

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Qualunque sia il metodo che hai scelto per l’installazione, alla fine per verificare che tutto sia andato per il verso giusto:

root@scw-agitated-colden:~# docker-compose --version
docker-compose version 1.26.2, build eefe0d31

Verifichiamo il funzionamento generale

Scriviamo un file docker-compose.yml di esempio per capire se Docker e docker-compose funzionano a dovere:

root@scw-nervous-clarke:~# mkdir hello–world
root@scw-nervous-clarke:~# cd hello–world
root@scw-nervous-clarke:~/hello–world# nano docker-compose.yml

Incolliamo al suo interno le seguenti istruzioni:

version: '2'
services:
  hello-world:
    image:
      hello-world:latest

Attenzione a rispettare l’indentazione, è un file yaml, quindi un’errata indentazione manderebbe in errore l’esecuzione.

Digitiamo il comando docker-compose up nella directory appena creata:

root@scw-nervous-clarke:~/hello–world# docker-compose up
Creating network "helloworld_default" with the default driver
Pulling hello-world (hello-world:latest)...
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:d58e752213a51785838f9eed2b7a498ffa1cb3aa7f946dda11af39286c3db9a9
Status: Downloaded newer image for hello-world:latest
Creating helloworld_hello-world_1 ... done
Attaching to helloworld_hello-world_1
hello-world_1  | 
hello-world_1  | Hello from Docker!
hello-world_1  | This message shows that your installation appears to be working correctly.
hello-world_1  | 
hello-world_1  | To generate this message, Docker took the following steps:
hello-world_1  |  1. The Docker client contacted the Docker daemon.
hello-world_1  |  2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
hello-world_1  |     (amd64)
hello-world_1  |  3. The Docker daemon created a new container from that image which runs the
hello-world_1  |     executable that produces the output you are currently reading.
hello-world_1  |  4. The Docker daemon streamed that output to the Docker client, which sent it
hello-world_1  |     to your terminal.
hello-world_1  | 
hello-world_1  | To try something more ambitious, you can run an Ubuntu container with:
hello-world_1  |  $ docker run -it ubuntu bash
hello-world_1  | 
hello-world_1  | Share images, automate workflows, and more with a free Docker ID:
hello-world_1  |  https://hub.docker.com/
hello-world_1  | 
hello-world_1  | For more examples and ideas, visit:
hello-world_1  |  https://docs.docker.com/get-started/
hello-world_1  | 
helloworld_hello-world_1 exited with code 0

Tutto sembra funzionare perfettamente!!

Ultimissimo passaggio (ma non per importanza)

In alcuni casi potresti avere problemi con i comandi docker e ti sarà richiesto di anteporre sudo. C’è una soluzione anche a questo “problema”.

sudo groupadd docker

Probabilmente ti dirà che il gruppo già esiste! Non c’è problema, prosegui con il prossimo comando.

sudo usermod -aG docker $USER

Adesso ti consiglio di riavviare il sistema. Dal prossimo riavvio non sarà più necessario digitare sudo prima dei comandi docker 💪

Portainer

Cosa fa Portainer? A che serve Portainer?

Te lo spiego subito.

Portainer è un prodotto Open Source, ed è un’interfaccia grafica per gestire più facilmente Docker. Consente di amministrare veramente tutto: container, immagini, network e volumi, nei minimi dettagli e con un’immediatezza disarmante. Te lo consiglio vivamente se sei alle prime armi o semplicemente se non vuoi sporcarti troppo le mani con il terminale.

Per l’installazione devi digitare il seguente comando, l’ho testato su Windows, Ubuntu e MacOS, funziona perfettamente ovunque!

sudo docker run -d -p 9000:9000 -v "/var/run/docker.sock:/var/run/docker.sock" --restart=always --name=portainer portainer/portainer
  • -d è per la modalità detached, cioè dopo l’esecuzione del comando lascia la console libera;
  • --restart=always avvia il container all’avvio di docker;
  • -p 9000:9000 mappa la porta 9000 del container (sul quale è in esecuzione il servizio di portainer) sulla porta 9000 della macchina host.
Docker Dashboard su MacOS
Docker Dashboard su MacOS (click per ingrandire)

AGGIORNAMENTO 3

Portainer si è aggiornato ed ha cambiato nome alla sua immagine, adesso si chiama portainer-ce

Per scaricare la nuova immagine il comando è:

sudo docker run -d -p 9000:9000 -v "/var/run/docker.sock:/var/run/docker.sock" --restart=always --name=portainer portainer/portainer-ce

Conclusione

Se sei arrivato fin qui hai installato correttamente tutti gli strumenti che ti ho elencato! Adesso devi soltanto prenderci un po' di confidenza. All’inizio, per tutti, questa di Docker sembra una strada difficile, ma non scoraggiarti.

Vorrei portare altri contenuti su Docker, io lo utilizzo tantissimo ed è veramente uno strumento utile e molto potente, sento l’obbligo morale di diffondere il verbo 😄.

Tu che ne pensi? Lo utilizzi o hai intenzione di imparare ad usarlo? Hai riscontrato problemi?

AP

Antonio Porcelli @progressify

Antonio Porcelli

@progressify

Commenta l'articolo

Se non visualizzi il blocco dei commenti è perchè non hai accettato i cookies.
Cancella le preferenze del tuo browser per questo sito, aggiorna la pagina ed accetta i cookies.