Auteur Sujet: iperf3 dans un container Docker  (Lu 4346 fois)

0 Membres et 1 Invité sur ce sujet

vivien

  • Administrateur
  • *
  • Messages: 47 086
    • Twitter LaFibre.info
iperf3 dans un container Docker
« le: 27 juillet 2015 à 00:09:28 »
Pour iperf3 dans un container Docker, le travail semble déjà commencé :
- https://registry.hub.docker.com/u/networkstatic/iperf3/
- https://github.com/nerdalert/iperf3

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 078
  • Paris (75)
iperf3 Docker
« Réponse #1 le: 27 juillet 2015 à 03:34:24 »
Tu peux aussi faire toi même le container si tu veux pousser le personnalisation ou ne pas dépendre d'un tiers.

Une autre methode, plus simple, c'est de partir d'un container basique, juste une image de debian ou d'ubuntu et de lancer tel quelle et mapper le chemin vers iperf3 sur l'host pour l’exécuter dans le container. Comme ca tes instances partagent le meme code que l'hote et n'ont pas besoin d'être mise a jour quand le binaire est mis a jour (il faut juste les relancer ce qui est moins lourd que de régénérer une image Docker).

Voici un exemple:

sudo docker run -d -p 5201:5201 -v /usr/bin/iperf3:/iperf3:ro -v /usr/lib/x86_64-linux-gnu/libiperf.so.0:/usr/lib/libiperf.so.0:ro ubuntu:14.04 /iperf3 -s
(la base est ubuntu:14.04, il est mieux d'utiliser la meme que l'hote.).
iperf3 n'est pas compilé statiquement donc il faut aussi donner l'acces a  libiperf.so.0 ("readelf -d /usr/bin/iperf3" pour voir les libraries d'un executable).
"ro" pour read-only donc les containers ne peuvent toucher aux 2 fichiers (iperf3 et libiperf.so.0)

En jouant avec la commande '-p' on peut ensuite avoir 4 containers sur 4 IP différentes avec le même port:

sudo docker run -d -p IP1:5201:5201 -v /usr/bin/iperf3:/iperf3:ro -v /usr/lib/x86_64-linux-gnu/libiperf.so.0:/usr/lib/libiperf.so.0:ro ubuntu:14.04 /iperf3 -s
sudo docker run -d -p IP2:5201:5201 -v /usr/bin/iperf3:/iperf3:ro -v /usr/lib/x86_64-linux-gnu/libiperf.so.0:/usr/lib/libiperf.so.0:ro ubuntu:14.04 /iperf3 -s
sudo docker run -d -p IP3:5201:5201 -v /usr/bin/iperf3:/iperf3:ro -v /usr/lib/x86_64-linux-gnu/libiperf.so.0:/usr/lib/libiperf.so.0:ro ubuntu:14.04 /iperf3 -s
sudo docker run -d -p IP4:5201:5201 -v /usr/bin/iperf3:/iperf3:ro -v /usr/lib/x86_64-linux-gnu/libiperf.so.0:/usr/lib/libiperf.so.0:ro ubuntu:14.04 /iperf3 -s

En raffinant on peut aussi renvoyer le stdout de iperf3 vers un fichier de l'hote (donc hors du container).

Ce genre de technique permet aussi de tester ou d'utiliser un meme executable sur plusieurs version d'OS (ou réglages différents d'un meme OS) dans le meme OS.

vivien

  • Administrateur
  • *
  • Messages: 47 086
    • Twitter LaFibre.info
iperf3 dans un container Docker
« Réponse #2 le: 28 juillet 2015 à 08:49:47 »
Quelle serait le moyen le plus propre, avec iperf3 dans un container Docker de :
- Force un kill toutes les 10 minutes, comme je le faisait avec iperf2.
- Vérifier toutes les minutes si le process iperf est en mémoire

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 078
  • Paris (75)
iperf3 dans un container Docker
« Réponse #3 le: 28 juillet 2015 à 10:26:28 »
La premiere chose est deja de nommer tes containers. pour ca y'a l'option "--name <nom>" a rajouter dans le run. Sinon t'aura un nom généré automatiquement ou faudra utilisé l'ID.

La commande "sudo docker ps" afficher les containers actifs (ceux qui tournent) et "sudo docker ps -a" affiche tous les containers, actifs ou stoppés.
La commande "sudo docker rm [-f] <nom ou id>" permet de supprimer completement un container arreté. l'option -f force l'arret du container avant.

- Force un kill toutes les 10 minutes, comme je le faisait avec iperf2.
fait un "sudo docker restart <nom>" toutes les 10 minutes

- Vérifier toutes les minutes si le process iperf est en mémoire
dans le cas present iperf3 est ce qui tourne dans le container donc le container s'arrete quand iperf3 ne tourne plus (process mort). si iperf3 est "bloqué" (process vivant mais qui fait on se ne sait quoi) le container continue a tourner.

donc tu peux tester si le container tourne encore avec "docker inspect <nom>". Ca renvoi plein d'infos sur le container en format json. Notamment l'etat. Tu peux reduire en utilisant '--format':

sudo docker inspect --format='{{.State.Running}}' <nom>affichera "false" ou "true"
si c'est false tu peux "sudo docker start <nom>" pour relancer le container.

il y a aussi une option "--restart always" pour "run" qui redémarre automatiquement un container mais ca peux faire des choses bizarres parfois (j'ai eu le cas). a tester donc.

"sudo docker [-t] logs <nom>" permet de voir l'ouput (stoud, stderr, -t pour avoir la date/heure) de ton container aussi. ca peut servir.

Idealement je te conseilles de lire la doc: https://docs.docker.com/reference/run/ elle est simple et claire.
y'a aussi un api (principalement a base de REST): https://docs.docker.com/reference/api/docker_remote_api_v1.19/ pour faire des scripts notamment.