Docker : comment utiliser un service de l'hôte depuis un conteneur ?

il y a 4 mois

Attention : cet article ne couvre que Docker sous Linux. Je n'ai pas testé sous Windows. Sous MacOS l'inteface docker0 n'étant pas accessible, cette astuce ne fonctionnera pas.

Imaginons que vous vouliez utiliser un service présent sur un serveur hôte depuis un conteneur docker. Ce n'est pas forcément très propre mais croyez-moi, si vous êtes amené à utiliser Docker ça va forcément vous arriver. On peut prendre le cas où une application embarquée dans un ou plusieurs conteneurs nécessiterait l'accès au service SMTP ou à une base de données présent sur l'hôte.

Cas simple : le service écoute sur la bonne interface

Si le service en question écoute sur toutes les interfaces ou sur l'interface "docker0" (pour rappel, cette interface est créée automatiquement lors du démarrage de dockerd) c'est le cas idéal et surtout le plus simple à mettre en oeuvre.

En effet, il suffit alors dans le conteneur de faire référence à l'IP de l'hôte sur le réseau docker0 (chez moi 172.17.0.1).

Faisons un essai en tentant d'utiliser le port SSH (22) de l'hôte depuis un conteneur :

$ # démarrage du service docker
$ sudo systemctl start docker
$ # récupération de l'IP de l'hôte sur l'interface docker0
$ ifconfig | grep -A 1 docker0
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 0.0.0.0
$ # ouverture du shell d'un conteneur
$ docker run -it alpine sh
$ telnet 172.17.0.1 22
SSH-2.0-OpenSSH_7.4
$ # le service est accessible !

Cas plus complexe : le service n'écoute pas sur la bonne interface

La méthode précédente ne fonctionnera pas si par exemple vous désirez acceder à un service qui n'écoute que sur l'interface loopback (IP 127.0.0.1 sur l'hôte).

Pas de panique ! On va utiliser une petite ruse rendue possible par une commande bien sympatique : redir (d'autres outils peuvent être utilisés comme iptables mais celui-ci est mon préféré car il est particulièrement simple à mettre en oeuvre). Redir va nous permettre de rediriger des connexions TCP/IP vers une autre IP.

Tout d'abord, commençons par l'installer.

RHEL :

Après avoir ajouté le dépôt "nux-misc" (instructions), installer le paquet :

$ sudo yum install --enablerepo=nux-misc -y redir

Debian :

$ sudo apt-get update && sudo apt-get install redir

Maintenant, utilisons la commande redir de manière à rediriger les connexions TCP/IP à destination de l'IP de l'hôte sur le réseau docker0 vers 127.0.0.1 (loopback de l'hôte) :

$ sudo redir --laddr <ip hôte sur docker0> --caddr <ip où le service est accessible> --lport <port du service> --cport <port du service>

Si par exemple on veut utiliser un service MySQL uniquement accessible sur l'IP 127.0.0.1 de l'hôte depuis un conteneur on écrira :

$ sudo redir --laddr 172.17.0.1 --caddr 127.0.0.1 --lport 3306 --cport 3306

Faisons maintenant le test depuis un conteneur :

$ # ouverture du shell d'un conteneur
$ docker run -it alpine sh
$ telnet 172.17.0.1 3306
J
5.7.205'.V
          j^.R.	<L]JYmysql_native_password
$ # le service est accessible !

En conclusion on peut dire que redir est une commande simple d'utilisation pour le commun des mortels (contrairement à iptables !) qui peut rendre bien des services pour un environnement de développement ou lors de la configuration rapide d'un conteneur.

Git : ignorer les modifications d'un fichier

il y a 4 mois

Prenons le cas d'un fichier de configuration suivi (le terme anglais "tracked" est plus courrant) dans un dépôt git. Imaginons que celui-ci soit différent pour chaque développeur du porjet car il contient par exemple l'utilisateur / mot de passe pour accéder à une base de données. C'est le cas typique dans lequel tout le monde retrouvera ce fichier dans la liste des fichiers modifiés continuellement ce qui est très agaçant sad.

Pour résoudre ce problème, git propose d'ignorer les modifications effectuées sur un fichier déjà suivi via la commande suivante :

$ git update-index --assume-unchanged <fichier>

Faisons le test :

$ git init
Initialized empty Git repository in /Users/romain/Dev/test_git/.git/
$ touch foo
$ git add foo
$ git commit -m "Foo added"
[master (root-commit) 13a00de] Foo added
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 foo
$ echo "bar" > foo
$ git status
On branch master
Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git checkout -- ..." to discard changes in working directory)

	modified:   foo

no changes added to commit (use "git add" and/or "git commit -a")
$ git update-index --assume-unchanged foo
$ git status
On branch master
nothing to commit, working directory clean

Comme prévu, le fichier n'est plus présent dans la liste des fichiers ayant changé smiley.

Pour annuler l'effet de cette commande, il suffit d'utiliser l'inverse :

$ git update-index --no-assume-unchanged <fichier>

 

Loisirs : jeux-vidéos

il y a 5 mois

Jusqu'à peu, lorsque je lisais "jeux-vidéos" dans la partie souvent nommée "divers" ou "loisirs" du CV d'un candidat, je comptabilisait inconsciemment cette précision comme un "malus". Pourtant, c'est totalement idiot puisque je suis moi-même un joueur (même si le temps me manque pour m'y consacrer en ce moment). Pour la précision, je joue principalement aux jeux de l'époque où j'étais adolescent (vive SEGA !) mais je m'intéresse aussi aux dernières sorties.

Alors pourquoi cette impression négative ? Les jeux-vidéos ne sont plus depuis des années destinées aux plus jeunes, bien au contraire de plus en plus de titres sont réservés à un public adulte. Il serait donc illogique de considérer que le fait de passer du temps avec une manette entre le main pour un adulte en ferait quelqu'un d'immature. De plus, quelle différence y a-t-il entre passer une soirée à regarder des épisodes de Stranger Things, le denier James Bond ou à jouer à Resident Evil 7 ?

Après réflexion, je me suis rendu compte que ce préjugé négatif venait du monde de l'entreprise et en particulier du recrutement. A jouer le rôle du recruteur devant être impartial pour ne pas prendre une mauvaise décision, on a tendance à analyser de manière froide les profils des candidats. Ainsi, on tente de les ranger dans des cases les postulants : "le geek", "le passionné", "le développeur à l'arrache", ... C'est regrettable mais c'est naturel, quand on voit défiler un certain nombre de CV, on ne peut pas recevoir et analyser en profondeur chaque candidat, on prend donc des raccourcis. La mention "jeux-vidéos" représente alors un +1 pour la case "geek".

Une autre explication peut être trouvée en s'intéressant au pedigree des chargés des RH, recruteurs, dirigeants ... qui sont souvent quarantenaires ou cinquantenaires. En particuliers les chefs d'entreprise qui sont les derniers décideurs dans le contexte d'une embauche. Contrairement à la génération des années 80 et plus, ils n'ont pas baigné durant leur enfance dans un monde où Mario, Sonic, Son Goku, Link, Ryu et tant d'autres occupaient leurs week-end. Ils ont donc souvent un avis négatif sur cet univers auquel ils sont étrangers.

Être un joueur ne devrait en aucun cas être vu de manière négative, pas plus que la mention "Féru de cinéma" ne l'est. Le recrutement et l'analyse de profils sont des exercices difficiles, en particulier quand on n'est pas issu du monde RH. Au fur et à mesure, j'essai de m'améliorer, de ne pas prendre tous les raccourcis et surtout de toujours considérer les personnes qui prennent la peine d'envoyer un CV (parfois même de rédiger une lettre de motivation !) en tant que telles et non en tant que simples "profils".

Bon je vous laisse, j'ai une partie de Silent Hill 2 à finir... laugh

Retour aux sources : de PHP à Java

il y a 8 mois

Cela fait maintenant 5 ans que je suis dévelopeur web PHP à Télémaque, une société basée à Sophia Antipolis qui édite des logiciels essentiellement pour ses besoins internes. Ce poste a été ma première véritable expérience professionnelle à la fin de me études. Au cours des deux premières années j'y ai appris énormément grâce à une philosophie de transversalité technique qui m'a donné l'opportunité d'être impliqué sur l'ensemble des étapes de vie des projets, de la conception à la maintenance en passant par les étapes de recettage et de mise en production. J'ai vécu cela comme un véritable laboratoire où j'ai pu mettre les mains dans de nombreuses technologies différentes ce qui m'a permis de gagner très vite en compétence.

Les trois années suivantes, j'ai occupé un poste de référant technique au sein de l'équipe "back office" de Télémaque. J'avais pour rôle d'encadrer les développements sur un plan technique au sein d'une petite équipe allant jusqu'à 5 personnes et très orientée back-end. J'ai également beaucoup appris durant cette période mais sur un plan différent.

Aujourd'hui, je ressens le besoin de me confronter à de nouveaux défis et de sortir de la fameuse "zone de confort". Parmi les différentes voies possibles pour la suite de ma carrière, j'ai hésité entre :

  • développer mon expertise web dans l'écosystème PHP ;
  • revenir dans le monde Java que j'ai quitté il y a 5 ans.

Une belle opportunité aidant, c'est la seconde voie que j'ai choisi d'emprunter smiley Toutefois, je compte conserver un pied bien encré dans le monde PHP qui me plaît autant qu'il me frustre parfois. J'écrirais d'ailleurs prochainement un article dédié à la comparaison des deux univers.

Me voilà donc, avec une grande excitation, revenu à Java smiley. Je reprends le train en marche avec 3 versions majeures de retard, une vision du développement logiciel bien différente qu'à la sortie d'études ainsi qu'un certain recul sur tout ça.

Voici donc mes objectifs sur ce domaine d'ici la fin de l'année 2017 :

Je mettrais cette liste à jour dans les semaines à venir, en espérant tenir les objectifs laugh.

PHP Tour 2017

il y a 10 mois

Le PHP Tour 2017 s'est tenu cette année à Nantes les 18 et 19 mai. C'est un événement majeur de la communauté PHP Française avec le PHP Forum qui lui a lieu chaque année à Paris.

Cette année, j'ai eu la chance d'y participer et j'en suis ravi ! Je ne peux que vous conseiller de participer à ces événements qui sont - outre le fait d'apprendre de nouvelles choses - l'occasion de se rapprocher de la crème des développeur PHP en France et de voir ce qui se passe ailleurs. L'herbe n'est pas toujours plus verte chez le voisin mais il faut bien reconnaître que si on parle aux conférenciers, on se rend souvent compte assez rapidement qu'ils sont épanouis dans leur entreprise et qu'ils aiment ce qu'ils font.

Personnellement, cela m'a permis de conforter ma vision de ce qu'est un "bon" développeur web back-end aujourd'hui (et qui utilise PHP laugh) mais aussi ce qu'est une "bonne" entreprise (pour un développeur). Dans ce lot des sociétés qui font participer leurs développeurs à ce type d'événement, joliCode s'est particulièrement démarqué de par le nombre de conférences qu'ils ont menés mais surtout leur qualité. Selon moi, c'est clairement un deal "gagnant gagnant" entre l'entreprise et le développeur. D'un côté, on cite plusieurs fois par jour le nom de la société en question, elle est valorisée par la qualité des sujets traités et l'expertise de ses collaborateurs et d'un autre, on voit des développeurs passionnés qui ont l'occasion d'aller en profondeur sur des sujets qui les intéressent avec un objectif de partage de connaissance qui mène à une satisfaction personnelle et professionnelle. Tout ça pourrait bien me donner envie dans les années à venir d'animer moi aussi quelques conférences...

C'était aussi l'occasion pour quelques sociétés comme Deezer de se créer des contacts parmi la crème des développeurs PHP en France mais si vous n'habitez pas à Paris, laissez tomber frown. Quoi qu'il en soit, c'est un excellente stratégie de recrutement qui va très certainement rapporter ses fruits pour un coût minime comparé à un chasseur de têtes associé à un processus de recrutement plus ou moins lourd.

Avec le recul, je pense que l'intérêt numéro 1 des conférences organisées par l'AFUP est de permettre l'interaction entre des individus qui font souvent exactement les mêmes choses (technos, outils, projets, ...) mais qui ne sont pas liés les uns aux autres dans la vie de tous les jours. Le contenu des conférences est bien entendu l'objectif lorsqu'on se déplace à un événement pareil mais c'est le contact avec les autres qui donne le plus de pep's en sortant de là !

Pour conclure ce petit post, je vous invite vraiment à vous rendre aux événements de l'AFUP, ce que je ferais le plus possible à partir de maintenant pour ma part.

ps : les enregistrements des conférences seront prochainement disponibles sur la chaîne Youtube de l'AFUP