Comment fonctionnent les balises Docker ?

0
24

Les images Docker utilisent des registres pour le contrôle de version, comme le Docker Hub qui héberge des images publiques que quiconque peut télécharger et Cours. Cependant, avant de télécharger une image sur le Hub ou tout autre registre, vous devez lui donner les balises appropriées.

Container vs. Image

Il est important de comprendre la différence entre les conteneurs et les images avant de parler de balises, car elles sont souvent utilisées de manière assez interchangeable et cela peut prêter à confusion.

Une image Docker, c'est quoi vous obtenez de l'exécution de docker build avec votre Dockerfile. Il est composé de plusieurs couches pour optimiser l'utilisation du disque et de la mémoire. Une image est en lecture seule.

Un conteneur Docker est une instance d'une image dans laquelle les processus s'exécutent réellement. Il s'agit d'un système de fichiers en lecture/écriture. Par conséquent, une image est un modèle à partir duquel vous pouvez créer plusieurs conteneurs. Il contient le code de base et tout ce dont l'application a besoin pour démarrer. Les conteneurs sont initialisés avec l'image lors de leur création, puis le système de fichiers peut être modifié à leur guise.

Les images sont ce que vous envoyez au registre des conteneurs. Ensuite, sur vos serveurs, vous pouvez référencer l'image dans le registre pour télécharger le conteneur.

Les balises suivent les versions des images construites

Chaque fois que vous exécutez une version Docker, vous créez une nouvelle image avec un identifiant unique, comme “38054d5e8a27.”

Publicité

Les balises sont simplement des étiquettes qui offrent un meilleur moyen de gérer contrôle de version et versions. Ils sont comme des étiquettes que vous pouvez attribuer à n'importe quelle version terminée. Plutôt que de référencer l'ID de build, vous pouvez baliser une image avec une étiquette au format major.minor.patch et être facilement en mesure de déterminer quelle image correspond à laquelle, ou quel que soit le format préféré par votre organisation.

Le marquage est assez facile. Vous pouvez utiliser la balise docker pour le faire après coup, mais il est beaucoup plus facile de le faire lorsque vous créez à l'aide de l'indicateur -t :

docker build -t repository/image:tag .

Cela crée l'image à partir du fichier Docker et la balise avec la balise que vous avez spécifiée. La balise est la partie [:TAG] , après le point-virgule, même si Docker dira “Dépôt/image:tag avec succès.” La partie dépôt/image n'est que le nom de l'image, et si vous prévoyez de la transférer vers un dépôt, vous devez la baliser au format dépôt/image:tag.

Pour Docker Hub , le nom du référentiel est simplement votre nom d'utilisateur, donc la commande ressemblerait à quelque chose comme :

docker build -t anthonyheddings/nginx:tag .

Si vous ne spécifiez pas une balise spécifique, Docker la marque automatiquement comme “la dernière.”

Publicité

Une autre pratique courante consiste à baliser l'image avec l'ID de validation git, liant ainsi le contrôle de version aux images construites. Vous pouvez automatiser cela assez facilement avec git rev-parse:

docker build -t vicerust/core:$(git rev-parse –verify HEAD) .

Une fois qu'une image est balisée, vous pouvez la transférer vers le registre avec docker push, en transmettant le nom du référentiel/de l'image :

docker push repository/image

À partir de là, vous pouvez accédez-y normalement dans docker run. Si vous ne spécifiez pas de balise, docker run utilise automatiquement la dernière version.

Dernier ne signifie pas toujours “Dernier”

La balise “Dernier” est un peu déroutante. Malgré la façon dont le nom sonne, il ne pointe pas toujours vers la dernière version. C'est simplement une balise spéciale qui est attribuée automatiquement chaque fois que vous ne spécifiez pas de balise. Cela a pour effet d'éviter complètement les balises et de simplement pousser un “dernier” version.

Vous pouvez utiliser la dernière balise en ne spécifiant simplement pas de balise spécifique :

docker build -t repository/image .

Ou en marquant manuellement une image comme la dernière :

docker build -t repository/image:latest .

qui fonctionne bien si vous n'utilisez que la dernière balise. Mais si vous souhaitez également utiliser des balises d'identification de version, vous devrez marquer vos images deux fois à chaque fois, ce qui peut conduire à la “dernière” ne signifiant pas toujours la dernière image construite. Il est conseillé d'éviter d'utiliser les dernières avec d'autres balises pour éviter cette confusion. Il suffit de versionner vos balises, à chaque fois, soit avec des numéros de correctifs manuels, soit avec des ID de validation git.