forked from quentin/quentin.dufour.io
Update Article “2023-04-11-fabriquer-des-conteneurs-légers-depuis-une-ci-cd”
This commit is contained in:
parent
0485295b55
commit
8bd287adf3
1 changed files with 12 additions and 19 deletions
|
@ -88,38 +88,31 @@ Dans le monde des conteneurs, une image multiarch est juste une indirection, un
|
|||
|
||||
_Problème : aujourd'hui il n'y a pas vraiment d'outils clé en main. Typiquement,_ [_une issue sur skopeo_](https://github.com/containers/skopeo/issues/1136) _traine depuis 3 ans maintenant (2020) sans qu'elle n'ait jamais été résolue. On va essayer de bidouiller un truc de notre côté._
|
||||
|
||||
On va extraire chacun de ces fichiers sous le format `directory` de skopeo, qui est un format non stardisé.
|
||||
On va extraire chacun de ces fichiers sous forme de dossier avec skopeo.
|
||||
|
||||
_La spécification OCI définit un format d'image sous forme de dossier avec_ [_une spécification en bonne et due forme_](https://github.com/opencontainers/image-spec/blob/main/image-layout.md)_. Cette spécification organise les fichiers différement de skopeo. Dans un monde idéal, il faudrait utiliser ce format qui n'a pas l'air très différent, mais je ne le connais pas et n'ai pas le temps de l'explorer._
|
||||
_Il y a deux façons de représenter des images de conteneur sous forme de dossier avec skopeo : via le transport_ `_dir_` _et le transport_ `_oci_`_. Le premier est un format interne non spécifié à skopeo. Le second est standardisé et a donc_ [_une spécification en bonne et due forme_](https://github.com/opencontainers/image-spec/blob/main/image-layout.md)_. Nous, on va préférer utiliser un standard pour éviter les mauvaises surprises à l'avenir (changement de format, abandon du support, interopérabilité, etc.)._
|
||||
|
||||
```bash
|
||||
mkdir -p /tmp/albatros
|
||||
skopeo --insecure-policy copy docker-archive:albatros.amd64.tar.gz oci:/tmp/albatros/amd64
|
||||
skopeo --insecure-policy copy docker-archive:albatros.arm64.tar.gz ocui:/tmp/albatros/arm64
|
||||
skopeo --insecure-policy copy docker-archive:albatros.arm.tar.gz dir:/tmp/albatros/arm
|
||||
skopeo --insecure-policy copy docker-archive:albatros.386.tar.gz dir:/tmp/albatros/386
|
||||
mkdir -p /tmp/oci
|
||||
skopeo --insecure-policy copy docker-archive:albatros.amd64.tar.gz oci:/tmp/oci/amd64
|
||||
skopeo --insecure-policy copy docker-archive:albatros.arm64.tar.gz oci:/tmp/oci/arm64
|
||||
skopeo --insecure-policy copy docker-archive:albatros.arm.tar.gz oci:/tmp/oci/arm
|
||||
skopeo --insecure-policy copy docker-archive:albatros.386.tar.gz oci:/tmp/oci/386
|
||||
```
|
||||
|
||||
On va ensuite construire à la main le dossier multiarch :
|
||||
|
||||
```bash
|
||||
mkdir -p /tmp/albatros/multi
|
||||
remkdir -p /tmp/oci/multi
|
||||
|
||||
# on copie juste le fichier qui déclare la version de la spec "directory" de OCI
|
||||
cp /tmp/albatros/amd64/version /tmp/albatros/multi/
|
||||
cp /tmp/oci/amd64/oci-layout /tmp/oci/multi/
|
||||
|
||||
# on copie les blobs
|
||||
for f in $(find /tmp/albatros/{amd64,386,arm,arm64} -type f -regextype sed -regex '.*[a-f0-9]\{64\}'); do
|
||||
cp $f /tmp/albatros/multi/
|
||||
done
|
||||
|
||||
# on calcule le sha256 des manifests respectifs
|
||||
sha256sum $(find /tmp/albatros/{amd64,386,arm,arm64} -type f -name manifest.json)
|
||||
# e17bf961fd9f6e6272475451589b01f2a1f4f74a44e9e6f24f767a21270825ae /tmp/albatros/amd64/manifest.json
|
||||
# ccff0bd116d6e463f888d8fbddbbe75eb81b795caf6fd8779ce6c900abc2e455 /tmp/albatros/386/manifest.json
|
||||
# 77dfc6112d751267df4e0de231a8f4eafb0927c93021428e7a725d171ed4ccb7 /tmp/albatros/arm/manifest.json
|
||||
# 2c6a37c30ff322cb21a1f142d7608666546a495f8f30550f9810a51b9816bf41 /tmp/albatros/arm64/manifest.json
|
||||
mkdir -p /tmp/oci/multi/blobs/sha256/
|
||||
cp -r /tmp/oci/{386,arm,arm64,amd64}/blobs/sha256/* /tmp/oci/multi/blobs/sha256/
|
||||
|
||||
# on cré
|
||||
# on copie ces fichiers dans
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue