GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Comment mettre à jour les images Docker vers la dernière version

Les images Docker sont la base des conteneurs Docker. Les images étant la base, vous êtes-vous déjà demandé comment mettre à jour les conteneurs Docker lorsqu'une nouvelle version d'une image est publiée ?

Ne vous demandez plus! Dans ce didacticiel, vous apprendrez à mettre à jour votre référentiel d'images Docker local et à mettre à jour vos conteneurs vers une nouvelle version sans tout gâcher !

Prérequis

Ce tutoriel sera une démonstration pratique. Si vous souhaitez suivre, assurez-vous d'avoir les éléments suivants :

  • Environnement Linux :le didacticiel utilise Linux (Ubuntu Focal) pour exécuter Docker, mais vous pouvez également appliquer les mêmes étapes générales à Windows ou macOS.
  • Installez le moteur Docker 20.10.8 (Linux) ou Docker Desktop 3.5.2 (macOS et Windows).

Exécuter des images Docker idempotentes

Une image Docker contient tous les logiciels requis pour exécuter l'application qui lui est associée, y compris les packages de système d'exploitation et les dépendances. Docker assemble des images via des instructions dans un fichier appelé Dockerfile , qui contient des instructions d'installation idempotentes.

Une instruction idempotente implique que l'image résultant de l'exécution de l'instruction d'installation aboutira toujours à la même sortie.

L'avantage de construire des images idempotentes est qu'elles sont indépendantes du système :l'image résultante sera toujours la même. L'exécution du conteneur sera également toujours la même, quel que soit l'endroit où l'exécution a lieu.

Une nouvelle version d'image implique généralement quelques améliorations sur les instructions de construction de la base du conteneur Docker, par exemple :

  • Une version plus récente du code source de l'application peut remplacer l'ancienne ;
  • Meilleure gestion des dépendances :moins d'espace requis ou de meilleures performances ;
  • Meilleure sécurité :l'image dispose de correctifs de sécurité pour éviter les vulnérabilités.

Pour tirer les derniers avantages de toute mise à jour des images Docker, vous devez savoir comment les mettre à jour et appliquer ces mises à jour à vos conteneurs.

Mise à jour des images Docker locales

Pour commencer, commencez par mettre à jour une image Docker locale. L'application dans l'exemple python conteneur exécute des applications de code Python. La mise à jour de l'image Docker locale signifie que les applications peuvent s'appuyer sur l'image nouvellement mise à jour.

Vous devez d'abord savoir quelles images sont actuellement disponibles dans votre environnement local. Exécutez la commande suivante pour vérifier vos images locales. Le TAG colonne indique la version disponible de l'image.

docker images

Maintenant que vous avez votre version locale de l'image, vous devez alors trouver la dernière image disponible sur un registre distant. Il existe plusieurs registres Docker distants (dépôts d'images Docker) que le moteur Docker interroge pour mettre à jour vos images locales. Docker extrait les images de DockerHub par défaut, mais il existe de multiples alternatives, la plupart privées. Certains référentiels alternatifs sont répertoriés ci-dessous.

  • Galerie publique Amazon Web Service (AWS) ECR
  • Sonatype Nexus
  • Port VM

Naviguez dans la page du référentiel et recherchez l'image souhaitée :une image Python officielle que vous mettrez à jour à titre d'exemple. Tapez python pour trouver l'image souhaitée dans DockerHub et ouvrez-la pour trouver les balises disponibles. Les exemples de ce tutoriel sont d'une image Python.

Chaque balise a également une date de poussée. La date push est la date à laquelle l'image a été téléchargée dans le registre. Prenez note de l'image balise et nom , dont vous aurez besoin dans les étapes suivantes.

Maintenant que vous avez la nouvelle balise de version, il est temps de mettre à jour l'image. Pour mettre à jour vers une image plus récente, vous devez d'abord extraire la nouvelle version. Exécutez le docker pull commande suivie de deux-points et du nom et de la balise de l'image la plus récente :le nom et la balise que vous avez notés précédemment. Le nom et la balise de l'exemple sont python:slim-buster . La commande complète et la sortie résultante sont présentées ci-dessous.

docker pull python:slim-buster 

Pour extraire l'image du registre d'images Docker non défini par défaut (DockerHub), vous devez à la place fournir l'URI complet de l'image. Par exemple :pour extraire Python de (AWS) ECR Public Gallery, exécutez dockerpull public.ecr.aws/bitnami/python:3.7

Apprentissage de la mise à jour des conteneurs Docker

Une fois que vous avez créé un conteneur, l'image du conteneur ne peut pas changer. Étant donné que l'image ne peut pas changer, vous ne pouvez pas vraiment mettre à jour un conteneur en cours d'exécution. Ce que vous faites est de recréer tous les conteneurs en cours d'exécution avec des conteneurs de remplacement en utilisant la version d'image la plus récente.

Puisque vous avez déjà la version la plus récente, il est temps de recréer les conteneurs avec les anciennes images qui doivent être mises à jour.

Pour trouver les conteneurs que vous devez recréer, répertoriez tous les conteneurs existants exécutant l'ancienne image. Le docker ps La commande répertorie les conteneurs. Avec le --filter flag, vous spécifiez les conteneurs à répertorier. Il existe plusieurs options disponibles pour le filtrage, et l'ancestor flag filtre par l'image utilisée comme base pour construire le conteneur. Les conteneurs de départ dans les exemples sont pour Python 3.7.2, que vous appliquerez en tant que filtre. Le -a switch affiche tous les conteneurs disponibles.

docker ps -a --filter "ancestor=python:3.7.2"

Vous pouvez utiliser la sortie de docker ps comme entrée pour exécuter le docker stop commande sur tous les conteneurs répertoriés. Le drapeau -q est inclus, de sorte que la commande de listage ne renvoie que les ID des conteneurs. La sortie de la commande est la liste des ID des conteneurs arrêtés.

docker stop $(docker ps -aq  --filter "ancestor=python:3.7.2")

Après avoir arrêté les conteneurs, vous devez demander à Docker de les supprimer efficacement du système avant de supprimer l'image obsolète.

docker rm $(docker ps -aq --filter "ancestor=python:3.7.2")

Après avoir supprimé tous les conteneurs associés à l'image obsolète, vous pouvez supprimer l'ancienne image avec le docker rmi commande.

docker rmi python:3.7.2

Création de nouveaux conteneurs avec les images de mise à jour

Il est maintenant temps de remplacer enfin les anciens conteneurs, ceux qui ont été précédemment supprimés, par de nouveaux conteneurs basés sur l'image mise à jour. Cette fois, vous allez créer les conteneurs à l'aide de la version d'image la plus récente. Comme les conteneurs sont idempotents, vous pouvez vous attendre à ce que tout fonctionne comme avant.

Exécutez le nouveau conteneur avec le docker run commande et le nom et la balise de l'image mise à jour dont le conteneur aura besoin. Dans cet exemple, le -it indique à Docker d'exécuter le conteneur en mode interactif, vous pouvez donc exécuter des commandes à l'intérieur du conteneur pour vérifier toute fonctionnalité mise à jour.

docker run -it python:slim-buster

Notez que le nouveau conteneur Docker exécute une version plus récente de Python :version 3.9.7.

Conclusion

Dans ce didacticiel, vous avez jeté un coup d'œil derrière les couvertures et appris la magie derrière la mise à jour des conteneurs Docker :fumée et miroirs ! Il n'y a pas de mise à jour ! Au lieu de cela, supprimez toutes les traces de l'ancienne version et remplacez-les par de nouveaux conteneurs utilisant une version plus récente. Et, grâce à l'idempotence, les conteneurs continuent de fonctionner comme d'habitude :TA-DA !

Alors, quels sont les conteneurs que vous prévoyez de mettre à jour ensuite ?


Docker
  1. Comment déplacer des images Docker entre les hôtes

  2. Comment mettre à niveau Sendmail vers la dernière version sur CentOS

  3. Comment partager des images Docker avec d'autres

  4. Comment modifier les images Docker

  5. Mettre à jour cURL pour EasyApache 4 vers la dernière version

Comment obtenir la dernière version de vim sur Ubuntu 20.04 ?

Comment installer la dernière version de GCC sur Ubuntu 20.04 ?

Comment utiliser Docker Commit pour modifier les images de conteneur

Comment mettre à jour Linux Mint vers la dernière version

Comment créer et envoyer une image Docker au référentiel Docker Hub

Comment répertorier / rechercher / extraire des images docker sous Linux