Situatie
Echipele care rulează deja infrastructură containerizată (Docker/docker-compose) trebuie de obicei să instaleze Ollama separat, în afara stack-ului Docker, ceea ce complică portabilitatea și versionarea mediului. Docker Model Runner tratează modelele LLM ca artefacte OCI (la fel ca imaginile Docker) — se descarcă, se versionează și se rulează cu comenzi Docker native, integrându-se direct în docker-compose.yml alături de restul serviciilor.
Solutie
Pasi de urmat
Verificare Docker Desktop și activare Model Runner
# Docker Desktop 4.40+ necesar pentru Model Runner
docker --version
# Activeaza functia (daca nu e deja activa in Docker Desktop Settings > Features)
docker desktop enable model-runner
Descărcare și testare rapidă a unui model
# Descarca un model (similar cu docker pull pentru imagini)
docker model pull ai/gemma3# Ruleaza o interogare rapida in linia de comandadocker model run ai/gemma3 “Explica pe scurt ce este un domain controller”
Listare și gestionare modele locale
# Lista modelelor descarcate local
docker model list
# Sterge un model care nu mai e necesar
docker model rm ai/gemma3
Integrare în docker-compose.yml
# docker-compose.yml
version: ‘3.8’
services:
llm:
provider:
type: model
options:
model: ai/gemma3
app:
build: .
depends_on:
– llm
environment:
– LLM_API_URL=http://llm:12434/engines/v1
ports:
– “8080:8080”
Aplicație care consumă API-ul compatibil OpenAI
Salvează ca app.py (folosit de containerul app de mai sus):
import os
import requests
LLM_API_URL = os.getenv("LLM_API_URL", "http://localhost:12434/engines/v1")
def ask_model(question, model="ai/gemma3"):
response = requests.post(
f"{LLM_API_URL}/chat/completions",
json={
"model": model,
"messages": [{"role": "user", "content": question}]
}
)
return response.json()["choices"][0]["message"]["content"]
if __name__ == "__main__":
answer = ask_model("Ce este un Group Policy Object?")
print(answer)
Pornire stack complet
docker compose up -d
# Verifica logurile serviciului LLM
docker compose logs llm -f
Testare din exterior (PowerShell)
$Body = @{
model = "ai/gemma3"
messages = @(@{ role = "user"; content = "Test conexiune Docker Model Runner" })
} | ConvertTo-Json -Depth 3
Invoke-RestMethod -Uri "http://localhost:12434/engines/v1/chat/completions" `
-Method POST -ContentType "application/json" -Body $Body
Leave A Comment?