Rulare LLM-uri locale ca artefacte Docker cu Docker Model Runner – integrare directă în docker-compose

Configurare noua (How To)

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 comanda
docker 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

Tip solutie

Permanent

Voteaza

(5 din 7 persoane apreciaza acest articol)

Despre Autor

Leave A Comment?