Agence web » Actualités du digital » Comprendre la «dernière» balise de Docker –

Comprendre la «dernière» balise de Docker –

Les balises Docker sont utilisées pour identifier les images par leur nom. Chaque image peut avoir plusieurs balises attribuées. Les balises ressemblent à my-image:latest, avec la partie avant les deux-points définissant le nom de l’image et la dernière section spécifiant la version.

Vous pouvez marquer une image sans rien après les deux points. Votre image sera automatiquement donnée latest comme balise de version. C’est une source courante de confusion pour les nouveaux arrivants dans Docker.

Les problèmes avec la dernière

La sémantique du latest étiqueter sembler suggérer une signification particulière au-delà de ce qui existe réellement. En réalité, latest est utilisé comme balise par défaut lorsque vous n’avez rien spécifié d’autre. C’est le seul heure à laquelle il sera utilisé – il ne fait pas automatiquement référence au plus récent l’image que vous avez construite.

Voici un exemple du problème résultant:

# Creates my-image:latest (first image)
docker build -t my-image

# Updates my-image:latest (second image)
docker build -t my-image:latest

# Creates my-image:v1 (third image)
docker build -t my-image:v1

Si vous avez couru maintenant docker run my-image:latest, vous utiliseriez le deuxième image à construire. le v1 la balise est complètement indépendante de latest, donc la construction de la troisième image n’a aucun effet sur les deux existantes. Si tu voulais my-image:v1 devenir aussi le latest image, vous devez la baliser manuellement et la pousser dans une opération distincte.

Cela crée beaucoup de confusion au sein de l’écosystème Docker. De nombreux créateurs d’images fais étiqueter leurs dernières versions avec latest. Cela confère à la balise une importance supplémentaire que Docker n’avait pas prévue. D’autres auteurs utilisent latest pour leurs builds de développement, alors que certains ne publieront pas de latest tag du tout.

Le manque de cohérence entre les auteurs d’images peut faire en sorte qu’il ne soit pas clair si latest est vraiment la dernière image ou non. La règle la plus importante de latest est de ne jamais faire d’hypothèses sur la manière dont une image particulière utilisera la balise.

Évitez d’épingler à la dernière

Vous ne devriez pas consommer le latest balise d’une image chaque fois qu’une alternative plus spécifique est disponible. À moins que vous connaître l’auteur de l’image met activement à jour le latest tag, l’épinglage contre celui-ci peut ne pas fournir la version attendue.

La plupart des images utilisent le contrôle de version sémantique pour créer des balises de version. C’est beaucoup plus sûr à consommer my-image:1.1 que my-image:latest. Si l’auteur ne maintient pas latest, vous pourriez vous retrouver avec une image très obsolète. À l’inverse, les auteurs qui fais maintenir latest utilisent souvent la balise pour leur version de développement de pointe. L’épinglage contre celui-ci est susceptible d’apporter des changements de rupture réguliers dont vous ne serez pas averti.

Plusieurs projets d’écosystèmes de conteneurs mettent désormais en garde contre l’utilisation latest Pour cette raison. Kubernetes note que l’utilisation latest est non seulement imprévisible, mais il est également plus difficile pour vous d’identifier le réel version de l’image utilisée par vos conteneurs.

Restauration d’un conteneur déployé avec latest n’est pas directement possible. Vous n’avez aucun point de référence avec lequel travailler. Modification d’une étiquette d’image de 1.1.0 à 2.1.0 vous permet de revenir facilement à la mise à niveau si vous en avez besoin. Les outils d’orchestration de conteneurs ne peuvent pas vous aider à changer «le nouveau latest image « de retour dans » l’ancien latest image ».

Immutabilité

Plus fondamentalement, une bonne pratique de balisage impose que les balises d’image soient immuables. Une fois qu’une balise a été attribuée, cette balise ne doit pas être réutilisée par la même image. Cela permet aux consommateurs en aval de se comparer à des versions spécifiques, en sachant qu’ils obtiendront la même image à chaque fois.

latest rompt ce système en étant intrinsèquement mutable. Si tu utilises latest, vous devez accepter le changement. En tant qu’auteur d’image, il sera plus difficile pour les utilisateurs de référencer votre image en toute confiance si vous publiez uniquement avec le latest étiqueter.

De nombreux outils émettent des hypothèses sur la manière dont les balises d’image sont utilisées. latest reçoit souvent un traitement spécial dont vous devez rester conscient. Kubernetes, par exemple, toujours essayez de tirer une version plus récente du latest balise, même si elle existe déjà localement. Les autres balises ne sont extraites que si elles n’existent pas déjà dans le cluster.

Meilleures approches du marquage

Essayez de vous en tenir à la gestion des versions sémantique lorsque vous marquez des images qui seront accessibles au public. Il s’agit d’une norme largement comprise qui aide à communiquer l’ampleur de chaque changement que vous apportez à votre image.

Vous avez plus d’options lors de la création d’images à usage privé. Les images qui sont construites par un serveur CI peuvent souvent être balisées avec le SHA du commit qui a exécuté le pipeline. Cela garantit que chaque pipeline crée une balise unique qui ne sera pas écrasée à l’avenir. Il vous aide également à faire correspondre les images de votre registre de conteneurs aux modifications de la base de code qui les ont créées.

Enfin, ne réfléchissez pas trop latest étiqueter. Vous n’avez pas besoin de le mettre à jour avec la «dernière» version de votre image. Il est souvent préférable de l’ignorer complètement – à moins que vous ne couriez docker build sans nom de tag, il ne sera jamais créé. Si vous publiez un latest tag, assurez-vous d’indiquer à quoi il fera référence.

Résumé

L’apparente simplicité de Docker latest tag masque un bourbier de problèmes possibles. Vous les rencontrerez à la fois en tant qu’auteur d’image et en tant que consommateur. Les problèmes proviennent de l’incohérence sémantique de la balise: bien qu’elle semble dynamique, ce n’est rien de plus qu’une balise statique attribuée par Docker en l’absence d’une valeur fournie par l’utilisateur.

Dans la mesure du possible, vous devez épingler des versions d’images spécifiques. Cela vous aidera à éviter les modifications importantes et les comportements ambigus des outils tiers. En tant qu’auteur d’images, essayez de fournir des versions sémantiques et expliquez clairement comment votre projet traite latest. Cela aidera les utilisateurs potentiels à évaluer comment référencer votre image.

★★★★★