Eseguire un’immagine Docker come container: guida pratica per principianti
Questo tutorial ti insegna a eseguire con sicurezza immagini Docker usando docker run, con esempi chiari, consigli pratici e suggerimenti per il troubleshooting.
Se ti stai chiedendo come eseguire un’immagine Docker, non sei il solo. Che tu abbia appena scaricato un’immagine da Docker Hub o l’abbia creata tu, eseguirla è il passaggio chiave che dà vita alla tua applicazione.
Questo tutorial è una guida per principianti al comando docker run e non solo. Imparerai:
Cosa sono davvero immagini e container Docker.
Come eseguire un’immagine usando diverse opzioni.
E come fermare, rimuovere e risolvere i problemi dei container come un professionista.
Alla fine, lancerai i tuoi container con sicurezza e capirai esattamente cosa succede sotto il cofano.
Capire immagini e container Docker
Prima di passare agli esempi di comando, capiamo immagini e container Docker in parole semplici.
Se conosci già questi termini, salta pure alla sezione successiva!
Cos’è un’immagine Docker?
Un’immagine Docker è un blueprint immutabile per la tua app. Definisce tutto ciò di cui il container ha bisogno: codice, librerie, ambiente e configurazioni. Una volta che hai un’immagine, puoi avviare un container o cento. Rimane coerente ogni volta.
Da dove arrivano le immagini? Le costruisci con una Dockerfile. In una Dockerfile definisci quale immagine di base usare, quali dipendenze installare e come deve essere eseguita la tua app.
Quando la tua Dockerfile è pronta, esegui il comando docker build. Questo comando segue i passaggi nel file e li trasforma in un’immagine riutilizzabile.
Cos’è un container Docker?
Un container Docker è la versione attiva di un’immagine Docker. Permette alla tua applicazione di girare in un ambiente isolato, garantendo un comportamento coerente indipendentemente dal sistema host.
Segue l’approccio “build once, run anywhere”, così non devi configurare l’ambiente a mano ogni volta.
Immagine vs container
La tabella seguente mette a confronto immagine e container:
Immagine
Container
Un’immagine è un pacchetto standardizzato che include tutti i file, i binari, le librerie e le configurazioni per eseguire un container.
Un’istanza runtime di un’immagine.
Un’immagine è immutabile. Significa che non può cambiare finché non viene ricostruita.
Il container è mutabile. Puoi modificarlo mentre è in esecuzione, installare nuovi pacchetti o cambiare file di configurazione.
Una Dockerfile (un insieme di istruzioni per costruire un’immagine) crea un’immagine.
Un’immagine crea un container.
Il tuo computer memorizza i file immagine.
Un container gira in memoria.
Se sei alle prime armi con la containerizzazione, il nostro corso Introduzione a Docker ti guida nei concetti fondamentali con esempi pratici.
Il comando docker run
Quando esegui il comando docker run, stai dicendo a Docker di avviare un nuovo container basato su un’immagine.
In parole povere, stai lanciando un programma in un ambiente isolato. Quel programma può essere qualsiasi cosa, da una semplice web app a un servizio completo con più processi.
Sintassi di base
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
[OPTIONS] - Flag extra per personalizzare come gira il container
IMAGE - Il nome dell’immagine Docker
[COMMAND] - (Opzionale) Sovrascrive il comando predefinito nell’immagine.
[ARG...]- (Opzionale) Argomenti.
Flag e opzioni comuni
-d: Modalità detached: esegue i container in background
-p: Mapping delle porte: per accedere a un servizio (come un’API o una web app) dal browser, devi esporre una porta. Esempio: -p 3000:3000 mappa la porta 3000 della tua macchina alla porta 3000 del container.
--name: Docker assegna un nome di default al container, ma puoi usare questo flag per dargliene uno personalizzato.
-v: Lo usi per tenere i dati separati dal container stesso, così restano anche se il container viene fermato o eliminato.
--rm: Quando il container si ferma, questo flag lo elimina automaticamente.
-e: Usalo per passare password del database o API key senza inserirle hardcoded nella tua app.
Esecuzione interattiva vs detached
Docker esegue i container in due modi: modalità interattiva (-it) e modalità detached (-d). Ogni modalità ha casi d’uso specifici in base ai tuoi obiettivi.
-it: Modalità interattiva: se vuoi lavorare direttamente dentro un container usando il terminale, puoi usare il flag -it. Mette il container in modalità interattiva, così puoi digitare comandi, vedere l’output e lavorare in tempo reale.
-i: Mantiene l’input aperto così puoi digitare comandi nel container
-t: Ti dà un’interfaccia tipo terminale dentro il container
-d: Modalità detached: esegue il container in background, così il tuo terminale resta libero per altri compiti.
Ora che conosci la sintassi del comando docker run, questa sezione ti mostra come creare immagini personalizzate ed eseguirle.
Usare immagini da Docker Hub
Docker Hub è come una libreria online per le immagini dei container. Puoi prendere immagini precompilate o caricare le tue per condividerle con altri. Supporta sia repository pubblici che privati, così puoi condividere le immagini apertamente con la community o applicare controlli di accesso per i tuoi team interni.
Eseguire immagini personalizzate
Per eseguire un’immagine Docker, prima devi costruirla usando una Dockerfile. Poi puoi eseguirla in locale o pubblicarla su Docker Hub per condividerla.
Quindi, creiamo prima una Dockerfile. Ecco un esempio:
# Use official Python base image
FROM python:3.11-slim
# Set working directory in the container
WORKDIR /app
# Copy requirements file and install dependencies
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Copy the rest of the app code
COPY . .
EXPOSE 5000
# Set default command
CMD ["python","app.py"]Offerto da
Cosa significa la Dockerfile qui sopra?
FROM python:3.11-slim: immagine di base con Python versione 3.11
WORKDIR /app: imposta /app come directory di lavoro dentro il container.
COPY requirements.txt . : sposta tutte le dipendenze dalla macchina locale alla directory dell’app nel container.
RUN pip install --no-cache-dir -r requirements.txt: installa le dipendenze in requirements.txt.
COPY . . : copia il codice della directory di lavoro corrente (app, file di configurazione e altro) nella directory dell’app del container.
CMD ["python", "app.py"]: esegue app.py all’avvio di un container creato da questa immagine.
Passo 1. Build della Dockerfile
Vediamo cosa succede quando esegui il build di questa Dockerfile.
Viene creato un nuovo container dalla tua immagine personalizzata, my-python-app.
La porta 5000 della tua macchina viene mappata alla porta 5000 del container (-p 5000:5000).
Viene eseguito CMD ["python", "app.py"] e l’app viene avviata.
Il container gira in background grazie all’opzione -d (modalità detached).
A questo punto, puoi visitare http://localhost:5000 nel browser e vedrai qualcosa di simile a quanto segue, il che significa che la tua applicazione è in esecuzione:
Per alcune applicazioni potresti dover eseguire immagini con una configurazione specifica. Ecco due esempi comuni.
Persistenza dei dati
I container memorizzano i dati temporaneamente. Una volta che li elimini, i dati spariscono. Un volume è un modo per archiviare i dati al di fuori del container in modo che persistano anche se il container viene rimosso o riavviato.
Per montare un volume, devi eseguire un comando come il seguente:
docker run -v my-volume:/app/data my-imageOfferto da
I dati scritti in /app/data vengono salvati nel volume anche dopo che il container è stato rimosso.
Passare variabili d’ambiente
Le variabili d’ambiente passano impostazioni di configurazione a un container Docker in fase di esecuzione. Questo ti permette di personalizzare i container senza modificare le immagini Docker.
Hai due modi per passare variabili d’ambiente:
Puoi passarle usando il parametro -e. Ecco un esempio di comando:
docker run -eENV=production -eDEBUG=False my-imageOfferto da
Puoi creare un file .env con tutte le variabili d’ambiente e passarlo al comando. Ecco un esempio:
ENV=staging
DEBUG=True
SECRET_KEY=mysecretOfferto da
Gestire i container in esecuzione
Quando un container è in esecuzione, puoi visualizzarlo, fermarlo e accedervi. Vediamo come fare.
Visualizzare i container attivi
Per elencare tutti i container Docker attivi in esecuzione sul tuo sistema, esegui il comando docker ps o docker container ls. Questo comando mostra ID del container, immagine, comando, porta, stato e altri dettagli.
Per andare oltre e rimuovere container, volumi, reti e immagini inutilizzati, dai un’occhiata alla guida a Docker prune.
Accedere ai log e alla shell del container
docker logs - Il comando docker logs recupera in blocco i log presenti al momento dell’esecuzione.
docker exec - docker exec ti permette di eseguire un nuovo comando dentro un container già in esecuzione senza fermarlo o riavviarlo. È come aprire un nuovo terminale dentro il tuo container — così puoi esplorare, eseguire script, controllare log o fare debug.
docker attach - docker attach collega il tuo terminale direttamente al processo principale di un container in esecuzione. Questo significa che puoi vedere l’output live del container (log, prompt, ecc.) e persino interagirci se il processo accetta input.
Risoluzione dei problemi comuni
Soluzioni semplici a problemi comuni. Ecco alcuni errori frequenti durante l’esecuzione di immagini Docker e come affrontarli.
Errore 1: “Error response from daemon: pull access denied for alpine-python, repository does not exist or may require ‘docker login’: denied: requested access to the resource is denied.”
Cosa significa: Docker ha provato a scaricare un’immagine, in questo caso l’immagine alpine-python da Docker Hub, ma l’immagine non esiste oppure è privata e non sei autenticato.
Come risolvere:
Ricontrolla il nome e il tag dell’immagine su Docker Hub.
Se è un’immagine privata, esegui docker login per autenticarti.
Assicurati che l’immagine esista se la stai scaricando da un registry personalizzato.
Errore 2: “No such image found: <image-name>:<tag>”
Cosa significa: Hai provato a eseguire o taggare un’immagine in locale, ma l’immagine (o il tag specificato) non è disponibile sul tuo sistema.
Come risolvere:
Usa docker images per controllare le immagini disponibili.
Eseguire un’immagine Docker è uno dei passaggi più importanti e gratificanti nell’uso dei container, che tu stia avviando un semplice web server o distribuendo un’applicazione complessa. Con pochi comandi come docker run, docker ps e docker stop, ora hai gli strumenti per avviare, gestire e risolvere i problemi dei container con sicurezza.
Se vuoi andare oltre, prova a creare una tua immagine con una Dockerfile, esplora i flag avanzati di docker run o impara a gestire più container con Docker Compose.
Dai un’occhiata a questi corsi per continuare il tuo percorso con Docker:
Intermediate Docker: Impara gestione avanzata delle immagini, volumi e applicazioni multi-container.
Posso eseguire più container dalla stessa immagine Docker?⌄
Sì, puoi eseguire più container dalla stessa immagine. Ogni container è isolato e può avere le proprie impostazioni, porte e variabili d’ambiente.
Come passo in modo sicuro secret o API key a un container Docker?⌄
Usa il flag -e per impostare le variabili d’ambiente oppure usa un file .env e --env-file per passare i secret in esecuzione senza inserirli hardcoded.
Come eseguo un’immagine Docker in background?⌄
Usa il flag -d con docker run per avviare il container in modalità detached, lasciando il terminale libero per altri comandi.
Qual è la differenza tra docker exec e docker attach?⌄
docker exec apre una nuova sessione shell dentro il container, mentre docker attach si collega al processo principale del container e al suo output live.
Perché ricevo 'pull access denied' quando eseguo un’immagine?⌄
Di solito significa che l’immagine è privata o scritta male. Controlla nome, tag e assicurati di aver fatto login su Docker Hub con docker login.
Come posso mantenere i dati in un container dopo che si ferma?⌄
Usa il flag -v per montare un volume, assicurando che i dati siano archiviati al di fuori del container e rimangano intatti anche dopo la sua rimozione.
Qual è il modo migliore per eseguire un container per lo sviluppo?⌄
Usa i flag -it per la modalità interattiva, insieme al mount di volumi e alle variabili d’ambiente per simulare un ambiente di sviluppo locale.
Come scopro quali porte vanno in conflitto sulla mia macchina?⌄
Usa lsof -i :<port> per identificare quale processo usa una porta specifica, poi fermalo oppure usa una porta host diversa per il tuo container.
Come posso visualizzare i log di un container Docker in esecuzione?⌄
Usa il comando docker logs <container_id> per recuperare e consultare i log dallo standard output e dallo standard error del container.
Srujana è una tech writer freelance con una laurea quadriennale in Informatica. Scrivere di vari argomenti, tra cui data science, cloud computing, sviluppo, programmazione, sicurezza e molti altri, le viene naturale. Ama la letteratura classica ed esplorare nuove destinazioni.
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.
Se ti stai chiedendo come eseguire un’immagine Docker, non sei il solo. Che tu abbia appena scaricato un’immagine da Docker Hub o l’abbia creata tu, eseguirla è il passaggio chiave che dà vita alla tua applicazione.
Questo tutorial è una guida per principianti al comando
docker rune non solo. Imparerai:Alla fine, lancerai i tuoi container con sicurezza e capirai esattamente cosa succede sotto il cofano.
Capire immagini e container Docker
Prima di passare agli esempi di comando, capiamo immagini e container Docker in parole semplici.
Se conosci già questi termini, salta pure alla sezione successiva!
Cos’è un’immagine Docker?
Un’immagine Docker è un blueprint immutabile per la tua app. Definisce tutto ciò di cui il container ha bisogno: codice, librerie, ambiente e configurazioni. Una volta che hai un’immagine, puoi avviare un container o cento. Rimane coerente ogni volta.
Da dove arrivano le immagini? Le costruisci con una Dockerfile. In una Dockerfile definisci quale immagine di base usare, quali dipendenze installare e come deve essere eseguita la tua app.
Quando la tua Dockerfile è pronta, esegui il comando
docker build. Questo comando segue i passaggi nel file e li trasforma in un’immagine riutilizzabile.Cos’è un container Docker?
Un container Docker è la versione attiva di un’immagine Docker. Permette alla tua applicazione di girare in un ambiente isolato, garantendo un comportamento coerente indipendentemente dal sistema host.
Segue l’approccio “build once, run anywhere”, così non devi configurare l’ambiente a mano ogni volta.
Immagine vs container
La tabella seguente mette a confronto immagine e container:
Immagine
Container
Un’immagine è un pacchetto standardizzato che include tutti i file, i binari, le librerie e le configurazioni per eseguire un container.
Un’istanza runtime di un’immagine.
Un’immagine è immutabile. Significa che non può cambiare finché non viene ricostruita.
Il container è mutabile. Puoi modificarlo mentre è in esecuzione, installare nuovi pacchetti o cambiare file di configurazione.
Una Dockerfile (un insieme di istruzioni per costruire un’immagine) crea un’immagine.
Un’immagine crea un container.
Il tuo computer memorizza i file immagine.
Un container gira in memoria.
Se sei alle prime armi con la containerizzazione, il nostro corso Introduzione a Docker ti guida nei concetti fondamentali con esempi pratici.
Il comando docker run
Quando esegui il comando
docker run, stai dicendo a Docker di avviare un nuovo container basato su un’immagine.In parole povere, stai lanciando un programma in un ambiente isolato. Quel programma può essere qualsiasi cosa, da una semplice web app a un servizio completo con più processi.
Sintassi di base
docker run [OPTIONS] IMAGE [COMMAND] [ARG...][OPTIONS]- Flag extra per personalizzare come gira il containerIMAGE- Il nome dell’immagine Docker[COMMAND]- (Opzionale) Sovrascrive il comando predefinito nell’immagine.[ARG...]- (Opzionale) Argomenti.Flag e opzioni comuni
-d: Modalità detached: esegue i container in background-p: Mapping delle porte: per accedere a un servizio (come un’API o una web app) dal browser, devi esporre una porta. Esempio:-p 3000:3000mappa la porta 3000 della tua macchina alla porta 3000 del container.--name: Docker assegna un nome di default al container, ma puoi usare questo flag per dargliene uno personalizzato.-v: Lo usi per tenere i dati separati dal container stesso, così restano anche se il container viene fermato o eliminato.--rm: Quando il container si ferma, questo flag lo elimina automaticamente.-e: Usalo per passare password del database o API key senza inserirle hardcoded nella tua app.Esecuzione interattiva vs detached
Docker esegue i container in due modi: modalità interattiva (
-it) e modalità detached (-d). Ogni modalità ha casi d’uso specifici in base ai tuoi obiettivi.-it: Modalità interattiva: se vuoi lavorare direttamente dentro un container usando il terminale, puoi usare il flag-it. Mette il container in modalità interattiva, così puoi digitare comandi, vedere l’output e lavorare in tempo reale.-i: Mantiene l’input aperto così puoi digitare comandi nel container-t: Ti dà un’interfaccia tipo terminale dentro il container-d: Modalità detached: esegue il container in background, così il tuo terminale resta libero per altri compiti.Tieni a portata di mano comandi chiave e best practice con il nostro Docker for Data Science Cheat Sheet.
Scaricare ed eseguire immagini Docker
Ora che conosci la sintassi del comando
docker run, questa sezione ti mostra come creare immagini personalizzate ed eseguirle.Usare immagini da Docker Hub
Docker Hub è come una libreria online per le immagini dei container. Puoi prendere immagini precompilate o caricare le tue per condividerle con altri. Supporta sia repository pubblici che privati, così puoi condividere le immagini apertamente con la community o applicare controlli di accesso per i tuoi team interni.
Eseguire immagini personalizzate
Per eseguire un’immagine Docker, prima devi costruirla usando una Dockerfile. Poi puoi eseguirla in locale o pubblicarla su Docker Hub per condividerla.
Quindi, creiamo prima una Dockerfile. Ecco un esempio:
Cosa significa la Dockerfile qui sopra?
FROM python:3.11-slim: immagine di base con Python versione 3.11WORKDIR /app: imposta/appcome directory di lavoro dentro il container.COPY requirements.txt .: sposta tutte le dipendenze dalla macchina locale alla directory dell’app nel container.RUN pip install --no-cache-dir -r requirements.txt: installa le dipendenze in requirements.txt.COPY . .: copia il codice della directory di lavoro corrente (app, file di configurazione e altro) nella directory dell’app del container.Passo 1. Build della Dockerfile
Vediamo cosa succede quando esegui il build di questa Dockerfile.
Nota: Per far funzionare questo comando, devi prima avere Docker configurato sul tuo sistema; questa guida ti aiuta a farlo.
Ecco cosa succede dietro le quinte quando esegui il comando di build:
/app.requirements.txtviene copiato nel container.pip install./app.my-python-app.Passo 2: Eseguire la Dockerfile
Una volta che l’immagine è stata costruita, puoi eseguirla con:
Ecco cosa succede quando la esegui:
my-python-app.-p 5000:5000).CMD ["python", "app.py"] e l’app viene avviata.-d(modalità detached).A questo punto, puoi visitare
http://localhost:5000nel browser e vedrai qualcosa di simile a quanto segue, il che significa che la tua applicazione è in esecuzione:Se lavori nel machine learning, queste migliori immagini Docker per ML e AI possono velocizzare la configurazione del tuo ambiente.
Eseguire immagini con configurazione
Per alcune applicazioni potresti dover eseguire immagini con una configurazione specifica. Ecco due esempi comuni.
Persistenza dei dati
I container memorizzano i dati temporaneamente. Una volta che li elimini, i dati spariscono. Un volume è un modo per archiviare i dati al di fuori del container in modo che persistano anche se il container viene rimosso o riavviato.
Per montare un volume, devi eseguire un comando come il seguente:
I dati scritti in
/app/datavengono salvati nel volume anche dopo che il container è stato rimosso.Passare variabili d’ambiente
Le variabili d’ambiente passano impostazioni di configurazione a un container Docker in fase di esecuzione. Questo ti permette di personalizzare i container senza modificare le immagini Docker.
Hai due modi per passare variabili d’ambiente:
-e. Ecco un esempio di comando:.envcon tutte le variabili d’ambiente e passarlo al comando. Ecco un esempio:Esempio di file
.env:Gestire i container in esecuzione
Quando un container è in esecuzione, puoi visualizzarlo, fermarlo e accedervi. Vediamo come fare.
Visualizzare i container attivi
Per elencare tutti i container Docker attivi in esecuzione sul tuo sistema, esegui il comando
docker psodocker container ls. Questo comando mostra ID del container, immagine, comando, porta, stato e altri dettagli.Per includere tutti i container — non solo quelli in esecuzione — come quelli terminati o creati ma non avviati, usa il flag
-a:Per vedere solo il container creato più di recente, usa il flag
-l(last):Se vuoi vedere tutti i container ordinati per data di creazione, con i più recenti per primi, esegui:
Fermare e rimuovere container
Per fermare uno specifico container in esecuzione, usa il comando
docker stopseguito dall’ID o dal nome del container:Per fermare tutti i container in esecuzione, usa:
$(docker ps -q)restituisce un elenco di tutti gli ID dei container in esecuzione.Una volta fermato un container, puoi rimuoverlo con:
Per rimuovere tutti i container fermati, esegui:
Per andare oltre e rimuovere container, volumi, reti e immagini inutilizzati, dai un’occhiata alla guida a Docker prune.
Accedere ai log e alla shell del container
docker logsrecupera in blocco i log presenti al momento dell’esecuzione.docker execti permette di eseguire un nuovo comando dentro un container già in esecuzione senza fermarlo o riavviarlo. È come aprire un nuovo terminale dentro il tuo container — così puoi esplorare, eseguire script, controllare log o fare debug.docker attachcollega il tuo terminale direttamente al processo principale di un container in esecuzione. Questo significa che puoi vedere l’output live del container (log, prompt, ecc.) e persino interagirci se il processo accetta input.Risoluzione dei problemi comuni
Soluzioni semplici a problemi comuni. Ecco alcuni errori frequenti durante l’esecuzione di immagini Docker e come affrontarli.
Errore 1: “Error response from daemon: pull access denied for alpine-python, repository does not exist or may require ‘docker login’: denied: requested access to the resource is denied.”
alpine-pythonda Docker Hub, ma l’immagine non esiste oppure è privata e non sei autenticato.docker loginper autenticarti.Errore 2: “No such image found: <image-name>:<tag>”
docker imagesper controllare le immagini disponibili.Errore 3: “manifest for <image>:<tag> not found: manifest unknown: The named manifest is not known to the registry.”
docker pull <image>:<tag>per recuperare una versione valida.Dockerfilecorretta e costruisci l’immagine con:Conflitti di porta ed errori di bind
I conflitti di porta si verificano quando più container o un container e un’altra applicazione tentano di accedere alla stessa porta.
Conclusione
Eseguire un’immagine Docker è uno dei passaggi più importanti e gratificanti nell’uso dei container, che tu stia avviando un semplice web server o distribuendo un’applicazione complessa. Con pochi comandi come
docker run,docker psedocker stop, ora hai gli strumenti per avviare, gestire e risolvere i problemi dei container con sicurezza.Se vuoi andare oltre, prova a creare una tua immagine con una Dockerfile, esplora i flag avanzati di
docker runo impara a gestire più container con Docker Compose.Dai un’occhiata a questi corsi per continuare il tuo percorso con Docker: