Docker Model Runner Cheatsheet: Comandi & Esempi
Riferimento rapido per i comandi di Docker Model Runner
Docker Model Runner (DMR) è la soluzione ufficiale di Docker per eseguire modelli AI localmente, introdotta nel aprile 2025. Questo foglio di riferimento fornisce un rapido riferimento per tutti i comandi essenziali, le configurazioni e le best practice.
Per un confronto più ampio tra Docker Model Runner e Ollama, vLLM, LocalAI e provider cloud—inclusi i compromessi di costo e infrastruttura—vedi LLM Hosting: Local, Self-Hosted & Cloud Infrastructure Compared.

Installazione
Docker Desktop
Abilita Docker Model Runner tramite l’interfaccia grafica:
- Apri Docker Desktop
- Vai a Impostazioni → AI tab
- Clicca su Abilita Docker Model Runner
- Riavvia Docker Desktop
/home/rg/prj/hugo-pers/content/post/2025/10/docker-model-runner-cheatsheet/docker-model-runner_w678.jpg

Docker Engine (Linux)
Installa il pacchetto plugin:
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install docker-model-plugin
# Fedora/RHEL
sudo dnf install docker-model-plugin
# Arch Linux
sudo pacman -S docker-model-plugin
Verifica l’installazione:
docker model --help
Supporto NVIDIA RTX per Docker
Per abilitare l’esecuzione di LLM su GPU invece che su CPU, installa nvidia-container-toolkit:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
poi puoi eseguire i container con --gpus all
docker run --rm --gpus all <image> <command>
verifica che il container possa vedere la GPU:
docker run --rm --gpus all nvidia/cuda:12.2.2-base-ubi8 nvidia-smi
Aggiungere il supporto NVIDIA per Docker Model Runner
Docker Model Runner richiede una configurazione esplicita della GPU. A differenza dei comandi standard docker run, docker model run non supporta i flag --gpus o -e. Invece, devi:
- Configura il demone Docker per utilizzare il runtime NVIDIA di default
Prima, verifica dove è installato nvidia-container-runtime:
which nvidia-container-runtime
Questo output sarà tipicamente /usr/bin/nvidia-container-runtime. Usa questo percorso nella configurazione seguente.
Crea o aggiorna /etc/docker/daemon.json:
sudo tee /etc/docker/daemon.json > /dev/null << 'EOF'
{
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
}
}
EOF
Nota: Se which nvidia-container-runtime restituisce un percorso diverso, aggiorna il valore "path" nella configurazione JSON di conseguenza.
Riavvia Docker:
sudo systemctl restart docker
Verifica la configurazione:
docker info | grep -i runtime
Dovresti vedere Default Runtime: nvidia nell’output.
- Riinstalla Docker Model Runner con supporto GPU
Docker Model Runner deve essere installato/riinstallato con supporto GPU esplicito:
# Ferma il runner corrente
docker model stop-runner
# Riinstalla con supporto GPU CUDA
docker model reinstall-runner --gpu cuda
Questo installerà la versione abilitata per CUDA (docker/model-runner:latest-cuda) invece della versione solo CPU.
- Verifica l’accesso alla GPU
Controlla che il container Docker Model Runner possa accedere alla GPU:
docker exec docker-model-runner nvidia-smi
- Test del modello con GPU
Esegui un modello e controlla i log per confermare l’utilizzo della GPU:
docker model run ai/qwen3:14B-Q6_K "chi sei?"
Controlla i log per la conferma della GPU:
docker model logs | grep -i cuda
Dovresti vedere messaggi come:
using device CUDA0 (NVIDIA GeForce RTX 4080)offloaded 41/41 layers to GPUCUDA0 model buffer size = 10946.13 MiB
Nota: Se hai già installato Docker Model Runner senza supporto GPU, devi reinstallarlo con il flag --gpu cuda. Configurare solo il demone Docker non è sufficiente - il container runner deve essere la versione abilitata per CUDA.
Backend GPU disponibili:
cuda- NVIDIA CUDA (più comune)rocm- AMD ROCmmusa- Moore Threads MUSAcann- Huawei CANNauto- Rilevamento automatico (predefinito)none- Solo CPU
Comandi principali
Scaricare modelli
Scarica modelli preimballati da Docker Hub:
# Scarica base
docker model pull ai/llama2
# Scarica una versione specifica
docker model pull ai/llama2:7b-q4
# Scarica da un registro personalizzato
docker model pull myregistry.com/models/mistral:latest
# Elenco dei modelli disponibili in uno spazio dei nomi
docker search ai/
Eseguire modelli
Avvia un modello con servizio API automatico:
# Esecuzione base (interattiva)
docker model run ai/llama2 "Cosa è Docker?"
# Esegui come servizio (in background)
docker model run -d
in generale non abbiamo molte opzioni per l’esecuzione dei modelli tramite CLI:
docker model run --help
Usage: docker model run MODEL [PROMPT]
Esegui un modello e interagisci con esso utilizzando un prompt inviato o in modalità chat
Opzioni:
--color string Utilizza l'output colorato (auto|yes|no) (default "auto")
--debug Abilita il logging di debug
-d, --detach Carica il modello in background senza interazione
--ignore-runtime-memory-check Non bloccare il pull se la memoria stimata per il modello supera le risorse del sistema.
Elenco dei modelli
Visualizza i modelli scaricati e in esecuzione:
# Elenco di tutti i modelli scaricati
docker model ls
# Elenco dei modelli in esecuzione
docker model ps
# Elenco con informazioni dettagliate
docker model ls --json
# Elenco con informazioni dettagliate
docker model ls --openai
# Restituirà hashcodes
docker model ls -q
Rimozione dei modelli
Elimina i modelli dallo storage locale:
# Rimuovi un modello specifico
docker model rm ai/llama2
# Rimuovi con forza (anche se in esecuzione)
docker model rm -f ai/llama2
# Rimuovi i modelli non utilizzati
docker model prune
# Rimuovi tutti i modelli
docker model rm $(docker model ls -q)
Configurazione delle dimensioni del contesto del modello
Non possiamo utilizzare il CLI per specificare la dimensione del contesto per una richiesta specifica.
In generale, possiamo controllare la dimensione del contesto del modello solo in tre modi:
-
Pacchettizza il modello da solo, specificando la dimensione del contesto hardcoded desiderata (vedi la sezione successiva per maggiori informazioni.)
-
Quando si utilizza docker model runner, configura il comando con il parametro –context-size come:
docker model configure --context-size=10000 ai/gemma3-qat:4B
Poi puoi chiamare curl su di esso, ma non puoi fare docker model run... - questo ignorerà la configurazione.
- Nel file
docker-compose.yaml, ma non possiamo utilizzare l’immagine docker-model-runner in questo modo, perché passa al modello una dimensione hardcoded del contesto di 4096
...
models:
llm_model:
model: ai/gemma3-qat:4B
context_size: 10240
...
Per maggiori dettagli, vedi il post dedicato su questo argomento: Specificare la dimensione del contesto in DMR
Confezionamento di modelli personalizzati
Creare un’artefatto OCI da GGUF
Confeziona i tuoi propri modelli GGUF:
# Confezionamento base
docker model package --gguf /path/to/model.gguf myorg/mymodel:latest
# Confezionamento con metadati
docker model package \
--gguf /path/to/model.gguf \
--label "description=Modello Llama personalizzato" \
--label "versione=1.0" \
myorg/mymodel:v1.0
# Confeziona e push in un unico comando
docker model package --gguf /path/to/model.gguf --push myorg/mymodel:latest
# Confezionamento con dimensione contesto personalizzata
docker model package \
--gguf /path/to/model.gguf \
--context 8192 \
myorg/mymodel:latest
Pubblicare modelli
Pubblica i modelli nei registri:
# Accedi a Docker Hub
docker login
# Pubblica su Docker Hub
docker model push myorg/mymodel:latest
# Pubblica su registro privato
docker login myregistry.com
docker model push myregistry.com/models/mymodel:latest
# Etichetta e pubblica
docker model tag mymodel:latest myorg/mymodel:v1.0
docker model push myorg/mymodel:v1.0
Utilizzo API
Endpoint compatibili con OpenAI
Docker Model Runner espone automaticamente endpoint API compatibili con OpenAI:
# Avvia il modello con API
docker model run -d -p 8080:8080 --name llm ai/llama2
# Completamento chat
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "llama2",
"messages": [{"role": "user", "content": "Ciao!"}]
}'
# Generazione testo
curl http://localhost:8080/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "llama2",
"prompt": "C'era una volta",
"max_tokens": 100
}'
# Risposta streaming
curl http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "llama2",
"messages": [{"role": "user", "content": "Raccontami una storia"}],
"stream": true
}'
# Elenco dei modelli disponibili tramite API
curl http://localhost:8080/v1/models
# Informazioni sul modello
curl http://localhost:8080/v1/models/llama2
Configurazione Docker Compose
File Compose base
version: '3.8'
services:
llm:
image: docker-model-runner
model: ai/llama2:7b-q4
ports:
- "8080:8080"
environment:
- MODEL_TEMPERATURE=0.7
volumes:
- docker-model-runner-models:/models
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
volumes:
docker-model-runner-models:
external: true
Configurazione multi-modello
version: '3.8'
services:
llama:
image: docker-model-runner
model: ai/llama2
ports:
- "8080:8080"
mistral:
image: docker-model-runner
model: ai/mistral
ports:
- "8081:8080"
embedding:
image: docker-model-runner
model: ai/nomic-embed-text
ports:
- "8082:8080"
Per configurazioni Docker Compose avanzate e comandi, vedi il nostro Foglio di riferimento Docker Compose che copre rete, volumi e modelli di orchestrazione.
Variabili ambiente
Configura il comportamento del modello con variabili ambiente:
# Temperatura (0.0-1.0)
MODEL_TEMPERATURE=0.7
# Campionamento Top-p
MODEL_TOP_P=0.9
# Campionamento Top-k
MODEL_TOP_K=40
# Token massimi
MODEL_MAX_TOKENS=2048
# Numero di strati GPU
MODEL_GPU_LAYERS=35
# Dimensione del batch
MODEL_BATCH_SIZE=512
# Conteggio thread (CPU)
MODEL_THREADS=8
# Abilita il logging dettagliato
MODEL_VERBOSE=true
# Chiave API per l'autenticazione
MODEL_API_KEY=your-secret-key
Esegui con variabili ambiente:
docker model run \
-e MODEL_TEMPERATURE=0.8 \
-e MODEL_API_KEY=secret123 \
ai/llama2
Configurazione GPU
Rilevamento automatico GPU
DMR rileva automaticamente e utilizza le GPU disponibili:
# Usa tutte le GPU
docker model run --gpus all ai/llama2
# Usa una GPU specifica
docker model run --gpus 0 ai/llama2
# Usa più GPU specifiche
docker model run --gpus 0,1,2 ai/llama2
# GPU con limite di memoria
docker model run --gpus all --memory 16g ai/llama2
Modalità CPU solo
Forza l’inferenza su CPU quando la GPU è disponibile:
docker model run --no-gpu ai/llama2
Parallelismo tensoriale multi-GPU
Distribuisci modelli grandi su più GPU:
docker model run \
--gpus all \
--tensor-parallel 2 \
ai/llama2-70b
Ispezione e debug
Visualizza dettagli del modello
# Ispeziona la configurazione del modello
docker model inspect ai/llama2
# Visualizza gli strati del modello
docker model history ai/llama2
# Controlla le dimensioni del modello e i metadati
docker model inspect --format='{{.Size}}' ai/llama2
Log e monitoraggio
# Visualizza i log del modello
docker model logs llm
# Segui i log in tempo reale
docker model logs -f llm
# Visualizza le ultime 100 righe
docker model logs --tail 100 llm
# Visualizza i log con timestamp
docker model logs -t llm
Statistiche prestazioni
# Utilizzo delle risorse
docker model stats
# Statistiche per modello specifico
docker model stats llm
# Statistiche in formato JSON
docker model stats --format json
Rete
Esposizione API
# Porta predefinita (8080)
docker model run -p 8080:8080 ai/llama2
# Porta personalizzata
docker model run -p 3000:8080 ai/llama2
# Connetti a un'interfaccia specifica
docker model run -p 127.0.0.1:8080:8080 ai/llama2
# Multiple porte
docker model run -p 8080:8080 -p 9090:9090 ai/llama2
Configurazione rete
# Crea rete personalizzata
docker network create llm-network
# Esegui modello su rete personalizzata
docker model run --network llm-network --name llm ai/llama2
# Connetti a rete esistente
docker model run --network host ai/llama2
Sicurezza
Controllo accesso
# Esegui con autenticazione API key
docker model run \
-e MODEL_API_KEY=my-secret-key \
ai/llama2
# Usa con autenticazione
curl http://localhost:8080/v1/chat/completions \
-H "Authorization: Bearer my-secret-key" \
-H "Content-Type: application/json" \
-d '{"model": "llama2", "messages": [...]}'
Autenticazione registro
# Accedi a registro privato
docker login myregistry.com -u username -p password
# Scarica da registro privato
docker model pull myregistry.com/private/model:latest
# Usa helper credenziali
docker login --password-stdin < token.txt
Best Practices
Selezione modello
# Usa modelli quantizzati per inferenza più veloce
docker model pull ai/llama2:7b-q4 # Quantizzazione 4-bit
docker model pull ai/llama2:7b-q5 # Quantizzazione 5-bit
docker model pull ai/llama2:7b-q8 # Quantizzazione 8-bit
# Controlla le varianti del modello
docker search ai/llama2
Gestione risorse
# Imposta limiti di memoria
docker model run --memory 8g --memory-swap 16g ai/llama2
# Imposta limiti CPU
docker model run --cpus 4 ai/llama2
# Limita memoria GPU
docker model run --gpus all --gpu-memory 8g ai/llama2
Controllo salute
# Esegui con controllo salute
docker model run \
--health-cmd "curl -f http://localhost:8080/health || exit 1" \
--health-interval 30s \
--health-timeout 10s \
--health-retries 3 \
ai/llama2
Orchestrazione in produzione
Per distribuzioni in produzione con Kubernetes, i container Docker Model Runner possono essere orchestrati utilizzando manifesti standard Kubernetes. Definisci distribuzioni con limiti di risorse, autoscaling e bilanciamento del carico. Per un riferimento completo ai comandi Kubernetes e modelli di distribuzione, consulta il nostro Foglio di riferimento Kubernetes.
# Esempio: Distribuisci in un cluster Kubernetes
kubectl apply -f llm-deployment.yaml
# Scala la distribuzione
kubectl scale deployment llm --replicas=3
# Espone come servizio
kubectl expose deployment llm --type=LoadBalancer --port=8080
Risoluzione problemi
Problemi comuni
Il modello non parte:
# Controlla lo spazio disponibile sul disco
df -h
# Visualizza log di errore dettagliati
docker model logs --tail 50 llm
# Verifica disponibilità GPU
nvidia-smi # Per GPU NVIDIA
Errori di memoria insufficiente:
# Usa un modello quantizzato più piccolo
docker model pull ai/llama2:7b-q4
# Riduci la dimensione del contesto
docker model run -e MODEL_CONTEXT=2048 ai/llama2
# Limita la dimensione del batch
docker model run -e MODEL_BATCH_SIZE=256 ai/llama2
Inferenza lenta:
# Controlla l'uso della GPU
docker model stats llm
# Assicurati che la GPU venga utilizzata
docker model logs llm | grep -i gpu
# Aumenta il numero di strati GPU
docker model run -e MODEL_GPU_LAYERS=40 ai/llama2
Comandi diagnostici
# Informazioni di sistema
docker model system info
# Utilizzo disco
docker model system df
# Pulizia delle risorse non utilizzate
docker model system prune
# Pulizia completa (rimuovi tutti i modelli)
docker model system prune -a
Esempi di integrazione
Integrazione Python
import openai
# Configura il client per Docker Model Runner
client = openai.OpenAI(
base_url="http://localhost:8080/v1",
api_key="not-needed" # DMR non richiede la chiave per default
)
# Completamento chat
response = client.chat.completions.create(
model="llama2",
messages=[
{"role": "user", "content": "Ciao!"}
]
)
print(response.choices[0].message.content)
# Streaming
stream = client.chat.completions.create(
model="llama2",
messages=[{"role": "user", "content": "Raccontami una storia"}],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")
Script Bash
#!/bin/bash
# Avvia il modello se non è in esecuzione
if ! docker model ps | grep -q "llm"; then
docker model run -d --name llm -p 8080:8080 ai/llama2
echo "Aspetto che il modello parta..."
sleep 10
fi
# Fai una chiamata API
curl -s http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "llama2",
"messages": [{"role": "user", "content": "'"$1"'"}]
}' | jq -r '.choices[0].message.content'
Integrazione Node.js
import OpenAI from 'openai';
const client = new OpenAI({
baseURL: 'http://localhost:8080/v1',
apiKey: 'not-needed'
});
async function chat(message) {
const completion = await client.chat.completions.create({
model: 'llama2',
messages: [{ role: 'user', content: message }]
});
return completion.choices[0].message.content;
}
// Utilizzo
const response = await chat('Cosa è Docker Model Runner?');
console.log(response);
Per vedere come Docker Model Runner si adatta a Ollama, vLLM, LocalAI e provider cloud, consulta la nostra guida LLM Hosting: Local, Self-Hosted & Cloud Infrastructure Compared.
Link utili
Documentazione ufficiale
- Pagina ufficiale di Docker Model Runner
- Documentazione di Docker Model Runner
- Guida per iniziare con Docker Model Runner
- Blog dell’annuncio di Docker Model Runner