Chapitre 5. En utilisant des stratégies de construction
Les sections suivantes définissent les stratégies de construction principales prises en charge et comment les utiliser.
5.1. Construction de Docker
Le service OpenShift Red Hat sur AWS utilise Buildah pour construire une image conteneur à partir d’un Dockerfile. Consultez la documentation de référence Dockerfile pour plus d’informations sur les images de conteneurs de construction avec Dockerfile.
Lorsque vous définissez les arguments de construction Docker à l’aide du tableau buildArgs, voir Comprendre comment ARG et FROM interagissent dans la documentation de référence Dockerfile.
5.1.1. Le remplacement de l’image Dockerfile FROM
Il est possible de remplacer l’instruction FROM du Dockerfile par les paramètres de l’objet BuildConfig. Lorsque le Dockerfile utilise des builds multi-étapes, l’image de la dernière instruction FROM sera remplacée.
Procédure
Afin de remplacer l’instruction FROM du Dockerfile par les paramètres de l’objet BuildConfig, ajoutez les paramètres suivants à l’objet BuildConfig:
strategy: dockerStrategy: from: kind: "ImageStreamTag" name: "debian:latest"
strategy: dockerStrategy: from: kind: "ImageStreamTag" name: "debian:latest"
Copy to Clipboard Copied!
5.1.2. En utilisant le chemin Dockerfile
Docker builds utilise un Dockerfile situé à la racine du contexte spécifié dans le champ BuildConfig.spec.source.contextDir.
Le champ dockerfilePath permet à la construction d’utiliser un chemin différent pour localiser votre Dockerfile, par rapport au champ BuildConfig.spec.source.contextDir. Il peut s’agir d’un nom de fichier différent du Dockerfile par défaut, tel que MyDockerfile, ou d’un chemin vers un Dockerfile dans un sous-répertoire, tel que dockerfiles/app1/Dockerfile.
Procédure
Définissez le champ dockerfilePath pour que la construction utilise un chemin différent pour localiser votre Dockerfile:
strategy: dockerStrategy: dockerfilePath: dockerfiles/app1/Dockerfile
strategy: dockerStrategy: dockerfilePath: dockerfiles/app1/Dockerfile
Copy to Clipboard Copied!
5.1.3. En utilisant des variables d’environnement docker
Afin de rendre les variables d’environnement disponibles pour le processus de construction docker et l’image résultante, vous pouvez ajouter des variables d’environnement à la définition de dockerStrategy de la configuration de construction.
Les variables d’environnement définies là sont insérées comme une seule instruction ENV Dockerfile juste après l’instruction FROM, de sorte qu’elle puisse être référencée plus tard dans le Dockerfile.
Les variables sont définies pendant la construction et restent dans l’image de sortie, elles seront donc présentes dans n’importe quel conteneur qui exécute cette image aussi bien.
À titre d’exemple, définir un proxy HTTP personnalisé à utiliser pendant la construction et l’exécution:
dockerStrategy: ... env: - name: "HTTP_PROXY" value: "http://myproxy.net:5187/"
dockerStrategy:
...
env:
- name: "HTTP_PROXY"
value: "http://myproxy.net:5187/"
Il est également possible de gérer les variables d’environnement définies dans la configuration de build avec la commande oc set env.
5.1.4. Ajout d’arguments de construction Docker
Il est possible de définir les arguments Docker build à l’aide du tableau buildArgs. Les arguments de construction sont transmis à Docker lorsqu’une build est lancée.
Découvrez comment ARG et FROM interagissent dans la documentation de référence Dockerfile.
Procédure
Afin de définir les arguments de construction Docker, ajoutez des entrées au tableau buildArgs, qui se trouve dans la définition dockerStrategy de l’objet BuildConfig. À titre d’exemple:
dockerStrategy: ... buildArgs: - name: "version" value: "latest"
dockerStrategy: ... buildArgs: - name: "version" value: "latest"
Copy to Clipboard Copied! NoteLes champs nom et valeur sont pris en charge. Les paramètres sur le champ valueFrom sont ignorés.
5.1.5. Couches d’écaillement avec docker builds
Docker crée normalement un calque représentant chaque instruction dans un Dockerfile. Définir l’imageOptimizationPolicy sur SkipLayers fusionne toutes les instructions en un seul calque au-dessus de l’image de base.
Procédure
Définir l’imageOptimizationPolicy sur SkipLayers:
strategy: dockerStrategy: imageOptimizationPolicy: SkipLayers
strategy: dockerStrategy: imageOptimizationPolicy: SkipLayers
Copy to Clipboard Copied!
5.1.6. En utilisant des volumes de construction
Les volumes de build peuvent être montés pour donner aux builds en cours l’accès à des informations que vous ne voulez pas persister dans l’image du conteneur de sortie.
Les volumes de construction fournissent des informations sensibles, telles que des informations d’identification de référentiel, dont l’environnement de construction ou la configuration n’a besoin qu’au moment de la construction. Les volumes de construction sont différents des entrées de build, dont les données peuvent persister dans l’image du conteneur de sortie.
Les points de montage des volumes de construction, à partir desquels le build en cours d’exécution lit les données, sont fonctionnellement similaires aux montures de volume pod.
Conditions préalables
- Il a ajouté un secret d’entrée, une carte de configuration ou les deux à un objet BuildConfig.
Procédure
Dans la définition dockerStrategy de l’objet BuildConfig, ajoutez n’importe quel volume de build au tableau des volumes. À titre d’exemple:
spec: dockerStrategy: volumes: - name: secret-mvn mounts: - destinationPath: /opt/app-root/src/.ssh source: type: Secret secret: secretName: my-secret - name: settings-mvn mounts: - destinationPath: /opt/app-root/src/.m2 source: type: ConfigMap configMap: name: my-config
spec: dockerStrategy: volumes: - name: secret-mvn
1 mounts: - destinationPath: /opt/app-root/src/.ssh
2 source: type: Secret
3 secret: secretName: my-secret
4 - name: settings-mvn
5 mounts: - destinationPath: /opt/app-root/src/.m2
6 source: type: ConfigMap
7 configMap: name: my-config
8 Copy to Clipboard Copied! - 1 5
- C’est nécessaire. C’est un nom unique.
- 2 6
- C’est nécessaire. Le chemin absolu du point de montage. Il ne doit pas contenir .. ou : et n’entre pas en collision avec le chemin de destination généré par le constructeur. Le /opt/app-root/src est le répertoire d’accueil par défaut pour de nombreuses images compatibles Red Hat S2I.
- 3 7
- C’est nécessaire. Le type de source, ConfigMap, Secret ou CSI.
- 4 8
- C’est nécessaire. Le nom de la source.