Ce face Dockerfile: ONBUILD
ONBUILD este un „declanșator” pentru imagini de bază. Instrucțiunea de după el (de exemplu ONBUILD COPY . /app) nu se execută când construiești imaginea de bază, ci este salvată și rulată automat imediat după linia FROM din Dockerfile-ul care o folosește.
Astfel o echipă poate oferi o imagine de bază („toate serviciile noastre Python se construiesc așa”), iar proiectele scriu doar FROM firma/python-baza. Declanșatoarele se aplică doar copiilor direcți, nu și „nepoților”. Nu sunt permise ONBUILD FROM și ONBUILD ONBUILD. Pentru că pașii ascunși pot surprinde, multe echipe preferă astăzi un Dockerfile explicit sau un șablon.
Parametri
| Parametru | Descriere |
|---|---|
ONBUILD COPY . /app |
Copiază codul proiectului copil la build-ul acestuia. |
ONBUILD RUN comandă |
Rulează o comandă în build-ul imaginii copil. |
docker inspect -f '{{.Config.OnBuild}}' |
Arată declanșatoarele salvate în imagine. |
Exemple
Exemplul 1: Imagine de bază pentru serviciile Python ale echipei
Imaginea firma/python-baza pregătește mediul, iar instalarea dependențelor și copierea codului se fac în proiectul care o folosește.
# firma/python-baza
FROM python:3.13-slim
WORKDIR /app
ONBUILD COPY requirements.txt .
ONBUILD RUN pip install --no-cache-dir -r requirements.txt
ONBUILD COPY . .
CMD ["python", "main.py"]
Exemplul 2: Dockerfile-ul unui serviciu și declanșatoarele salvate
Serviciul de facturare are un Dockerfile de o singură linie; cei trei pași ONBUILD salvați în imaginea de bază rulează la build-ul lui, imediat după FROM.
echo 'FROM firma/python-baza:1.0' > Dockerfile
docker inspect -f '{{json .Config.OnBuild}}' firma/python-baza:1.0
docker build -t facturare .
Ieșire în terminal
["COPY requirements.txt .","RUN pip install --no-cache-dir -r requirements.txt","COPY . ."]
Greșeli frecvente
- Așteptarea ca
ONBUILDsă ruleze la build-ul imaginii de bază: acolo doar se înregistrează. Testează imaginea construind un proiect copil. - Lanțuri de trei niveluri: declanșatoarele nu ajung la „nepoți”. Dacă imaginea B pornește din A și C din B, pașii
ONBUILDdin A rulează doar la build-ul lui B.
Comenzi înrudite
Dockerfile: LABEL: Adaugă metadate cheie-valoare imaginii (versiune, autor, depozit sursă), vizibile cu docker inspect și folosite la filtrare.Dockerfile: SHELL: Schimbă shell-ul folosit de forma „shell” a instrucțiunilor RUN, CMD și ENTRYPOINT (implicit /bin/sh -c pe Linux).