2021-09-23 00:55:18 +00:00
|
|
|
|
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
|
2022-09-22 09:38:47 +00:00
|
|
|
|
outils puissent utiliser, mais aussi créer des images.
|
2021-09-23 00:55:18 +00:00
|
|
|
|
|
|
|
|
|
|
2022-09-22 09:38:47 +00:00
|
|
|
|
### Changer la syntaxe de nos `Dockerfile`
|
2021-09-23 00:55:18 +00:00
|
|
|
|
|
|
|
|
|
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
|
2022-09-20 04:02:53 +00:00
|
|
|
|
(*frontend* dans la documentation anglaise) sont des images Docker : on indique
|
|
|
|
|
leur nom dans un commentaire au tout début du fichier :
|
2021-09-23 00:55:18 +00:00
|
|
|
|
|
|
|
|
|
<div lang="en-US">
|
|
|
|
|
```dockerfile
|
2022-09-20 04:02:53 +00:00
|
|
|
|
# syntax=docker/dockerfile:1.4
|
2021-09-23 00:55:18 +00:00
|
|
|
|
FROM ubuntu
|
|
|
|
|
RUN apt-get update && apt-get install gimp
|
|
|
|
|
```
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
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](https://github.com/po3rin/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](https://openllb.github.io/hlb/) : une syntaxe prometteuse, plus proche
|
|
|
|
|
pour les développeurs.
|
|
|
|
|
- [Earthly](https://earthly.dev/) : 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
|
2022-05-12 00:46:31 +00:00
|
|
|
|
aussi capables de générer des images Docker. Citons notamment :
|
2021-09-23 00:55:18 +00:00
|
|
|
|
|
2022-09-20 04:02:53 +00:00
|
|
|
|
- Buildah : <https://github.com/containers/buildah/> (utilisé par `podman`),
|
|
|
|
|
- Buildpacks : <https://buildpacks.io/>,
|
|
|
|
|
- Hashicorp Packer : <https://www.packer.io/docs/builders/docker>,
|
|
|
|
|
- Nix et Guix : <https://nix.dev/tutorials/building-and-running-docker-images>,
|
|
|
|
|
- Kubler : <https://github.com/edannenberg/kubler>,
|
2021-09-23 00:55:18 +00:00
|
|
|
|
- et bien d'autres.
|