Come Usare i Contenitori Docker

Una fotografia di una persona che programma su un laptop.

I contenitori sono il cuore di ogni installazione di Docker. Servono come base della piattaforma Docker e ti permettono di eseguire servizi sul tuo computer senza preoccuparti di dipendenze e conflitti di versione. Qui ti mostriamo le basi per creare, gestire e personalizzare i contenitori Docker utilizzando lo strumento CLI di Docker.

Indice

  • Come Trovare e Scaricare un’Immagine Docker
  • Come Eseguire e Fermare un Contenitore Docker
  • Come Ispezionare un Contenitore Docker
  • Come Personalizzare un Contenitore Docker
  • Come Eliminare Contenitori e Immagini Docker

Nota: Inizia installando Docker sul tuo sistema Linux.

Come Trovare e Scaricare un’Immagine Docker

I contenitori Docker sono un tipo speciale di ambiente software che ti consente di eseguire programmi separati dal resto del tuo sistema originale. Per ottenere questo, Docker utilizza “immagini software”. Queste sono copie statiche di programmi che servono come base da cui inizia un contenitore.

Questa distinzione tra immagine e contenitore ti consente di ricreare e adattare il tuo software in qualsiasi modo necessario. Ad esempio, puoi avere un’immagine come “httpd” ma avviare due contenitori distinti da essa: “sito1” e “sito2”.

Il modo più semplice per cercare una nuova immagine Docker è utilizzare il sottocomando search:

docker search httpd

Un terminale che evidenzia l'immagine Docker httpd dallo strumento CLI.

Puoi anche cercare pacchetti sul sito web di Docker Hub se preferisci utilizzare il tuo browser web.

Uno screenshot che mostra l'immagine Docker httpd dal sito web di Docker Hub.

Per scaricare l’immagine sul tuo sistema, esegui il seguente comando:

docker image pull httpd

Conferma di aver aggiunto correttamente la tua nuova immagine al tuo sistema utilizzando il sottocomando images:

docker images

Un terminale che evidenzia l'immagine Docker httpd installata sul sistema.

Creare una Nuova Immagine Utilizzando Dockerfile

Oltre a scaricare immagini precompilate da Docker Hub, puoi costruire immagini direttamente dalla CLI di Docker. Questo è utile se desideri creare versioni personalizzate di pacchetti software esistenti o se stai portando nuove app su Docker.

Per fare ciò, prima crea una cartella nella tua home directory per i tuoi file di build:

mkdir ~/my-docker-image && cd ~/my-docker-image

Crea un nuovo Dockerfile utilizzando il tuo editor di testo preferito:

nano ./Dockerfile

Incolla le seguenti righe di codice all’interno del tuo nuovo Dockerfile:

FROM nginx  
COPY sample-site /usr/share/nginx/html

Crea una cartella “sample-site” e copia o crea un sito HTML di base:

mkdir ./sample-site  
cp ~/index.html ./sample-site/

Salva il tuo nuovo Dockerfile, quindi esegui il seguente comando per costruirlo sul tuo sistema:

docker build -t custom-nginx .

Controlla se la tua nuova immagine Docker è presente nella tua lista di immagini Docker:

docker images

Un terminale che evidenzia l'immagine personalizzata generata dal sottocomando build.

Creare una Nuova Immagine Utilizzando Contenitori Esistenti

Lo strumento CLI di Docker può anche costruire nuove immagini dai contenitori che attualmente esistono nel tuo sistema. Questo è utile se stai già lavorando su un ambiente esistente e desideri creare una nuova immagine dal tuo setup attuale.

Per fare ciò, assicurati che il tuo contenitore non sia attualmente in esecuzione:

docker stop my-http-server

Esegui il sottocomando commit seguito dal nome del tuo contenitore, quindi fornisci il nome della tua nuova immagine Docker dopo:

docker commit my-http-server my-new-server-image

Conferma che la tua nuova immagine Docker è nel tuo sistema eseguendo docker images.

Un terminale che evidenzia la nuova immagine personalizzata da un contenitore Docker installato nel sistema.

Come Eseguire e Fermare un Contenitore Docker

Con la tua immagine Docker pronta, ora puoi iniziare a usarla per creare il tuo primo contenitore. Per fare ciò, utilizza il sottocomando run seguito dal nome dell’immagine che desideri eseguire:

docker run httpd

Sebbene questo funzioni per eseguire il tuo primo contenitore Docker, farlo in questo modo prenderà il controllo della tua sessione shell attuale. Per eseguire il tuo contenitore in background, aggiungi il flag -d dopo il sottocomando run:

docker run -d httpd

Il sottocomando run può anche accettare una serie di flag aggiuntivi che possono modificare il comportamento del tuo nuovo contenitore Docker. Ad esempio, il flag --name ti consente di aggiungere un nome personalizzabile al tuo contenitore:

docker run -d --name=my-http-server httpd

D’altra parte, puoi utilizzare il flag --publish per reindirizzare la porta di rete da cui puoi accedere al tuo contenitore Docker. Questo è principalmente utile se non vuoi che il tuo contenitore prenda il controllo di una porta privilegiata:

docker run -d --name=my-http-server --publish 8080:80 httpd

Uno screenshot che mostra un browser web che apre il sito web ospitato dal contenitore Docker personalizzato.

Puoi controllare tutti i contenitori Docker attualmente in esecuzione nel tuo sistema eseguendo il seguente comando:

docker ps

Simile al sottocomando run, ps può anche accettare una manciata di flag che modificheranno il suo comportamento. Ad esempio, per visualizzare i contenitori che attualmente sono spenti, usa il flag -a:

docker ps -a

Per spegnere un contenitore in esecuzione, utilizza il sottocomando stop seguito dall’ID del contenitore o dal nome del tuo contenitore Docker:

docker stop my-http-server

Puoi riavviare qualsiasi contenitore che hai fermato rieseguendo il sottocomando start:

docker start my-http-server

Nota a margine: impara le basi dell’hosting web con Docker eseguendo un semplice sito web utilizzando darkhttpd.

Pausare e Terminare un Contenitore Docker

Lo strumento CLI di Docker ti consente anche di mettere in pausa temporaneamente e terminare un processo di contenitore in esecuzione. Questo può essere utile se stai risolvendo un problema con la tua configurazione Docker e desideri isolare o fermare un contenitore che non funziona correttamente.

Inizia eseguendo docker ps per elencare tutti i contenitori in esecuzione nel sistema.

Trova l’ID o il nome del contenitore che desideri gestire.

Un terminale che evidenzia il contenitore Docker personalizzato attualmente in esecuzione nel sistema.

Esegui il sottocomando pause seguito dal nome del contenitore che desideri sospendere temporaneamente:

docker pause my-http-server

Puoi riprendere un processo sospeso eseguendo il sottocomando unpause:

docker unpause my-http-server

Per fermare un processo che non funziona correttamente, esegui il sottocomando kill seguito dal nome del tuo contenitore:

docker kill my-http-server

Come Ispezionare un Contenitore Docker

Conoscere i dettagli intricati del tuo contenitore è una parte fondamentale per mantenere la salute del tuo stack Docker. Ti consente di esaminare rapidamente eventuali problemi potenziali e può fare la differenza tra risolvere e rifare l’intero deployment.

Per visualizzare una panoramica del tuo contenitore Docker, esegui il sottocomando inspect:

docker inspect my-http-server

Facendo ciò verrà stampata una lunga stringa JSON che descrive lo stato attuale dell’intero contenitore. Puoi restringere questo output sia piping l’output a jq o utilizzando il flag incorporato -f seguito dall’oggetto JSON che desideri stampare:

docker inspect -f {{.Name}} my-http-server

Stampa dei Log del Contenitore nel Terminale

Oltre a ciò, puoi anche tracciare e stampare i log di qualsiasi contenitore Docker attualmente in esecuzione. Questo può essere utile se desideri controllare come si comporta attualmente il tuo servizio e visualizzare l’output che sta restituendo a STDOUT.

Per fare ciò, esegui il sottocomando logs seguito dal nome del tuo contenitore:

docker logs my-http-server

Puoi anche eseguire il sottocomando logs con il flag --follow per creare un log continuo del tuo servizio Docker. Questo è simile a eseguire tail -f alla fine di un pipe UNIX:

docker logs --follow my-http-server

Un terminale che mostra i log continui per un contenitore Docker.

Simile ad altri sottocomandi, puoi anche aggiungere vari flag per personalizzare l’output del log del tuo contenitore Docker. Ad esempio, il flag --timestamps aggiunge un timestamp dettagliato per ogni messaggio che il tuo contenitore invia al suo STDOUT:

docker logs --timestamps my-http-server

Il flag --details stamperà anche le variabili d’ambiente che hai impostato per il tuo contenitore Docker attuale. Nel frattempo, il flag --since ti consente di mostrare solo i log che sono avvenuti dopo un determinato punto nel tempo:

docker logs --details --since 8m my-http-server

Un terminale che mostra un output di log più dettagliato da un contenitore Docker attualmente in esecuzione.

Come Personalizzare un Contenitore Docker

Alla base, un Contenitore Docker è una piccola versione semplificata di Linux che gira sopra il tuo sistema attuale. Questo significa che, simile a una macchina virtuale, è possibile accedere e recuperare i dati all’interno del tuo contenitore.

Per copiare un file locale dalla tua macchina host al contenitore, esegui il sottocomando cp:

docker cp ~/my-file my-http-server:/tmp

A volte dovrai anche “entrare” nei contenitori aprendo una shell all’interno di essi. In questo modo puoi modificare file, installare binari e personalizzarli secondo le tue esigenze:

docker exec -it my-http-server /bin/bash

Ora, potresti, ad esempio, modificare “index.html” e creare una homepage per il sito web all’interno.

Un terminale che mostra un file HTML copiato nella shell root di un contenitore Docker.

Per uscire dalla shell del contenitore, premi Ctrl + D oppure esegui exit nel terminale.

Un terminale che evidenzia il comando di uscita dalla shell root del contenitore Docker.

Buono a sapersi: impara come spostare un contenitore Docker esistente su un nuovo sistema.

Come Eliminare Contenitori e Immagini Docker

Rimuovere contenitori e immagini Docker non utilizzati è una parte importante della manutenzione generale per il tuo deployment. Farlo ti consente di rimuovere file non necessari dal tuo server, risparmiando spazio di archiviazione a lungo termine.

Prima di eliminare un contenitore, assicurati di averlo fermato prima:

docker stop my-http-server

Ora, rimuovi il contenitore utilizzando il sottocomando rm:

docker rm my-http-server

Conferma di aver eliminato correttamente il tuo vecchio contenitore Docker eseguendo docker ps -a.

Un terminale che mostra tutti i contenitori Docker disponibili, inclusi quelli attualmente spenti.

Elimina la tua immagine Docker originale dal tuo deployment Docker:

docker rmi my-new-server-image

Un terminale che evidenzia l'output dell'eliminazione di un'immagine Docker dal sistema.

Controlla se hai rimosso correttamente la tua immagine Docker originale eseguendo docker images.

Un terminale che mostra l'elenco aggiornato delle immagini Docker.

Imparare a creare, gestire ed eliminare contenitori Docker è solo alcune delle cose che puoi fare con il tuo server Linux. Esplora il profondo mondo dell’amministrazione di sistema Linux ospitando un server e un hub di contenitori Docker con XPipe.

Crediti immagine: Shamin Haky via Unsplash. Tutte le modifiche e gli screenshot sono di Ramces Red.