Continuiamo con la nostra panoramica di microservizi in Docker con qualcosa di davvero “pesante” anche sul piano delle risorse hardware. Andremo a creare un nostro “chat-gpt” privato che girerà sulla nostra macchina, sotto il nostro comando.
Per fare questo ci andremo ad avvalere di OLLAMA e OpenWebUI che funge da interfaccia web. Tecnicamente potremo anche non usare quest’ultima ed affidarci al sistema via linea di comando, ma è indubbio che l’utilizzo diventerebbe sostanzialmente improbo.
Da docker vediamo di impostare un compose con quello che ci serve:
services:
ollama:
# Uncomment below for GPU support
# deploy:
# resources:
# reservations:
# devices:
# - driver: nvidia
# count: 1
# capabilities:
# - gpu
volumes:
- ollama:/root/.ollama
# Uncomment below to expose Ollama API outside the container stack
# ports:
# - 11434:11434
container_name: ollama
pull_policy: always
tty: true
restart: unless-stopped
image: ollama/ollama:latest
ollama-webui:
build:
context: .
args:
OLLAMA_API_BASE_URL: '/ollama/api'
dockerfile: Dockerfile
image: ghcr.io/open-webui/open-webui:latest
container_name: ollama-webui
depends_on:
- ollama
ports:
- 3000:8080
environment:
- "OLLAMA_API_BASE_URL=http://ollama:11434/api"
extra_hosts:
- host.docker.internal:host-gateway
restart: unless-stopped
volumes:
ollama: {}
open-webui: {}
YAMLAl solito, salviamo il file con il nome docker-compose.yml all’interno di una cartella, e avviamo il tutto con il comando
docker compose up -d
BashSe tutto va come atteso, avremo la possibilità di accedere all’interfaccia web sulla porta 3000 (http://localhost:3000/).
Verrà chiesto di creare un account amministratore, la mail potete anche metterla totalmente finta, tanto stiamo “girando” in locale. Al termine avremo accesso all’interfaccia di chat, che ricorda in modo piuttosto marcato quella ben più nota di OpenAI. Tuttavia in questo momento il chatter è di fatto sordo poiché gli mancano due cose, una connessione al container di Ollama e un modello.
La connessione possiamo impostarla/verificarla come mostrato dall’immagine sottostante, facendo attenzione ai punti numerati per giungere alle impostazioni delle API.

Alla sezione Ollama API sostituimo (o verifichiamo) la parte dopo HTTP con il nome del container, nel caso aveste usato il compose di cui sopra sarà “ollama”.
A questo punto possiamo caricare il modello, ci sono due modi di farlo, uno un po’ più “geek” attraverso la bash di Docker Exec, ad esempio:
docker exec -it ollama ollama run llama2
BashOppure si può chiedere direttamente alla chat di installarlo per noi. Da interfaccia, sotto il modello in alto (vedi foto sottostante) scriviamo il nome del modello ed accettiamo lo scaricamento:

A questo punto vi starete chiedendo come cercare un modello. Per sapere l’elenco, e soprattutto cosa facciano: https://ollama.com/library. Oppure visitare la pagina GitHub di Ollama.
Nella scelta del modello è necessario porre attenzione alla grandezza dei token, espressi in billions (miliardi) per cui questo carica il sistema in modo più o meno evidente. Questo ovviamente dipende molto dalla disponibilità della potenza di calcolo, e soprattutto se avete una GPU Nvidia che possa fare la differenza. Nella pagina della libreria comunque c’è una breve descrizione di cosa fa e in quale ambito eccelle. Essendo locale può essere più o meno settorializzato. Ecco su questo punto di vista vale spendere due parole.
Il concetto di questi microservizi non è certamente quello di rivaleggiare con i vari Large Language Model che dispongono di potenze di calcolo improbabili. Ma quello di specializzare verso dei micro settori. Ad esempio immaginiamo che in una ditta abbiamo una serie di manuali per determinati macchinari. Un LM mirato può essere allenato ed istruito per essere un vero e proprio oracolo di quelle argomentazioni.
Ad ogni modo ci sono modelli piuttosto versatili, ad esempio nel momento in cui scrivo questo articolo Gemma3n di Google è decisamente rapido e piuttosto duttile, ho provato a fargli domande decisamente disparate e seppur mostrando una certa lentezza di quando in quando, è arrivato a fornire una risposta sensata.
Come anticipato prima, con una serie di domande la macchina ha cominciato ad andare in sofferenza termica per via del sovraccarico di RAM e CPU.
Quanto esposto sopra poi è un piccolo scorcio su quello che si può fare, lo stesso OpenWebUI ha non poche impostazioni su cui andare ad interagire. In futuro avremo modo di vedere che Ollama può essere usato con altre applicazioni decisamente più interessanti anche per automatizzare flussi di lavoro ripetitivi, o creare delle funzioni automatizzate a livello aziendale.