Comment modifier la configuration des conteneurs Docker en cours d'exécution

0
82

Les conteneurs Docker sont généralement traités comme immuables une fois qu'ils ont commencé à s'exécuter. Vous pouvez cependant mettre à jour dynamiquement certains paramètres de configuration, tels que le nom du conteneur et ses limites de ressources matérielles.

Dans ce guide, nous vous montrerons comment utiliser les commandes Docker intégrées. pour modifier les paramètres sélectionnés des conteneurs en cours d'exécution. Nous examinerons également ce que vous ne devriez pas modifier et une solution de contournement que vous pouvez utiliser si vous pensez que vous devez le faire.

Renommer un conteneur

La modification la plus simple consiste à renommer un conteneur créé. Les noms sont attribués via l'indicateur –name pour l'exécution de docker. Lorsqu'aucun nom n'est fourni, le démon Docker en attribue un au hasard. Vous pouvez utiliser des noms pour référencer des conteneurs dans les commandes Docker CLI ; choisir un mémorisable approprié évite d'exécuter docker ps pour trouver le nom ou l'ID attribué automatiquement à un conteneur.

La commande docker rename est utilisée pour modifier les noms de conteneur après la création. Il prend deux arguments, l'ID ou le nom actuel du conteneur cible, et le nouveau nom à attribuer :

# docker rename <ID ou nom cible> <nouveau nom> docker rename old_name new_name

Modification de la politique de redémarrage

Les politiques de redémarrage déterminent si les conteneurs doivent démarrer automatiquement après le redémarrage de votre hôte ou le lancement du démon Docker. Les quatre règles disponibles vous permettent de forcer le démarrage du conteneur, de le maintenir à l'arrêt ou de démarrer de manière conditionnelle en fonction du code de sortie précédent ou de l'état d'exécution du conteneur.

Publicité

Docker prend en charge la modification des politiques de redémarrage à la volée. Ceci est utile si vous envisagez de redémarrer votre hôte ou le démon Docker et souhaitez qu'un certain conteneur reste arrêté – ou démarrer automatiquement – après l'événement spécifique.

docker update –restart without-stopped demo_container

L'exemple ci-dessus modifie la politique de redémarrage de demo_container en within-stopped. Cette politique fait démarrer le conteneur avec le démon à moins qu'il n'ait été arrêté manuellement avant la dernière sortie du démon.

Modification des limites de ressources matérielles

La commande docker update peut également être utilisée pour modifier les limites de ressources appliquées aux conteneurs. Vous devez transmettre un ou plusieurs identifiants ou noms de conteneurs, ainsi qu'une liste d'indicateurs définissant les limites à définir sur ces conteneurs.

Les indicateurs sont disponibles pour toutes les limites de ressources prises en charge par docker run. Voici une liste condensée des options que vous pouvez utiliser :

  • –blkio-weight – Modifiez le poids relatif du bloc d'E/S du conteneur.
  • –cpus – Définissez le nombre de processeurs disponibles pour le conteneur.
  • –cpu-shares– Définissez le poids relatif du partage du processeur.
  • –memory – Modifiez la limite de mémoire du conteneur (par exemple, 1024 M).
  • –memory-swap – Configurez la quantité de mémoire que le conteneur peut échanger sur le disque ; utilisez une taille telle que 1024 M pour définir une limite spécifique, ou -1 pour un échange illimité.
  • –kernel-memory– Modifiez la limite de mémoire du noyau du conteneur. Les conteneurs privés de mémoire du noyau peuvent avoir un impact négatif sur d'autres charges de travail sur la machine hôte.
  • –pids-limit – Configurez le nombre maximal d'ID de processus autorisés à l'intérieur du conteneur, en limitant le nombre de processus pouvant être démarrés.

Voici un exemple d'utilisation de docker update pour modifier la limite de mémoire et Nombre de processeurs pour deux de vos conteneurs :

docker update –cpus 4 –memory 1024M first_container second_container

Tous les indicateurs disponibles, à l'exception de –kernel-memory, peuvent être utilisés avec des conteneurs Linux en cours d'exécution. Pour modifier la limite de mémoire du noyau, vous devez d'abord arrêter le conteneur avec docker stop.

Publicité

Attention, aucun de ces indicateurs n'est actuellement pris en charge pour les conteneurs Windows. Ils fonctionneront cependant avec des conteneurs Linux exécutés sur une machine hôte Windows.

Quand ne pas utiliser ces commandes ?

Les commandes docker update et docker rename doivent être utilisées avec les conteneurs que vous avez créés manuellement via docker run. Méfiez-vous de les utiliser avec des conteneurs provenant d'autres outils tels que docker-compose.

Modifier le nom d'un conteneur pourrait le rendre indétectable par l'outil source, endommageant potentiellement d'autres composants de votre pile. De plus, si vous définissez de manière déclarative des limites de ressources dans un fichier docker-compose.yml, exécuter à nouveau la commande docker-compose up réappliquera ces limites d'origine à votre conteneur.

Par conséquent, vous devez vous en tenir à votre solution de gestion de conteneurs existante si vous en utilisez une. Pour Compose, cela signifie modifier les noms de conteneur et les limites de ressources dans votre fichier docker-compose.yml, puis exécuter docker-compose up -d pour appliquer automatiquement la modification. Cela garantit que vous ne serez pas involontairement orphelins de conteneurs ou que vous ne provoquerez pas d'effets secondaires involontaires.

Qu'en est-il des autres propriétés (image/ports/volumes) ?

Les limites matérielles, les politiques de ressources et les noms de conteneurs sont les seuls paramètres de configuration que Docker CLI vous permet de modifier. Vous ne pouvez pas modifier l'image d'un conteneur en cours d'exécution ; vous ne pouvez pas non plus modifier facilement d'autres options telles que les liaisons de port et les volumes.

Vous devez créer un autre conteneur si ces valeurs deviennent obsolètes. Détruisez votre instance actuelle et utilisez docker run pour démarrer un remplacement avec votre nouvelle image et les paramètres corrigés.

Publicité

Les conteneurs étant censés être apatrides et éphémères, vous devriez pouvoir les remplacer à tout moment. Utilisez des volumes pour stocker des données de conteneur persistantes ; ce mécanisme vous permet de rattacher les fichiers avec état au nouveau conteneur en répétant les indicateurs -v passés à la commande docker run d'origine :

docker run -v config-volume:/usr/lib/config –name demo example-image :v1 docker rm demo # Les données existantes dans /usr/lib/config ont été conservées docker run -v config-volume:/usr/lib/config –name demo2 example-image:v2

Zone de danger : Modification des propriétés d'autres conteneurs

Bien que vous deviez viser à remplacer les conteneurs dans la mesure du possible, il est possible de modifier les propriétés des conteneurs existants en éditant directement les fichiers de configuration de Docker. Faites attention lorsque vous utilisez cette méthode : elle n'est pas du tout prise en charge et une modification mal placée pourrait casser votre conteneur.

Bien que cette option offre un moyen de modifier arbitrairement les conteneurs existants, elle ne fonctionnera pas tant que ils courent. Utilisez la commande docker stop my-container pour arrêter le conteneur que vous souhaitez modifier, puis continuez à apporter vos modifications.

Les fichiers de configuration du conteneur ont le chemin suivant sur votre hôte :

/var/lib/docker/containers/<container id>/config.v2.json

Vous devez connaître le conteneur’ ID complet, pas la version tronquée affichée par docker ps. Vous pouvez utiliser la commande docker inspect pour obtenir ceci :

docker inspect <short id or name> | jq | Id grep

Une fois que vous avez accédé au fichier config.v2.json d'un conteneur, vous pouvez l'ouvrir dans un éditeur de texte pour apporter les modifications nécessaires. Le JSON stocke la configuration de conteneur créée lorsque vous avez exécuté docker run. Vous pouvez modifier le contenu pour modifier les propriétés telles que les liaisons de port, les variables d'environnement, les volumes, ainsi que le point d'entrée et la commande du conteneur.

Publicité

Pour ajouter une liaison de port, recherchez la clé PortBindings dans le fichier, puis insérez un nouvel élément dans l'objet :

{ “PortBindings”: { “80/tcp”: { “HostIp”: “”, “HostPort”: “8080” } } }

Ici, le port 80 dans le conteneur est lié au port 8080 sur l'hôte. Il est tout aussi simple d'ajouter des variables d'environnement – trouvez la clé Env, puis insérez de nouveaux éléments dans le tableau :

{ “Env”: [ “FOO=bar”, “CUSTOM_VARIABLE=example” ] }

Une fois que vous avez terminé l'édition, redémarrez le Service Docker et votre conteneur :

sudo service docker restart docker start my-container

Le conteneur s'exécutera maintenant avec sa configuration mise à jour.

Conclusion

< p>Les conteneurs Docker sont censés être des unités éphémères que vous remplacez lorsque leur configuration devient obsolète. Malgré cette intention, il existe des scénarios où il est nécessaire de modifier un conteneur existant. Docker gère les cas d'utilisation les plus courants – changements de nom et ajustements de limite de ressources en temps réel – via des commandes CLI intégrées telles que docker update.

Lorsque vous souhaitez modifier une autre propriété, essayez toujours de remplacer le conteneur comme premier plan d'action. Cela minimise le risque de casser des objets et est conforme au modèle d'immuabilité de Docker. Si vous vous retrouvez dans une situation où un conteneur existant doit être modifié, vous pouvez modifier manuellement les fichiers de configuration internes de Docker comme indiqué ci-dessus.

Enfin, n'oubliez pas que les conteneurs gérés par d'autres outils de l'écosystème comme Docker Compose devraient être modifiés à l'aide de ces mécanismes. Sinon, vous pourriez constater que les conteneurs sont orphelins ou écrasés de manière inattendue si l'outil n'est pas au courant des modifications que vous avez apportées.