Comment mettre à jour les conteneurs Docker pour appliquer les mises à jour des images ?

Si vous vous demandez comment mettre à jour les conteneurs Docker pour appliquer des mises à jour des images, vous trouverez dans le guide que nous avons préparé pour vous toutes les informations nécessaires à une meilleure expérience de mise à niveau.

Comme vous le savez peut-être déjà, les conteneurs Docker sont conçus pour être jetables et facilement remplaçables. Lorsque vous publiez une nouvelle version de l’image de base d’un conteneur, vous devez extraire la nouvelle image et démarrer une nouvelle instance de conteneur.

Voici comment vous pouvez gérer les mises à jour d’images sur l’ensemble de votre parc de conteneurs.

Comment mettre à jour les conteneurs Docker pour appliquer les mises à jour des images

Comment extraire de nouvelles images

La façon la plus simple d’appliquer une mise à jour d’image consiste à extraire la nouvelle image, à détruire les conteneurs en cours d’exécution basés sur la version précédente, puis à démarrer les nouveaux conteneurs.

Voici un exemple de conteneur utilisant l’image :nginx:latest.

# Pull new image
docker pull nginx:latest
# Delete old container by name
docker rm example-nginx
# Start a new container
docker run -d -p 80:80 –name example-nginx nginx:latest

Il est important de noter que Docker ne dispose d’aucun moyen intégré pour détecter les mises à jour des images et remplacer les conteneurs en cours d’exécution. Le résultat est un processus de remplacement manuel alambiqué. Il est possible de simplifier par le biais de Docker Compose pour pouvoir démarrer les conteneurs au lieu de la simple commande .docker run.

Quel est le statut des conteneurs par Docker Compose ?

Docker Compose vous permet de créer des représentations déclaratives de piles de conteneurs via un fichier. La pile commence par «,» en utilisant la configuration contenue dans le fichier. Cela permet de remplacer la très longue liste de drapeaux habituellement donnés à «.docker-compose.ymldocker-compose updocker run».

De plus, Docker Compose dispose d’une commande intégrée qui se charge de récupérer les versions mises à jour de toutes les images de la pile. Il s’agit toujours d’une procédure en deux étapes, car elle doit être relancée manuellement après l’exécution de .pulldocker-compose up.

# Pull all images in the stack
docker-compose pull
# Restart the stack
# If a new image version has been pulled, containers
# using the old tag will be replaced with new instances.
docker-compose up -d

Docker Compose se charge en fait de fournir une expérience beaucoup plus simple et mémorable où vous n’avez pas besoin de taper les noms des images ou de vous souvenir des drapeaux que vous avez passés. Les deux commandes peuvent être raccourcies assez facilement en un seul alias shell : Docker run.

alias composePullUp=»docker-compose pull && docker-compose up -d»

Comment faire la gestion des balises d’image ?

Vous devez référencer la bonne balise lorsque vous tirez des images manuellement. Docker Compose s’en charge pour nous, en sélectionnant les balises qui ont été spécifiées dans votre fichier .docker-compose.yml.

De cette façon, il se charge d’extraire la version d’une balise, ce qui ne revient pas nécessairement à utiliser la dernière version de l’image. Si vous souhaitez utiliser la dernière version du logiciel à l’intérieur du conteneur, vous devez prêter attention aux pratiques de marquage de l’auteur de l’image.

Par exemple, vous pouvez extraire la nouvelle version du patch Node.js 14, qui se chargera de livrer la version la plus récente de Node.j. Si un conteneur plus ancien utilise cette image, le processus d’extraction et de remplacement déclenchera un changement de version majeur pour le binaire Node dans le conteneur .node : 14node : latest.

Reconstruire les images

Jusqu’à ce point de l’article, nous avons déjà expliqué comment gérer des conteneurs à partir d’images provenant directement de Docker Hub ou d’un autre registre. Les images que vous construisez doivent être reconstruites lorsque l’image de base change.

La première chose à faire est de reconstruire l’image :

docker build –pull -t my-image:latest .

Luego, tienes que reemplazar los contenedores:

# Delete old container by name
docker rm my-container
# Start a new container
docker run -d –name my-container my-image:latest

L’indicateur dad a Docker est chargé d’indiquer à Docker d’extraire l’image référencée par son «. Sans ce drapeau, Docker réutilisera la référence de l’étiquette qui existe si l’image est déjà présente sur le système : .–pulldocker buildDockerfile

Les utilisateurs de Docker Compose ont la possibilité d’obtenir les mêmes résultats avec les commandes correspondantes : docker-compose

docker-compose build –pull
docker-compose up -d

Composer propose à nouveau un processus plus simple, bien qu’il se déroule en deux étapes. Vous avez la possibilité d’oublier des noms d’images et des balises spécifiques, plutôt que de compter sur Compose pour extraire les images de base modifiées, reconstruire les couches par-dessus, puis recréer les conteneurs.

Qu’est-ce que le logiciel dans les conteneurs ?

Il peut parfois être tentant de mettre à jour manuellement les logiciels de vos conteneurs. En fait, il est recommandé d’éviter cela, car cela revient aux principes de Docker.

La vérité est que l’exécution d’une planification (ou des contreparties du gestionnaire de paquets) est une pratique standard lors de l’administration d’un serveur Linux. Ces commandes ne sont généralement pas exécutées à l’intérieur d’un conteneur Docker, bien qu’elles puissent être incluses dans le cadre de l’obtention des derniers correctifs de sécurité lors de la compilation de l’image : .apt-get update && apt get upgrade -yDockerfile.

Il est préférable de retirer périodiquement l’image de base et de recréer vos conteneurs afin de les maintenir à jour. Cela vous permettra d’obtenir tous les correctifs de sécurité et réduira la durée de vie des conteneurs individuels. Les environnements de conteneurs ne sont pas censés être modifiés après la création d’une instance ; les modifications du système de fichiers doivent être limitées aux écritures dans les chemins temporaires et les volumes Docker dédiés qui survivent au conteneur.

Automatiser les mises à jour des conteneurs

Vous pouvez automatiser le processus de vérification des balises d’image mises à jour et le redémarrage des conteneurs via des projets tiers. Dans ce cas, Watchtower est une option assez populaire qui se charge de surveiller les conteneurs en cours d’exécution et de les repackager lorsque l’image Docker Hub est modifiée.

Watchover lui-même est déployé comme un conteneur :
docker run -d -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower

Maintenant, vous avez Watchtower installé et en cours d’exécution. Le Docker Socket de votre hôte est monté sur le conteneur Watchtower, qui vous permet d’exécuter des commandes Docker afin de créer et de supprimer des conteneurs.

En outre, Watchtower détectera automatiquement les nouvelles versions d’images dans Docker Hub, les apportera à la machine et remplacera les conteneurs par l’image. Les conteneurs existants seront fermés et de nouveaux conteneurs identiques seront créés à leur place. Les drapeaux que vous lui avez donnés seront fournis aux conteneurs .docker run de remplacement.

Il est important de noter que Watchtower ne fonctionne par défaut qu’avec Docker Hub. Il peut être utilisé avec des registres d’images privés, en se chargeant de fournir les informations d’identification dans un fichier de configuration.

Vous pouvez créer un fichier JSON à l’aide de la commande suivante :

{
    «auths»: {
        «example.com»: {
            «auth»: «credentials»
        }
    }
}

Vous devez le remplacer en utilisant le chemin d’accès à votre registre .example.com.

Ensuite, vous devrez générer une chaîne d’informations d’identification à partir du nom d’utilisateur et du mot de passe que vous avez dans le registre :

echo -n ‘username:password’ | base64

Vous devrez verser la chaîne encodée en Base64 qui en résulte dans le fichier de configuration, en remplaçant le texte de remplacement : .credentials.

Il ne vous reste plus qu’à monter le fichier de configuration dans votre conteneur Watchtower afin de lui permettre d’accéder au registre :

docker run -d
   -v config.json:/config.json
   -v /var/run/docker.sock:/var/run/docker.sock
    containrrr/watchtower

Conclusion

Comment mettre à jour les conteneurs Docker ? Nous devons absolument noter que Docker ne dispose pas d’un mécanisme permettant de détecter et d’appliquer les mises à jour des images en amont aux conteneurs en cours d’exécution. Vous pouvez utiliser les commandes Docker CLI en séquence, en tant qu’abstraction de haut niveau, ou un outil tiers tel que Watchtower pour pouvoir remplacer les conteneurs lorsque de nouvelles versions des images .docker-compose sont publiées.

Selon les circonstances, vous ne ressentirez peut-être pas du tout le besoin de mettre à jour les conteneurs de cette manière. Si votre équipe utilise des pipelines CI pour créer une image Docker à chaque livraison, il se peut que vous produisiez et déployiez déjà des images mises à jour plusieurs fois par jour. Dans ces scénarios, vous devrez vous assurer que vous utilisez l’indicateur avec le mode des correctifs amont qui sont inclus dans vos images de construction –pulldocker.

Vous savez maintenant comment mettre à jour des conteneurs Docker pour appliquer des mises à jour d’images. Vous ne devriez donc pas avoir beaucoup de questions sur la façon d’obtenir la meilleure expérience possible lorsque vous effectuez ces processus.