virli/tutorial/dockerfiles/others.md

2.9 KiB

D'autres méthodes pour créer des images

Les images utilisées par Docker pour lancer les conteneurs répondent avant tout aux spécifications OCI. Le format étant standard, il est normal que d'autres outils puissent utiliser, mais aussi créer des images.

Changer la syntaxe de nos Dockerfile

Parfois on peut se sentir un peu frustré par la syntaxe des Dockerfile ou par son manque d'évolutivité. Avec BuildKit, il est possible de préciser un parseur à utiliser pour l'évaluation de la syntaxe du Dockerfile. Les parseurs (frontend dans la documentation anglaise) sont des images Docker : on indique leur nom dans un commentaire au tout début du fichier :

```dockerfile # syntax=docker/dockerfile:1.4 FROM ubuntu RUN apt-get update && apt-get install gimp ```

La possibilité d'avoir plusieurs implémentations de Dockerfile apporte pas mal d'avantages :

  • La version de l'image frontend est systématiquement comparée en ligne au début du parsing du Dockerfile, ce qui assure la récupération des derniers correctifs/versions, sans nécessiter une mise à jour du daemon Docker.
  • On s'assure que chaque développeur/utilisateur utilise la même implémentation, avec la même version.
  • L'évolution de la syntaxe peut être plus souple car elle ne dépend plus de la version de Docker installée, mais de la version déclarée dans le Dockerfile.
  • On peut même créer de nouvelles syntaxes facilement.

Les images de parseur sont chargées, à partir d'un fichier lisible et compréhensible par un humain, de créer une représentation intermédiaire (LLB). Cette représentation intermédiaire se compose d'une liste d'opérations basiques (ExecOp, CacheOp, SecretOp, SourceOp, CopyOp, ...).

N'hésitez pas à jeter un œil aux autres langages de Dockerfile existants, notamment :

  • Gockerfile : bien que dépassé faute de mise à jour, cette implémentation est très simple à comprendre : elle a pour but de créer une image contenant un unique binaire Go, à partir du nom de son dépôt.
  • hlb : une syntaxe prometteuse, plus proche pour les développeurs.
  • Earthly : qui tend à regrouper Makefile, Dockerfile, et autres scripts de CI et de tests.

Des images sans Docker

Il est aussi possible de se passer complètement de Docker. La plupart des outils qui sont capables de générer des images de machines virtuelles, sont aussi capables de générer des images Docker. Citons notamment :