π§± Dockerfile Quality Classifier β Binary Model
This model predicts whether a given Dockerfile is:
- β GOOD β clean and adheres to best practices (no top rule violations)
- β BAD β violates at least one important rule (from Hadolint)
It is the first step in a full ML-based Dockerfile linter.
π§ Model Overview
- Architecture: Fine-tuned
microsoft/codebert-base
- Task: Binary classification (
good
vsbad
) - Input: Full Dockerfile content as plain text
- Output:
[prob_good, prob_bad]
β softmax scores - Max input length: 512 tokens
π Training Details
- Data source: Real-world and synthetic Dockerfiles
- Labels: Based on Hadolint top 30 rules
- Bad examples: At least one rule violated
- Good examples: Fully clean files
- Dataset balance: 15000 BAD / 1500 GOOD (clean)
π§ͺ Evaluation Results
Evaluation on a held-out test set of 1,650 Dockerfiles:
Class | Precision | Recall | F1-score | Support |
---|---|---|---|---|
good | 0.96 | 0.91 | 0.93 | 150 |
bad | 0.99 | 1.00 | 0.99 | 1500 |
Accuracy | 0.99 | 1650 |
π Quick Start
π§ͺ Step 1 β Create test script
Save this as test_binary_predict.py
:
import sys
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
from pathlib import Path
path = Path(sys.argv[1])
text = path.read_text(encoding="utf-8")
tokenizer = AutoTokenizer.from_pretrained("LeeSek/binary-dockerfile-model")
model = AutoModelForSequenceClassification.from_pretrained("LeeSek/binary-dockerfile-model")
model.eval()
inputs = tokenizer(text, return_tensors="pt", padding="max_length", truncation=True, max_length=512)
with torch.no_grad():
logits = model(**inputs).logits
probs = torch.nn.functional.softmax(logits, dim=1).squeeze()
label = "GOOD" if torch.argmax(probs).item() == 0 else "BAD"
print(f"Prediction: {label} β Probabilities: good={probs[0]:.3f}, bad={probs[1]:.3f}")
π Step 2 β Create good and bad Dockerfile
Good:
FROM node:18
WORKDIR /app
COPY . .
RUN npm install
CMD ["node", "index.js"]
Bad:
FROM ubuntu:latest
RUN apt-get install python3
ADD . /app
WORKDIR /app
RUN pip install flask
CMD python3 app.py
βΆοΈ Step 3 β Run the prediction
python test_binary_predict.py Dockerfile
Expected output:
Prediction: GOOD β Probabilities: good=0.998, bad=0.002
π Extras
The full training and evaluation pipeline β including data preparation, training, validation, prediction β is available in the scripts/
folder.
π¬ Note: Scripts are written with Polish comments and variable names for clarity during local development. Logic is fully portable.
π License
MIT
π Credits
- Model powered by Hugging Face Transformers
- Tokenizer: CodeBERT
- Rule definitions: Hadolint
- Downloads last month
- 98
Inference Providers
NEW
This model isn't deployed by any Inference Provider.
π
Ask for provider support