GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

So verwenden Sie Dockerfile ONBUILD zum Ausführen von Triggern auf Downstream-Builds

ONBUILD von Docker Anweisung können Sie Trigger innerhalb eines Bildes einrichten. Ihre Trigger werden später ausgeführt, wenn das Bild als Basis für ein anderes verwendet wird. Sie werden Teil des neuen Downstream-Image-Kontexts und sind keine Dateisystemschichten in Ihrem anfänglichen docker build .

Hinzufügen von ONBUILD-Triggern

ONBUILD ist eine Anweisung, die Sie in Ihre Dockerfiles schreiben. Es ist einzigartig, da es andere akzeptiert Anweisung als Argument. Sie können einen beliebigen Dockerfile-Vorgang angeben, z. B. COPY oder RUN , und lassen Sie es während eines Downstream-Image-Builds ausführen.

ONBUILD RUN example-command

Dieses Beispiel führt example-command aus im untergeordneten Image zum Zeitpunkt der Erstellung. Hier ist ein weiterer Fall, in dem eine Datei aus dem Build-Kontext des Downstream-Images in das Dateisystem kopiert wird:

ONBUILD COPY assets.json /app/assets.json

ONBUILD Anweisungen haben keinerlei Auswirkung auf das Image, das von der Docker-Datei erzeugt wird, in der sie definiert sind. Das Erstellen der obigen Docker-Datei würde nicht Führen Sie example-command aus oder binden Sie assets.json ein im Bild:

# Does not include the extra instructions
docker build -t base-image:latest .

Die Trigger werden verwendet, wenn Sie eine weitere Docker-Datei schreiben, die die erste als Basis verwendet:

FROM base-image:latest
RUN my-binary
docker build -t downstream-image:latest .

Beim Erstellen dieser Docker-Datei wird example-command ausgeführt , kopieren Sie assets.json hinein , und führen Sie schließlich my-binary aus . Der ONBUILD Trigger werden immer zuerst ausgeführt, unmittelbar nach dem FROM Anweisung im Downstream-Dockerfile.

Wie erkennt Docker Trigger?

ONBUILD wirkt sich nicht auf das Dateisystem des Basiscontainers aus, aber Docker weiß immer noch, dass Trigger vorhanden sind, wenn Sie ein Downstream-Image erstellen. Der Erstellungsprozess verfolgt ONBUILD Anweisungen, die es findet und in den Metadaten des Bildes aufzeichnet.

Docker untersucht die Metadaten der Bilder, auf die in einem FROM verwiesen wird Anweisung. Wenn das benannte Image Trigger in seinen Metadaten enthält, werden diese Trigger-Anweisungen effektiv an den Anfang der Downstream-Dockerfile eingefügt, bevor der Build beginnt.

Trigger werden tatsächlich als Teil des FROM des Builds ausgeführt Bühne. Sie werden in der Reihenfolge ausgeführt, in der sie in das Upstream-Dockerfile geschrieben wurden. Wenn ein ONBUILD Anweisung fehlschlägt, bricht Docker den Build ab und es sieht aus wie FROM Bühne war die Ursache.

Einschränkungen

Sie können jede Dockerfile-Anweisung als Argument für ein ONBUILD verwenden Trigger mit drei Ausnahmen:

  • ONBUILD FROM – Dies ist nicht zulässig, da es das für den Build verwendete Basis-Image überschreiben würde. Jedes Dockerfile muss von einer einzigen Basis erben.
  • ONBUILD MAINTAINER – Der MAINTAINER Anweisung ist veraltet und sollte nicht verwendet werden; Angaben zur Urheberschaft werden am besten als Label geliefert. Das LABEL Anweisung ist kompatibel mit ONBUILD .
  • ONBUILD ONBUILD – Verkettung von ONBUILD Anweisungen werden nicht unterstützt. Alle Trigger werden im Image unmittelbar nach Ihrem Dockerfile ausgeführt. Sie können keine Trigger definieren, die in „Enkel“-Images zwei oder mehr Ebenen unterhalb der definierenden Dockerfile ausgeführt werden sollen.

Alle Befehle sind genauso definiert wie ihre reguläre Verwendung. Schreiben Sie einen gewöhnlichen Schritt in Ihr Dockerfile und stellen Sie ihm dann ONBUILD voran , verschiebt es aus dem normalen Build-Flow und macht es stattdessen zu einem Downstream-Build-Trigger.

Wann sind ONBUILD-Trigger nützlich?

ONBUILD wird am häufigsten in Utility-Images verwendet, die Aufgaben wie die Codekompilierung automatisieren. Diese Art von Verfahren erfordert im Allgemeinen die Ausführung mehrerer Schritte in einer bestimmten Reihenfolge, wobei Abhängigkeiten wie Ihr Quellcode an einer bestimmten Stelle hinzugefügt werden.

Stellen Sie sich ein Kompilierungs-Image vor, das in einem Verzeichnis nach Quellcode sucht und dann einen Befehl ausführt, um es zu erstellen. Sie können nicht einfach COPY und RUN innerhalb des Dockerfiles dieses Bildes, da die Quelle des Endbenutzers nicht in Ihrem existieren würde Build-Kontext des Bildes.

Verwenden von ONBUILD können Sie eine Boilerplate Dockerfile bereitstellen, die Ihre Benutzer erweitern und docker build können ohne gemeinsame Funktionalität neu zu erfinden:

ENV BUILD_ENV=production
RUN init-build.sh

ONBUILD COPY /src /build
ONBUILD RUN compile.sh --destination=/bin

Dieses Beispiel zeigt, wie ein Builder-Image eine vorkonfigurierte Kompilierungsumgebung bereitstellen könnte. Bei Verwendung als Basisimage wird Code automatisch aus dem nachgelagerten Buildkontext kompiliert. Dieses Bild könnte mit der kompilierten Ausgabe in /bin interagieren innerhalb seiner eigenen Dockerfile-Stufen.

Zusammenfassung

ONBUILD Anweisungen in Dockerfiles geben Ihnen die Möglichkeit, Trigger als Teil eines Downstream-Builds auszuführen. Sie können jede andere Dockerfile-Anweisung als ONBUILD verwenden Trigger, abgesehen von einigen Einschränkungen.

Verwenden von ONBUILD können Sie generische Docker-Images bereitstellen, die wiederverwendbare Sätze von Funktionen definieren. Dies ist effizienter, als Benutzer den Text von Beispiel-Dockerfiles wörtlich kopieren zu lassen und dann ihre eigenen Anweisungen unten hinzuzufügen. Sie können das Basis-Image immer noch ändern und aktualisieren, ohne dass Ihre Benutzer etwas unternehmen müssen.

Annahme von ONBUILD reduziert Wiederholungen und erleichtert erweiterbare Docker-Basisimages. ONBUILD Anweisungen sind eine Überlegung wert, wenn Sie ein Boilerplate-Dockerfile erstellen, das von Endbenutzern angepasst werden muss, bevor die endgültige Containerumgebung als vollständig angesehen wird.


Docker
  1. Wie verwende ich Lightdm für benutzerdefinierte Sitzungen?

  2. So verwenden Sie Docker-Images, Container und Dockerfiles im Detail

  3. So verwenden Sie Docker Compose

  4. So verwenden Sie ein Dockerfile zum Erstellen eines Docker-Images

  5. So verwenden Sie mogrify, um ein Bild zuzuschneiden

So verwenden Sie Eye of Gnome Image Viewer in Ubuntu

So verwenden Sie Hadolint, um Ihre Dockerfiles zu linten

So verwenden Sie Docker:Bild speichern und zum Teilen exportieren

So verwenden Sie Docker Commit zum Ändern von Container-Images

So erstellen Sie ein benutzerdefiniertes Docker-Image mit Dockerfile

So verwenden Sie Virtualbox-VMs auf KVM in einem Linux-System