GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Comment utiliser Dockerfile ONBUILD pour exécuter des déclencheurs sur des builds en aval

ONBUILD de Docker L'instruction vous permet de configurer des déclencheurs dans une image. Vos déclencheurs seront exécutés plus tard, lorsque l'image servira de base à une autre. Ils feront partie du nouveau contexte d'image en aval et ne seront pas des couches de système de fichiers dans votre docker build initiale .

Ajout de déclencheurs ONBUILD

ONBUILD est une instruction que vous écrivez dans vos Dockerfiles. Il est unique car il en accepte un autre instruction comme argument. Vous pouvez spécifier n'importe quelle opération Dockerfile, telle que COPY ou RUN , et qu'il soit exécuté lors d'une création d'image en aval.

ONBUILD RUN example-command

Cet exemple exécute example-command dans l'image enfant au moment de sa création. Voici un autre cas où un fichier est copié du contexte de construction de l'image en aval dans le système de fichiers :

ONBUILD COPY assets.json /app/assets.json

ONBUILD les instructions n'ont aucun effet sur l'image produite par le Dockerfile dans lequel elles sont définies. Construire le Dockerfile ci-dessus ne le ferait pas exécutez example-command ou incluez assets.json dans l'image :

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

Les déclencheurs seront utilisés lorsque vous écrivez un autre Dockerfile qui utilise le premier comme base :

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

La construction de ce Dockerfile exécutera example-command , copiez dans assets.json , et enfin exécutez my-binary . Le ONBUILD les déclencheurs sont toujours exécutés en premier, immédiatement après le FROM instruction dans le Dockerfile en aval.

Comment Docker reconnaît-il les déclencheurs ?

ONBUILD n'affecte pas le système de fichiers du conteneur de base, mais Docker sait toujours que des déclencheurs sont présents lorsque vous créez une image en aval. Le processus de génération suit ONBUILD instructions qu'il trouve et les enregistre dans les métadonnées de l'image.

Docker inspecte les métadonnées des images référencées dans un FROM instruction. Si l'image nommée inclut des déclencheurs dans ses métadonnées, ces instructions de déclencheur sont effectivement collées en haut du Dockerfile en aval avant le début de la construction.

Les déclencheurs s'exécutent réellement dans le cadre du FROM de la construction organiser. Ils seront exécutés dans l'ordre dans lequel ils ont été écrits dans le Dockerfile en amont. Si un ONBUILD l'instruction échoue, Docker annulera la construction et cela ressemblera à FROM la scène en était la cause.

Limites

Vous pouvez utiliser n'importe quelle instruction Dockerfile comme argument d'un ONBUILD déclencheur avec trois exceptions :

  • ONBUILD FROM - Ceci n'est pas autorisé car cela remplacerait l'image de base utilisée pour la construction. Chaque Dockerfile doit hériter d'une seule base.
  • ONBUILD MAINTAINER – Le MAINTAINER l'instruction est obsolète et ne doit pas être utilisée ; les informations sur l'auteur sont mieux fournies sous forme d'étiquette. Le LABEL l'instruction est compatible avec ONBUILD .
  • ONBUILD ONBUILD – Chaînage de ONBUILD les instructions ne sont pas prises en charge. Tous les déclencheurs s'exécutent dans l'image immédiatement en aval de votre Dockerfile. Vous ne pouvez pas définir de déclencheurs destinés à s'exécuter dans des images "petites-filles" deux niveaux ou plus en dessous du Dockerfile de définition.

Toutes les instructions sont définies de la même manière que leurs utilisations habituelles. Écrire une étape ordinaire dans votre Dockerfile, puis la préfixer avec ONBUILD , le déplacera hors du flux de compilation normal et en fera un déclencheur de compilation en aval à la place.

Quand les déclencheurs ONBUILD sont-ils utiles ?

ONBUILD est le plus couramment utilisé dans les images utilitaires qui automatisent des tâches telles que la compilation de code. Ce type de procédure nécessite généralement plusieurs étapes à exécuter dans une séquence spécifique, avec des dépendances comme votre code source ajoutées à un moment donné.

Considérez une image de compilation qui recherche le code source dans un répertoire, puis exécute une commande pour le construire. Vous ne pouvez pas simplement COPY et RUN dans le Dockerfile de cette image car la source de l'utilisateur final n'existerait pas dans votre contexte de construction de l'image.

Utilisation de ONBUILD vous permet de fournir un Dockerfile passe-partout que vos utilisateurs peuvent étendre et docker build sans réinventer les fonctionnalités courantes :

ENV BUILD_ENV=production
RUN init-build.sh

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

Cet exemple montre comment une image de générateur peut fournir un environnement de compilation préconfiguré. Lorsqu'il est utilisé comme image de base, le code est automatiquement compilé à partir du contexte de construction en aval. Cette image pourrait interagir avec la sortie compilée dans /bin dans ses propres étapes Dockerfile.

Résumé

ONBUILD Les instructions dans Dockerfiles vous permettent d'exécuter des déclencheurs dans le cadre d'une génération en aval. Vous pouvez utiliser n'importe quelle autre instruction Dockerfile comme ONBUILD déclencheur, à l'exception de quelques limitations.

Utilisation de ONBUILD vous permet de fournir des images Docker génériques qui définissent des ensembles de fonctionnalités réutilisables. C'est plus efficace que de demander aux utilisateurs de copier textuellement le texte de l'exemple Dockerfiles, puis d'ajouter leurs propres instructions en bas. Vous pouvez toujours modifier et mettre à jour l'image de base sans nécessiter d'action de la part de vos utilisateurs.

Adopter ONBUILD réduit les répétitions et facilite les images de base Docker extensibles. ONBUILD Les instructions valent la peine d'être prises en compte lorsque vous créez un fichier Dockerplate standard qui devra être personnalisé par les utilisateurs finaux avant que l'environnement de conteneur final ne soit considéré comme terminé.


Docker
  1. Comment utiliser les images Docker, les conteneurs et les Dockerfiles en profondeur

  2. Comment utiliser Docker Compose

  3. Comment utiliser un Dockerfile pour créer une image Docker

  4. Comment créer une image Docker à partir d'un conteneur et d'un Dockerfile

  5. Comment utiliser mogrify pour recadrer une image

Comment utiliser Eye of Gnome Image Viewer dans Ubuntu

Comment utiliser Hadolint pour pelucher vos fichiers Docker

Comment utiliser Docker Enregistrer l'image et l'exporter pour le partage

Comment utiliser Docker Commit pour modifier les images de conteneur

Comment créer une image Docker personnalisée avec Dockerfile

Comment utiliser les machines virtuelles Virtualbox sur KVM dans le système Linux