Tutorial > Gestire i container Docker su Linux

Gestire i container Docker su Linux

Pubblicato il: 14 novembre 2019

Docker

Docker è una piattaforma software che nasce con l’intento di facilitare il deployment delle applicazioni basandosi sul concetto di container. La piattaforma permette infatti di creare, testare e distribuire applicazioni raccogliendole in unità standardizzate, chiamate appunto container.

I container Docker sono degli ambienti isolati, all'interno dei quali le applicazioni possono essere eseguite senza che altri processi interferiscano con esse. A ogni container è possibile assegnare risorse computazionali dedicate, in maniera analoga a quanto accade con le macchine virtuali. A differenza di queste ultime, su Docker non vi è però emulazione di hardware, ma si sfrutta l’hardware fisico dell’host per ciascun container.

Rispetto alla virtualizzazione, la contenierizzazione rappresenta quindi una naturale evoluzione dato che risulta meno esosa in termini di risorse e quindi in grado di generare un miglioramento delle prestazioni dell'intero sistema. Inoltre i container permettono di semplificare il deployment delle applicazioni, senza doversi preoccupare della configurazione dell’ambiente di runtime, perchè includono al loro interno tutto il necessario per la corretta esecuzione delle applicazioni, incluse librerie, strumenti di sistema e codici.

In questo tutorial ti mostriamo come gestire al meglio i container Docker su Linux, spiegandoti come scaricare le immagini da Docker Hub, creare un nuovo container e salvarne un'immagine.

Se la piattaforma Docker non é ancora presente sul tuo sistema puoi seguire prima la nostra guida su come installare Docker su Ubuntu 18.04.

Scaricare una immagine

I container sono costruiti a partire dalle immagini. Di default queste immagini vengono scaricate dal Docker Hub, ossia uno registro di immagini ufficiali fornite dall'azienda stessa.
Chiunque può hostare le proprie immagini sul Docker Hub. Ciò permette di utilizzare delle immagini preconfezionate come base per le proprie applicazioni.

Prova ad avviare il comando:

$ docker run centos

pasted-image-0-(1).png

Docker cercherà l’immagine “centos” nel registro locale. Non trovandola (in quanto non è mai stata scaricata fino ad ora) la scaricherà dal Docker Hub e costruirà il container con questa immagine. L’immagine utilizzata non fornisce alcun output visivo, ma puoi vedere il container in esecuzione mediante il comando:

$ docker ps

Per vedere tutti i container esistenti, sia in esecuzione che fermi:

$ docker ps -a

pasted-image-0-1.png

Per visualizzare l’elenco delle immagini scaricate devi digitare:

$ docker images

Elenco delle immagini Docker

Creare un container Docker

Prova a costruire un container con l’immagine di CentOS scaricata precedentemente:

$ docker run -it centos

L’istruzione “-it” ti permette di avere accesso alla shell interna al container. Quella che si avrà davanti non sarà più la shell del proprio sistema operativo bensì quella del container: tutti i comandi che verranno avviati non saranno eseguiti sulla shell dell’host ma sulla shell dell’OS presente all’interno del container (in questo caso Ubuntu).
Per uscire dalla shell del container e ritornare sulla shell dell’host bisogna digitare:

$ exit

Shell del container Docker

Per avviare un container:

$ docker start ID_oppure_nome_container

Per fermare l'esecuzione di un container:

$ docker stop ID_oppure_nome_container

Per eliminare un container:

$ docker rm ID_oppure_nome_container

Prima di poter avviare o eliminare un container questo deve trovarsi in uno stato di “stop”.
Prima di poter bloccare un container questo deve trovarsi in uno stato di “run”.
I container sono ambienti isolati e per definizione sono quindi “chiusi”. Al fine di poter interagire con il loro “contenuto” devi mappare una porta per la comunicazione. 

$ docker run -p 8081:80 -d nginx
  • docker run”: comando di avvio del container

  • -p 8081:80”: espone la porta 80 del container sulla porta 8081 dell’host, qualora si tratti di un container che hosta un WebServer, l’accesso al container avverrebbe recandosi a “localhost:8081” 

  • -d”: avvia il container in background

  • nginx”: immagine usata per la costruzione del container, se assente in locale viene scaricata dal Docker Hub.

Avviare un immagine Docker

Creare l'immagine di un container

Una volta creato il container e dopo aver apportato le dovute modifiche, è consigliato creare la relativa immagine. Tutto ciò che viene inserito nel container (installazione di moduli aggiuntivi ed eventuali personalizzazioni) resta nel container e non nell’immagine utilizzata per il build. Se rimuovi quel container e lo crei nuovamente sarà privo di ogni modifica effettuata fino a quel momento.

Ipotizza di aver creato un container con l’immagine di CentOS e di averci installato Nginx. Se rimuovi il container e lo ricrei con l’immagine di Ubuntu, non avrai Nginx nel container in quanto l’immagine utilizzata non lo contiene.

Per generare l’immagine di un container, e avere quindi un backup per ricreare il container sempre con le stesse condizioni, devi eseguire il comando:

$ docker commit -m "Lista delle modifiche effettuate" -a "Nome utente" container_id repository/nome_immagine
  • -m” serve a scrivere l’elenco delle modifiche per avere un log a cui fare riferimento

  • -a” serve a indicare il nome dell’utente che genera l’immagine.

Questo comando ti permette di salvare l’immagine nel registro locale (visualizzabile sempre mediante docker images).
É possibile anche salvare l’immagine sul Docker Hub. Per far ciò bisogna autenticarsi sul Docker Hub mediante Docker (da shell) digitando:

$ docker login -u username

Verrà richiesto l’inserimento della password per l’autenticazione sul Docker Hub. Infine carica l'immagine:

$ docker push username/nome_immagine