Mises à jour d'application à l'intérieur des conteneurs Docker?

9

Généralement, sur un serveur, les mises à jour automatiques des correctifs liés à la sécurité sont configurées. Par conséquent, si j'utilise MySQL 5.5 et qu'un nouveau correctif de sécurité sort, Ubuntu Server appliquera la mise à niveau et redémarrera MySQL pour me protéger de manière automatisée. Évidemment, cela peut être désactivé, mais c'est utile pour ceux d'entre nous qui sont un peu paresseux;)

Un tel concept existe-t-il à l'intérieur d'un conteneur Docker? Si j'exécute MySQL dans un conteneur Docker, dois-je constamment arrêter le conteneur, y ouvrir un shell, puis mettre à jour et mettre à niveau MySQL?

Naftuli Kay
la source
C'est Docker, pas une question LXC. Comme les conteneurs LXC eux-mêmes ne sont qu'une autre distribution Linux fonctionnant sous le même noyau, vous utiliseriez simplement les mêmes commandes pour mettre à jour le système de conteneurs LXC.
phoops

Réponses:

13

Je ne suis pas d'accord avec la réponse acceptée. Tout d'abord, vous devez concevoir vos conteneurs en tenant compte de la séparation des états (dans le cas MySQL, cela signifie au moins qu'il /var/lib/mysqlva dans son propre volume ). Deuxièmement, vous devez déterminer une stratégie de mise à niveau; l'état de l'art serait de créer des images versionnées pour chaque ensemble de mise à niveau de packages apt et de les faire tester avant de permuter le volume de données du conteneur en cours d'exécution vers le nouveau. Cela peut inclure un temps d'arrêt ou aucun temps d'arrêt si vous utilisez quelque chose comme hipache .

Cette configuration, bien que plus coûteuse à configurer initialement, est la même que celle utilisée par les entreprises à grande échelle de conteneurs et sera moins coûteuse à entretenir au fil du temps.

En outre, les mises à niveau de packages peuvent éventuellement casser vos conteneurs en cours d'exécution, donc les appliquer à des conteneurs en cours d'exécution n'est pas une meilleure pratique - car il ne s'agit pas d'exécuter des logiciels obsolètes.

Deim0s
la source
+1 c'est la meilleure pratique. le stockage de données sur un conteneur de serveur demande simplement des problèmes.
booyaa
4

TL; DR : Si vous ne le construisez pas en vous-même, cela ne se produira pas.

Pour ce faire, il suffit d'écrire simplement un script de démarrage personnalisé pour votre conteneur spécifié par CMDdans votre Dockerfile. Dans ce fichier, exécutez un apt-get update && apt-get upgrade -qqyavant de commencer tout ce que vous exécutez.

Vous avez ensuite deux façons de vous assurer que les mises à jour arrivent dans le conteneur:

  1. Définissez un travail cron dans votre système d'exploitation hôte pour redémarrer le conteneur selon un calendrier, ce qui le fait mettre à jour et mettre à niveau selon un calendrier.
  2. Abonnez-vous aux mises à jour de sécurité des logiciels, puis lors de la mise à jour d'un package affecté, redémarrez le conteneur.

Ce n'est pas la chose la plus simple à optimiser et à automatiser, mais c'est possible.

Naftuli Kay
la source
1
Continuez à lire la page. deim0s a une meilleure réponse.
mc0e