Come installare e usare Docker sulla distribuzione CentOS7

Introduzione

Docker è un’applicazione che rende semplice l’avvio di processi applicativi all’interno di un container, paragonabile a una macchina virtuale, solo più portabile e più dipendente dal sistema operativo che lo ospita. Esistono due metodi per installare Docker su CentoOS 7. Un metodo prevede l’installazione su un sistema operativo già installato. L’altro metodo prevede l’avvio di una VM con uno strumento chiamato Docker Machine, che auto installa Docker. In questo tutorial verrà spiegato come installare e utilizzare Docker su un sistema operativo CentOS 7 già presente.

Prerequisiti

Tutti i comandi in questo tutorial dovrebbero essere avviati come un utente non-root. Se viene richiesto l’accesso come root, il comando dovrà essere preceduto da sudo.

Passaggio 1 — Installazione di Docker

Il pacchetto di installazione Docker è disponibile nella repository ufficiale di CentOS 7, però potrebbe non essere l’ultima versione disponibile. Per ottenenre l’ultima versione, si consiglia di installare Docker dalla repository ufficiale Docker. Questa sezione mostra come effettuare questa operazione.

Aggiorniamo il database dei pacchetti:

$ sudo yum check-update

Adesso scarichiamo e installiamo, con il seguente comando, l’ultima versione disponibile di Docker.

$ curl -fsSL https://get.docker.com/ | sh

Appena l’installazione è completata, avviare il daemon Docker:

$ sudo systemctl start docker

Verificare che è stato correttamente avviato con il seguente comando:

$ sudo systemctl status docker

L’output dovrebbe essere simile a ciò che segue, mostrando il servizio attivo:

Output
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2016-05-01 06:53:52 CDT; 1 weeks 3 days ago
Docs: https://docs.docker.com
Main PID: 749 (docker)

Da ultimo, rendiamo l’avvio automatico ad ogni reboot.

$ sudo systemctl enable docker

Passaggio 2 - Eseguire il comando Docker senza sudo (opzionale)

Se si vuole evitare di digitare sudo ogni volta che si avvia il comando Docker, si può aggiungere il proprio username al gruppo docker:

$ sudo usermod -aG docker $(whoami)

Per abilitare questo cambiamento, è necessario effettuare il logout e collegarsi con lo stesso utente. Il resto del presente articolo assume che sia stata effettuata questa operazione, per cui non verrà più fatto precedere sudo al comando docker.

Passaggio 3 - Utilizzo del comando Docker

Una volta installato Docker, vediamone l’utilizzo. La sintassi per l’utilizzo è la seguente:

$ docker [option] [command] [arguments]

Per visualizzare tutti gli argomenti disponibili, digitare:

$ docker

Output

attach    Attach to a running container
build     Build an image from a Dockerfile
commit    Create a new image from a container's changes
cp        Copy files/folders between a container and the local filesystem
create    Create a new container
diff      Inspect changes on a container's filesystem
events    Get real time events from the server
exec      Run a command in a running container
export    Export a container's filesystem as a tar archive
history   Show the history of an image
images    List images
import    Import the contents from a tarball to create a filesystem image
info      Display system-wide information
inspect   Return low-level information on a container or image
kill      Kill a running container
load      Load an image from a tar archive or STDIN
login     Log in to a Docker registry
logout    Log out from a Docker registry
logs      Fetch the logs of a container
network   Manage Docker networks
pause     Pause all processes within a container
port      List port mappings or a specific mapping for the CONTAINER
ps        List containers
pull      Pull an image or a repository from a registry
push      Push an image or a repository to a registry
rename    Rename a container
restart   Restart a container
rm        Remove one or more containers
rmi       Remove one or more images
run       Run a command in a new container
save      Save one or more images to a tar archive
search    Search the Docker Hub for images
start     Start one or more stopped containers
stats     Display a live stream of container(s) resource usage statistics
stop      Stop a running container
tag       Tag an image into a repository
top       Display the running processes of a container
unpause   Unpause all processes within a container
update    Update configuration of one or more containers
version   Show the Docker version information
volume    Manage Docker volumes
wait      Block until a container stops, then print its exit code

Passaggio 4 - Lavorare con le immagini Docker

I Docker container sono avviati dalle immagini Docker. Di default, queste immagini vengono prelevate da Docker Hub, un registro Docker gestito da Docker, la società che sta dietro il progetto Docker. Tutti possono costruire e ospitare le proprie immagini Docker su Docker Hub. La maggior parte degli applicativi e distribuzioni Linux hanno un’immagine ospitata su Docker Hub.

Per verificare se si può accedere e scaricare le immagini da Docker Hub, digitare:

$ docker run hello-world

L’output, che dovrebbe includere ciò che segue, indica che quel Docker è funzionante:

Output
Hello from Docker.
This message shows that your installation appears to be working correctly.

E’ possibile cercare le immagini disponibili su Docker Hub utilizzando il comando docker search termine_da_ricercare. Ad esempio, per cercare l’immagine CentOS, digitare:

$ docker search centos

Lo script analizzerà il Docker Hub e restituirà una lista di tutte le immagini il cui nome eguaglia la stringa di ricerca. In questo specifico caso, l’output sarà simile a ciò che segue:

Output
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 2224 [OK]
jdeathe/centos-ssh CentOS-6 6.7 x86_64 / CentOS-7 7.2.1511 x8… 22 [OK]
jdeathe/centos-ssh-apache-php CentOS-6 6.7 x86_64 / Apache / PHP / PHP M… 17 [OK]
million12/centos-supervisor Base CentOS-7 with supervisord launcher, h… 11 [OK]

Nella colonna OFFICIAL, OK indica un’immagine costruita e supportata dall’azienda che sta dietro il progetto. Una volta identificata l’immagine che si vorrebbe usare, si può scaricarla in locale usando il seguente comando:

$ docker pull centos

Dopo che l’immagine è stata scaricata, si può avviare il container utilizzando l’immagine scaricata con il subcomando run. Esempio:

$ docker run centos

Per visualizzare le immagini che sono state scaricate sul proprio computer, digitare:

$ docker images

Le immagini che si utilizzano per avviare i container possono essere modificate e utilizzate per generare nuove immagini, che successivamente possono essere caricate nel Docker Hub o in un altro registro Docker.

Passaggio 5 - Avviare un container Docker

Come esempio, avviamo un container utilizzando l’immagine CentOS. La combinazione dei parametri -i e -t permette l’utilizzo di una shell interattiva all’interno del container:

$ docker run -it centos

Il prompt dei comandi dovrebbe cambiare per riflettere il fatto che adesso si sta lavorando all’interno del container e dovrebbe assumere la seguente forma:

[root@59839a1b7de2 /]#

Adesso si può avviare qualsiasi comando all’interno del container. Ad esempio, installiamo il server MariaDB all’interno del container.

$ yum install mariadb-server

Passaggio 6 - Salvare le modifiche effettuate nel container in una immagine Docker

Quando si avvia un’immagine Docker, si può creare, modificare e cancellare i file come all’interno di una macchina virtuale. I cambiamenti effettuati verranno applicati solo al container. Questa sezione mostra come salvare lo stato di un container come nuova immagine Docker.

Dopo aver installato il server MariaDB all’interno del container CentOS, questo è differente dall’immagine utilizzata per crearlo. Per salvare lo stato del container come nuova immagine, dapprima uscire dal container:

$ exit

Dopodichè salvare i cambiamenti in una nuova immagine Docker utilizzando il seguente comando:

$ docker commit -m “descrizione dei cambiamenti” -a “Author” container-id repository/new_image_name

Da notare che quando si salvano i cambiamenti in un’immagine, la nuova immagine è salvata localmente, ovvero sul proprio computer. Più avanti si vedrà come caricare un’immagine in un registro Docker - tipo Docker Hub - cosicchè possa essere verificata e utilizzata anche da altri utenti.

A operazione completata, il comando $ docker images mostra sul proprio computer la nuova immagine, come anche la precedente da cui è derivata.

Passaggio 7 - Mostrare i container Docker

Dopo aver usato i Docker per un po’, si avranno molti container attivi e inattivi sul proprio computer. Per verificare quelli attivi, utilizzare il seguente comando:

$ docker ps

Per visualizzare tutti i container - attivi e inattivi - usare l’argomento -a come segue:

$ docker ps -a

Per visualizzare l’ultimo container creato, utilizzare l’argomento -l:

$ docker ps -l

Per fermare un container avviato o attivo, digitare il seguente comando:

$ docker stop container-id

Il container-id può essere reperito nell’output dal comando $ docker ps

Passaggio 8 - Caricare le immagini Docker in una repository Docker

Il passaggio successivo, dopo aver creato una nuova immagine da un’immagine già esistente, è quello di condividerla con altri utenti su Docker Hub o su altri registri Docker a cui si ha accesso. Per effettuare questa operazione, è necessario avere un account attivo su un registro. Questa sezione mostra come caricare un’immagine Docker su Docker Hub.

Per prima cosa è necessario autenticarsi con il seguente comando:

$ docker login -u docker-registry-username

Specificando la password corretta, l’autenticazione dovrebbe avvenire con successo. Successivamente si può caricare la propria immagine usando il seguente comando:

$ docker push docker-registry-username/docker-image-name

Dopo aver caricato l’immagine nel registro, dovrebbe essere mostrata sulla dashboard del proprio account, come nell’immagine sottostante:

solidgroup.it

Conclusioni

Questo articolo non vuole essere esaustivo, ma un punto di partenza per configurare e utilizzare le immagini Docker e i container utilizzando la distribuzione centOS 7. Per un maggior approfondimento, si consiglia la lettura dei tutorial presenti su github.