Vai al contenuto principale
Docker
Data Engineering

I 18 migliori comandi Docker per creare, eseguire e gestire i container

Questa guida spiega i comandi Docker essenziali—dalle basi dei container a volumi e networking—così puoi gestire con sicurezza le applicazioni in qualsiasi ambiente!
Laiba Siddiqui's photo
Laiba Siddiqui
Aggiornato · 15 min leggi

Scopri con l'IA

ChatGPTClaudePerplexity

Crea il tuo account gratuito

Pratica and corso your progress.

Continua Con Google
Continuando, accetti i nostri Termini di utilizzo, la nostra Informativa sulla privacy e che i tuoi dati siano conservati negli Stati Uniti.

Docker è diventato uno strumento di riferimento per sviluppatori e professionisti dei dati che devono creare, condividere ed eseguire applicazioni in modo coerente tra ambienti diversi. Che tu stia avviando container per lo sviluppo locale o distribuendo microservizi in produzione, padroneggiare i comandi Docker è essenziale.

In questa guida ti mostrerò 18 comandi Docker fondamentali—per immagini, container, networking, volumi e Compose—che miglioreranno il tuo flusso di lavoro e renderanno l’uso di Docker più fluido ed efficiente.

Che cos’è Docker?

Docker è una piattaforma per sviluppare, distribuire ed eseguire applicazioni. Ti permette di separare la tua app dall’infrastruttura sottostante, abilitando consegne più rapide del software e gestendo la configurazione allo stesso modo in cui gestisci le tue applicazioni.

Docker esegue le app in ambienti isolati usando pacchetti leggeri chiamati container, che includono tutto ciò che serve all’app per funzionare, come dipendenze e installazioni, aiutandoti a risparmiare risorse di sistema. Possiamo condividere facilmente i container con i colleghi, eseguirne diversi in parallelo e gestirli tutti con gli strumenti e la piattaforma di Docker.

Possiamo usare Docker per molte cose, tra cui:

  • Distribuzione e scalabilità reattive.
  • Esecuzione di più carichi di lavoro sullo stesso hardware.
  • Consegna rapida e coerente delle applicazioni.

Quando usiamo Docker, lavoriamo con diversi oggetti Docker come immagini, container, network, plugin e volumi. Questi sono i mattoni del setup Docker. Sotto il cofano, Docker usa funzionalità del kernel Linux per far funzionare il tutto. Interagiamo con esso tramite semplici comandi da terminale, e ogni comando Docker inizia con docker.

> Se stai iniziando ora, il corso Introduction to Docker offre una base pratica per imparare i fondamentali della containerizzazione.

Comandi Docker di base

Ora che abbiamo visto cos’è Docker e come funziona, diamo un’occhiata ad alcuni dei comandi più comuni. Ti aiuteranno a creare, eseguire e gestire i container nel lavoro quotidiano.

docker --version e docker info

Nei comandi Docker, tutto ciò che inizia con -- è chiamato flag. 

Per esempio, --version è un flag che mostra la versione della CLI di Docker che stai usando. Puoi anche usare docker version (senza flag) per ottenere informazioni dettagliate sulle versioni di tutti i componenti Docker. 

L’output è diviso in due parti:

  • Client mostra informazioni sulla CLI Docker e sugli strumenti correlati.
  • Server mostra dettagli sul Docker Engine e su cosa lo esegue.

Puoi anche formattare questo output usando il flag --format con un template personalizzato.

Il comando docker info ti offre una panoramica completa del tuo setup Docker. È lo stesso di eseguire docker system info, solo con un nome più corto. Vedrai dettagli come la versione del kernel, il numero di container e immagini, e altre informazioni a livello di sistema. 

A seconda del driver di storage, potresti vedere anche informazioni come nomi dei pool e file di dati. Come per docker version, puoi formattare l’output usando --format o -f.

docker pull <image>

Il comando pull scarica un’immagine Docker da un registry, di solito Docker Hub, una libreria pubblica di immagini preconfigurate che puoi usare senza dover impostare nulla da zero. Puoi eseguirlo come docker pull <image> o docker pull, e in entrambi i casi farà la stessa cosa.

  • La sintassi completa è: docker image pull [OPTIONS] NAME[:TAG|@DIGEST]

Se non specifichi un tag, Docker userà :latest per impostazione predefinita. Per esempio:  docker image pull debian scarica l’immagine debian:latest.

Puoi anche aggiungere opzioni dopo il comando per personalizzare come viene scaricata l’immagine, ad esempio limitando la banda o saltando la verifica dell’immagine. L’immagine qui sotto mostra tutte le opzioni disponibili e le loro funzioni.

Opzioni per il comando docker pull

Opzioni per il comando docker pull. Fonte: Docker docs

docker run <image>

Il comando docker run <image> crea e avvia un nuovo container da un’immagine specificata, ovvero esegue l’immagine in un container nuovo. È una forma abbreviata di docker container run, e funzionano allo stesso modo.

  • Ecco la sintassi di base: docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]

Se hai già eseguito un container e vuoi riavviarlo con tutte le modifiche precedenti, usa: docker start <container>.

Il comando run offre molte opzioni per personalizzare come viene eseguito il tuo container. Vediamo alcune delle più comuni con esempi:

Flag

Esempio di comando

Descrizione

-- name

docker run --name test -d nginx:alpine

L’identificatore personalizzato specificato per il container chiamato test che usa l’immagine nginx:alpine.

-w,--workdir

docker run -w /path/to/dir/ -i -t ubuntu pwd

Esegue il comando all’interno della directory specificata, in questo esempio /path/to/dir/

--pid

docker run --rm -it --pid=host alpine

Per impostazione predefinita, tutti i container hanno abilitato lo spazio dei nomi PID, che fornisce separazione dei processi.

L’esempio esegue un container alpine con l’opzione --pid = host.

--cidfile

docker run --cidfile /tmp/docker_test.cid ubuntu echo "test"

Crea un container e stampa un test sulla console

Il flag cidfile fa sì che Docker provi a creare un nuovo file e a scriverci l’ID del container.

docker stop <container> e docker start <container>:

Il comando docker start <container> avvia uno o più container arrestati. Per esempio, in docker start my_container, my_container è il nome del container che vogliamo avviare. Possiamo anche usare il suo alias: docker container start.

  • La sintassi completa è: docker container start [OPTIONS] CONTAINER [CONTAINER...]

Allo stesso modo, docker stop arresta uno o più container in esecuzione. Per esempio, in docker stop my_container, my_container è il nome di un container in esecuzione.

Ha anche un alias: docker container stop. 

  • La sintassi completa è: docker container stop [OPTIONS] CONTAINER [CONTAINER...]

Come start, anche il comando stop ha opzioni per personalizzare come vengono arrestati i container. Ne evidenziamo alcune utili qui sotto:

Opzioni per il comando docker stop

Opzioni per docker stop. Fonte: Docker docs

Lavorare con le immagini Docker

Le immagini sono la base di ogni container. In questa sezione vedremo come creare, gestire e ispezionare le immagini Docker usando i suoi comandi più comuni.

docker build

Il comando docker build è una delle funzionalità più usate di Docker. Anche se fa parte di un ecosistema più ampio che supporta casi d’uso avanzati, qui ci concentriamo su come usarlo per creare un’immagine da un semplice Dockerfile. 

Un Dockerfile è un file di testo semplice (senza estensione) che contiene istruzioni passo passo che Docker usa per costruire un’immagine. Ecco come crearne uno:

  1. Nella directory root della tua app, crea un file chiamato Dockerfile con il seguente contenuto:
# syntax=docker/dockerfile:1

FROM node:lts-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
EXPOSE 3000

Questo Dockerfile parte da un’immagine base leggera che include Node.js e Yarn. Copia il codice sorgente della tua app nell’immagine, installa le dipendenze e definisce come avviare l’app.

  1. Ora crea l’immagine usando il comando seguente:
docker build -t getting-started.

Il flag -t ti permette di taggare l’immagine. In questo caso, l’abbiamo chiamata getting-started. Il . finale dice a Docker di cercare il Dockerfile nella directory corrente.

docker images

Il comando docker images elenca tutte le immagini di primo livello, il relativo repository, i tag e le dimensioni. Puoi anche usare i suoi alias:

  • docker image list
  • docker image ls

La sintassi è: docker image ls [OPTIONS] [REPOSITORY[:TAG]]

Questo comando supporta diverse opzioni. Per esempio, per mostrare tutte le immagini, comprese quelle intermedie, puoi aggiungere il flag -a o --all così: docker images -a.

docker rmi <image>

Il comando docker rmi <image> rimuove una o più immagini dal tuo sistema. Se un’immagine ha più tag, eseguire questo comando con un tag specifico rimuoverà solo quel tag. Ma se il tag è l’unico collegato all’immagine, verranno rimossi sia il tag che l’immagine.

Puoi anche usare uno di questi alias:

  • docker image remove
  • docker image rm

La sintassi è: docker image rm [OPTIONS] IMAGE [IMAGE...]

Se devi rimuovere un’immagine ancora usata da un container in esecuzione, dovrai forzare l’operazione aggiungendo l’opzione -f o --force.

Gestione dei container Docker

Spesso dobbiamo gestire i container — avviarli, arrestarli, ispezionarli o rimuoverli man mano che la nostra app evolve. Quindi, ti guiderò tra i comandi Docker più utili per gestire i container nel lavoro di tutti i giorni.

docker exec <container> <command>

Il comando docker exec ti consente di eseguire un comando all’interno di un container in esecuzione senza riavviarlo. È particolarmente utile per il debug o per verificare manualmente qualcosa dentro il container. Puoi anche usare il suo alias: docker container exec.

Il comando funziona solo se il processo principale del container (PID 1) è in esecuzione. Non viene rieseguito automaticamente se il container si riavvia.

La sua sintassi è: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

Ci sono diversi flag opzionali che puoi usare. Per esempio, --privileged concede al comando permessi estesi all’interno del container. Per l’elenco completo delle opzioni, dai un’occhiata alla documentazione ufficiale.

Ecco un esempio per eseguire un comando nel container:

docker exec -d mycontainer touch /tmp/execWorks

Il comando touch crea un nuovo file /tmp/execWorks all’interno del container in esecuzione mycontainer, in background.

docker logs <container>

Il comando docker logs ti permette di visualizzare i log di uno specifico container e mostra tutto ciò che è stato stampato su standard output ed error al momento dell’esecuzione. Puoi anche usare il suo alias: docker container logs

La sua sintassi è: docker container logs [OPTIONS] CONTAINER

Ci sono diverse opzioni utili che puoi aggiungere. Per esempio:

  • --details mostra attributi extra come variabili d’ambiente ed etichette.
  • --until ti permette di recuperare i log fino a un punto temporale specifico.
  • docker logs -f --until=2s test segue l’output dei log del container test e si ferma dopo aver mostrato gli ultimi due secondi di log.

Ecco tutte le opzioni che possiamo usare con docker logs:

Opzioni per docker log <container>

Opzioni per docker log <container>. Fonte: Docker docs

docker rm <container>

Il comando docker rm <container> rimuove uno o più container dal tuo sistema. Puoi anche usare i suoi alias:

  • docker container remove
  • docker container rm

La sua sintassi è: docker container rm [OPTIONS] CONTAINER [CONTAINER...]

Questo comando ha alcuni flag opzionali che puoi usare. Eccone alcuni:

Opzioni per docker rm <container>

Opzioni per docker rm <container>. Fonte: Docker docs

Per esempio, puoi usare docker rm /redis per rimuovere il container identificato dal link /redis. Nota però che questo comando rimuove solo i container in esecuzione. 

Se vuoi rimuovere i container arrestati, devi usare docker container prune. Per mantenere pulito il tuo ambiente, scopri come rimuovere in sicurezza le risorse Docker inutilizzate con questo tutorial su Docker prune.

docker restart <container>

Il comando docker restart <container> arresta e poi riavvia uno o più container. Puoi anche usare il suo alias: docker container restart. 

La sintassi è: docker restart [OPTIONS] CONTAINER [CONTAINER...]

Il comando restart ha diverse opzioni utili per personalizzare i riavvii dei container. Di seguito entrambe le opzioni, con esempi.

Opzione

Descrizione

Esempio

-s, --signal

Segnale da inviare al container.

docker restart -s SIGTERM mycontainer

-t, --timeout

Secondi da attendere prima di terminare il container.

docker restart -t 10 mycontainer

> Per fare pratica, esplora queste idee di progetti Docker che vanno dal livello principiante all’avanzato.

Docker Networking

Il networking dei container abilita la comunicazione tra container e carichi di lavoro esterni. Per impostazione predefinita, i container hanno il networking abilitato e possono effettuare connessioni in uscita, ma non sanno automaticamente su che tipo di rete si trovano o a quali altri carichi di lavoro sono connessi.

A meno che tu non usi il driver di rete none (che disabilita il networking), i container possono interagire con elementi di rete come indirizzi IP, gateway e DNS. 

Vediamo alcuni comandi di rete Docker comuni che puoi usare.

docker network ls

Il comando docker network ls elenca tutte le reti note al Docker Engine, incluse quelle su più host in un cluster. Il suo alias è: docker network list.

  • Ecco la sintassi: docker network ls [OPTIONS]

Puoi usare varie opzioni con questo comando, come mostrato nell’immagine qui sotto: 

Per impostazione predefinita, questo comando mostra per ogni rete:

  • ID
  • Nome
  • Driver
  • Scope

Puoi usare dei flag per personalizzare l’output. Per esempio, il flag --no-trunc mostra gli ID completi della rete invece delle versioni abbreviate. Ecco come usare questo comando:

docker network ls --no-trunc

docker network create <network-name>

Il comando docker network create crea una nuova rete Docker. Per impostazione predefinita, usa il driver bridge a meno che tu non ne specifichi un altro usando il flag --driver (o -d).

Docker supporta driver di rete integrati come:

  • bridge per reti su singolo host.
  • overlay per reti multi-host in modalità Swarm.

Puoi anche usare driver di terze parti o personalizzati se necessario.

  • Ecco la sintassi di base: docker network create [OPTIONS] NETWORK

Il comando offre molte opzioni per vari scopi. Consulta la loro documentazione ufficiale per vedere l’elenco completo delle opzioni.

Ecco un esempio di creazione di una rete bridge:

docker network create -d bridge my-bridge-network

Le reti bridge sono limitate a un singolo Docker Engine, quindi non connettono container su host diversi.

Una volta abilitata la modalità Swarm, puoi creare una rete che si estende su più host Docker:

docker network create --scope=swarm --attachable -d overlay my-multihost-network

> Ti incuriosisce il confronto tra Docker e Kubernetes? Questo riepilogo di Kubernetes vs Docker copre differenze chiave e casi d’uso.

Volumi Docker

I volumi Docker vengono usati per archiviare dati che devono persistere anche quando un container si arresta o viene rimosso. Puoi crearli esplicitamente o lasciare che Docker li crei automaticamente all’avvio di un container.

I volumi sono archiviati sul sistema host ma sono isolati dai file core dell’host. Vengono montati nei container in modo simile ai bind mount, ma con migliore portabilità e sicurezza. 

Vediamo alcuni comandi rilevanti per i volumi Docker: 

docker volume ls

Il comando docker volume ls elenca tutti i volumi conosciuti da Docker. Puoi anche usare il suo alias: docker volume list.

  • La sintassi è: docker volume ls [OPTIONS]

Questo comando supporta alcuni flag opzionali per aiutarti a filtrare o formattare l’output — ecco quali sono:

Opzioni per il comando docker volume ls.

Opzioni per il comando docker volume ls. Fonte: Docker docs

docker volume create <volume-name>

Il comando docker volume create crea un nuovo volume per l’archiviazione di dati persistenti. Se non fornisci un nome, Docker ne genererà automaticamente uno per te.

Creare volumi è un passaggio comune quando vuoi che i dati persistano oltre la vita di un singolo container.

  • Ecco la sintassi: docker volume create [OPTIONS] [VOLUME_NAME]

Vediamo un esempio di creazione di un volume e di configurazione di un container per usarlo:

docker volume create hello
docker run -d -v hello:/world busybox ls /world

In questo esempio, viene creato un volume chiamato hello. Poi viene montato in un container nel percorso /world. Ciò consente al container di scrivere o leggere dati da quel volume.

Più container possono usare lo stesso volume, utile se uno deve scrivere dati mentre un altro li legge.

Nota: i nomi dei volumi devono essere unici tra i driver. Non puoi usare lo stesso nome di volume in due driver di storage differenti.

Comandi Docker Compose

Docker Compose rende semplice gestire applicazioni multi-container usando un semplice file YAML. Supporta diversi ambienti come sviluppo, test, staging, produzione e CI. Con un solo comando puoi controllare i servizi, configurare le reti e gestire i volumi — tutto in un unico posto.

Vediamo alcuni comandi comuni di Compose: 

docker-compose up

Il comando docker compose up builda, (ri)crea, avvia e si collega ai container per un servizio. Se i container non sono ancora in esecuzione, avvia automaticamente anche i servizi collegati.

  • Ecco la sintassi: docker compose up [OPTIONS] [SERVICE...]

Per impostazione predefinita, questo comando combina l’output di tutti i container. Se vuoi concentrarti su servizi specifici, puoi:

  • Usare il flag --attach per collegarti a determinati servizi
  • Usare il flag --no-attach per escluderne altri

Per esempio, docker compose up --no-attach <service-name> avvia tutti i servizi tranne quello che hai escluso dai log.

Quando il comando termina, anche i container si fermano. Per mantenerli in esecuzione in background, usa il flag --detach: 

docker compose up --detach

Prima di eseguire questo comando, assicurati di essere entrato (cd) nella directory in cui si trova il file docker-compose.yml.

docker-compose down

Il comando docker compose down arresta i container e rimuove container, immagini, reti e volumi creati da docker compose up. 

  • La sintassi è: docker compose down [OPTIONS] [SERVICES]

Puoi usarlo con varie opzioni, tra cui le seguenti:

Opzioni per il comando docker compose down.

Opzioni per il comando docker compose down. Fonte: Docker docs.

Per impostazione predefinita, il comando rimuove:

  • I container dei servizi definiti nel file Compose.
  • Le reti definite nella sezione networks del file Compose.
  • La rete predefinita, se presente.

I seguenti elementi non vengono rimossi per impostazione predefinita:

  • Reti e volumi definiti come esterni.
  • Volumi anonimi, cioè i volumi che non hanno un nome.

I volumi anonimi non vengono montati automaticamente quando esegui di nuovo docker compose up perché non hanno nomi. Se ti serve archiviazione persistente, è meglio usare volumi nominali o bind mount.

Best practice per usare i comandi Docker

Docker è un modo potente per creare, distribuire ed eseguire applicazioni in container. Ma per usarlo bene e assicurarti che il tuo setup sia efficiente e facilmente scalabile, è importante seguire alcune best practice.

Usa i volumi Docker per i dati persistenti

Per impostazione predefinita, i file del container sono memorizzati in un livello scrivibile che va perso quando il container viene rimosso! Questo livello è unico per ogni container e non è facilmente accessibile. Docker usa diversi tipi di mount per rendere i dati persistenti, uno dei quali sono i volumi, gestiti dal demone Docker e archiviati sull’host. 

I volumi ci permettono di:

  • Mantenere i dati anche dopo l’eliminazione di un container.
  • Archiviare dati critici per le prestazioni con velocità a livello host.
  • Gestire facilmente lo storage tramite Docker.

Sono ideali per dati a lungo termine o quando più container devono condividere l’accesso. Tieni solo presente che, se devi accedere ai file direttamente dall’host, i bind mount potrebbero essere più adatti, poiché i volumi sono gestiti interamente da Docker.

Automatizza con Docker Compose

Gestire manualmente più container può diventare impegnativo. Docker Compose semplifica le cose permettendoti di definire tutto in un unico file YAML, così puoi concentrarti sullo sviluppo.

Ecco perché è una best practice da seguire:

  • Un solo comando semplice: avvia, arresta, scala o ricostruisci i tuoi servizi in un colpo solo.
  • Coerenza per tutti: che tu stia lavorando in sviluppo, test o produzione, Compose mantiene gli ambienti allineati così non rimarrai bloccato con i problemi del tipo “funziona sul mio computer”.
  • Networking integrato: Compose crea una rete condivisa così i tuoi servizi possono comunicare facilmente usando i nomi dei servizi invece degli IP.
  • Scalabilità semplice: puoi scalare rapidamente i servizi verso l’alto o il basso con il flag --scale, ottimo per testare come la tua app gestisce carichi diversi.
  • Configurazione chiara e collaborativa: l’intera configurazione, inclusi container, reti e volumi, è versionata e leggibile.

Conclusione

Docker può sembrare tanto all’inizio, ma una volta che prendi confidenza con i comandi principali, apre molte possibilità. Dall’esecuzione del tuo primo container alla gestione di reti, volumi e servizi, ora sei più attrezzato per creare ed eseguire applicazioni containerizzate con sicurezza.

E se hai voglia di continuare a imparare, ecco alcune ottime risorse da esplorare:

FAQ

Quali sono i comandi Docker più usati?

Alcuni dei comandi Docker più comuni includono docker run, docker ps, docker build, docker pull e docker-compose up.

In cosa differiscono i volumi Docker dai bind mount?

I volumi Docker sono gestiti da Docker e sono ideali per portabilità e persistenza dei dati, mentre i bind mount collegano un percorso file specifico sul sistema host.

Posso eseguire più container con un solo comando?

Sì, usando docker-compose up con un file docker-compose.yml puoi eseguire più servizi contemporaneamente.

Qual è la differenza tra docker start e docker run?

docker run crea e avvia un nuovo container, mentre docker start riavvia un container esistente e fermo.

Come elenco tutti i container arrestati?

Usa docker ps -a per vedere tutti i container, inclusi quelli arrestati.

A cosa serve il comando docker exec?

Ti consente di eseguire comandi all’interno di un container in esecuzione, spesso usato per il debug o per verifiche manuali.

Docker è solo per sistemi basati su Linux?

No, Docker supporta anche macOS e Windows, usando macchine virtuali leggere per abilitare la containerizzazione.

Cosa fa il comando docker-compose down?

Arresta e rimuove container, reti e volumi creati da docker-compose up.

Come rimuovo le immagini Docker dangling?

Esegui docker image prune per ripulire le immagini inutilizzate e liberare spazio su disco.

Docker può essere usato in ambienti di produzione?

Assolutamente. Docker è ampiamente usato in produzione per distribuire applicazioni scalabili e riproducibili in ambienti cloud e on-prem.


Laiba Siddiqui's photo
Author
Laiba Siddiqui
LinkedIn
Twitter

Sono una content strategist: mi piace semplificare argomenti complessi. Ho aiutato aziende come Splunk, Hackernoon e Tiiny Host a creare contenuti coinvolgenti e informativi per il loro pubblico.

Argomenti
Docker
Data Engineering

Approfondisci Docker con questi corsi!

Corso

Introduzione a Docker

4 ore
52.8K
Scopri cos'è Docker e perché è importante per chi lavora con i dati. Scopri i container Docker, le immagini e molto altro ancora.
Vedi i dettagliInizia Il Corso

Crea il tuo account gratuito

Pratica and corso your progress.

Continua Con Google
Continuando, accetti i nostri Termini di utilizzo, la nostra Informativa sulla privacy e che i tuoi dati siano conservati negli Stati Uniti.
Mostra altro
Correlato

blog

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Abid Ali Awan's photo

Abid Ali Awan

15 min

blog

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

blog

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

Mostra altro