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

Comment mettre à niveau les conteneurs Docker automatiquement lors de la mise à jour des applications Web Dockerized

Imaginez ce scénario. Vous hébergez quelques services Web exécutés dans des conteneurs Docker. Lorsque le service Web dispose d'une nouvelle version, vous récupérez l'image Docker et mettez à jour les conteneurs pour mettre à jour le service.

J'ai déjà discuté de la mise à jour des conteneurs Docker sans temps d'arrêt, mais cet article ne concerne pas la mise à niveau des applications Web. Celui-ci concerne la mise à jour des conteneurs du système d'exploitation eux-mêmes.

La mise à niveau manuelle du système d'exploitation exécuté dans le conteneur peut parfois être une tâche ardue. Vous devez exécuter vous-même les commandes de mise à niveau pertinentes sur un conteneur en cours d'exécution séparément pour que cela se produise.

Que diriez-vous d'éliminer cette étape supplémentaire et de combiner la mise à jour du système d'exploitation avec la mise à jour du service ?

C'est une astuce d'automatisation que j'utilise lorsque je mets à jour un service Web qui a été déployé avec Docker Compose.

Nous utiliserons Ghost CMS comme exemple concret basé sur ce déploiement.

DigitalOcean – Le cloud de développementAidant des millions de développeurs à créer, tester, gérer et faire évoluer facilement des applications de toute taille – plus rapidement que jamais.Logo DigitalOceanRoxana Ciobanu, CTO

Mise à jour automatique des conteneurs du système d'exploitation lors de la mise à jour du service Web

Vous pouvez simplement lire cet article pour comprendre ce que je fais. Mais si vous voulez le suivre, vous pouvez également le faire.

Je vais montrer deux exemples différents :

  1. Pour les conteneurs Docker basés sur Debian
  2. Pour les conteneurs Docker basés sur Alpine

Mise à niveau automatique des conteneurs Debian

La procédure nécessite que vous preniez soin de deux étapes :

Étape 1 :Notez les instructions CMD

Notez l'instruction CMD qui est finalement spécifiée dans le WebApp Dockerfile.

Pour ce faire, vous devez vérifier le Dockerfile avec lequel l'image a été construite (Ghost pour cet exemple) :

Par conséquent, la commande réelle ici est node current/index.js .

Étape 2 :Ajoutez le paramètre "Mise à jour automatique"

Ajoutez les commandes de mise à niveau et l'instruction CMD notée dans la section de service Ghost du fichier Docker Compose :

command: sh -c "apt update && apt -y upgrade && node current/index.js"

Voyons à quoi cela ressemblerait finalement. Supposons, par exemple, que vous considériez les entrées Docker Compose pour le service Ghost du guide cité ci-dessus. Une version mise à jour basée sur notre tutoriel serait :

    ghost:
      image: ghost:4.20.4
      volumes:
        - ghost:/var/lib/ghost/content
        - ./config.json:/var/lib/ghost/config.production.json
      command: sh -c "apt update && apt -y upgrade && node current/index.js"
      env_file:
        - ./ghost-mariadb.env
      restart: on-failure
      depends_on: 
        - ghostdb
      networks:
        - net
        - ghost

Ici, j'ai spécifié la commande juste après les volumes rubrique.

Mise à niveau automatique des conteneurs Alpine

Cette procédure nécessite à nouveau que vous vous occupiez de deux étapes similaires :

Étape 1 :Notez les instructions CMD

Notez l'instruction CMD qui est finalement spécifiée dans le WebApp Dockerfile.

Pour ce faire, vous devez vérifier le Dockerfile (Ghost Alpine pour cet exemple):

Très apparemment, la commande ici est la même que celle vue pour la version Debian précédente :node current/index.js .

Étape 2 :Ajoutez le paramètre "Mise à jour automatique"

Ajoutez les commandes de mise à niveau et l'instruction CMD notée dans la section de service Ghost du fichier Docker Compose :

command: sh -c "apk update && apk add --upgrade apk-tools && apk upgrade --available && node current/index.js"

Référence de mise à niveau Alpine.

Voyons à quoi cela ressemblerait finalement (notez cette fois que j'utiliserai l'image alpine pour Ghost). Supposons, par exemple, que vous considériez les entrées Docker Compose pour le service Ghost du guide cité ci-dessus. Une version mise à jour basée sur notre tutoriel serait :

    ghost:
      image: ghost:4.20.4-alpine
      volumes:
        - ghost:/var/lib/ghost/content
        - ./config.json:/var/lib/ghost/config.production.json
      command: sh -c "apk update && apk add --upgrade apk-tools && apk upgrade --available && node current/index.js"
      env_file:
        - ./ghost-mariadb.env
      restart: on-failure
      depends_on: 
        - ghostdb
      networks:
        - net
        - ghost

C'est tout alors. À partir de ce moment, chaque fois que vous mettez à jour vos applications Web sans temps d'arrêt, les commandes de mise à niveau du conteneur sont automatiquement invoquées, puis vos applications Web sont exécutées.

Remarque :lors de la mise à jour d'une application en modifiant le numéro de version de l'image dans le fichier de composition Docker, vous devez désactiver temporairement l'option de commande décrite ici avec un hashtag. Une fois la mise à jour effectuée pour l'application Web, réactivez la même ligne pour mettre à jour le conteneur lui-même. Ces deux étapes (mise à jour de l'application et du conteneur) sont réalisables sans aucun temps d'arrêt grâce à la mise à l'échelle.

Conseils bonus

Voici une liste de commandes pour d'autres applications populaires telles que Nextcloud et Rocket.Chat. Rappelez-vous, ceux-ci doivent être ajoutés comme vous l'avez vu pour l'exemple Ghost.

Suivantcloud

Pour Debian :

command: sh -c "apt update && apt -y upgrade && apache2-foreground"

Pour Alpin :

command: sh -c "apk update && apk add --upgrade apk-tools && apk upgrade --available && apache2-foreground"

Rocket.Chat

command: sh -c "apt update && apt -y upgrade && node main.js"

J'espère que cet article vous aidera dans vos activités quotidiennes d'administrateur système. Si vous avez des questions, des commentaires ou des suggestions, veuillez laisser vos commentaires dans la section des commentaires ci-dessous.


Docker
  1. Comment mettre à jour automatiquement les conteneurs Docker en cours d'exécution

  2. Comment exporter et importer des conteneurs Docker

  3. Comment utiliser Docker Compose

  4. Comment faire fonctionner les conteneurs Docker lorsque le démon s'arrête

  5. Comment répertorier les conteneurs Docker

Comment réduire la taille de l'image Docker dans les conteneurs Docker

Comment exécuter des conteneurs Docker

Comment supprimer les conteneurs Docker

Comment arrêter les conteneurs Docker

Comment nommer ou renommer les conteneurs Docker

Comment configurer les espaces de noms réseau dans les conteneurs Docker