Publié le 12 Août 2016

En ce moment je développe une application play scala et j'utilise donc sbt pour compiler et lancer mon application.

Le moyen le plus simple que j'ai trouvé pour la debugger et de lancer l'appli avec l'option -jvm-debug:

sbt -jvm-debug 9999 run

Ensuite j'utilise mon IDE (IntelliJ dans mon cas) que je configure pour debugger une application distante sur le port que j'ai spécifier avec l'option -jvm-debug.

Voir les commentaires

Rédigé par Bliz

Publié dans #Scala, #Play

Publié le 14 Juillet 2016

Pour accéder un répertoire local depuis un conteneur docker il faut le monter en temps que volume docker. C'est l'équivalent des "shared folders" de Virtual box.

La définition d'un volume s'effectue avec l'option -v de manière similaire au mapping des ports.

Par exemple pour accéder à son répertoire "home" depuis docker on utilisera la commande suivante:

docker run -it -v $HOME:/shared ubuntu /bin/bash

L'option -v précise que le répertoire /shared à l'intérieur du conteneur docker correspond au $HOME de l'utilisateur hôte.

Voir les commentaires

Rédigé par Bliz

Publié dans #docker

Publié le 12 Juillet 2016

En gros un docker registry est une bibliothèques d'images docker. Il y a docker hub qui est le docker registry officiel de docker mais la plupart des entreprises avec qui je travaille utilise leur propre docker registry.

En fait il est assez simple de mettre en place en tel registry en utilisant docker bien sûr et l'image registry:

docker run -d -p 5000:5000 -v $HOME/registry:/var/lib/registry registry

Comme ce registry n'est pas sécurisé (pas de docker login nécessaire pour y accéder) il faut redémarrer le daemon docker avec l'option --insecure-registry HOSTNAME.

Ensuite on peut faire des push/pull sur ce registry:

docker push HOSTNAME:5000/image:tag

docker pull HOSTNAME:5000/image:tag

Voir les commentaires

Rédigé par Bliz

Publié dans #docker

Publié le 12 Juillet 2016

L'option -p de docker run permet de mapper le port d'un conteneur vers un port de l'hôte. Par exemple pour accéder un service web on utilisera docker run -p 9000:80 ... pour mapper le port 80 du conteneur vers le port 9000 de l'hôte.

Il peut y avoir des services pour lesquels il n'est pas nécessaire d'exposer un port externe. Par contre un autre conteneur docker peut y avoir accès. Par exemple un service web peut avoir besoin d'accéder une base de données mais il n'y a pas de raison de rendre la base de données accessible en dehors de docker.

Dans ce cas on dit qu'on lit le service web à la base données avec l'option --link.

Pour démarrer la base de données on utilisera:

docker run --name mysql_wp -e MYSQL_ROOT_PASSWORD=**** -d mysql

Une fois le conteneur démarrer un peut démarrer le service web (ici wordpress) avec

docker run --name ws --link ws_mysql:mysql -p9000:80 -d wordpress

Voir les commentaires

Rédigé par Bliz

Publié dans #docker

Publié le 11 Juillet 2016

Ghostscript (gs) permet de générer un fichier PDF à partir de plusieurs PDFs.

Ghostscript est évidement disponible sous linux mais également sur Mac.

brew install ghostscript

La commande gs est très puissante et très complexe à la fois. Il faut donc l'utiliser avec les bonnes options. Dans notre cas la commande est la suivante

gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=docs.pdf doc1.pdf doc2.pdf do3.pdf

Ce qui est vraiment intéressant c'est la fin de la commande, notamment l'option -sOutputFile qui permet de spécifier le nom du ficher de sortie (c'est à dire de celui comprenant tous les PDFs).

Ensuite la fin de la commande n'est que la liste des fichiers PDFs à regrouper séparé par des espaces.

Voir les commentaires

Rédigé par Bliz

Publié dans #Linux

Publié le 8 Juillet 2016

Tout simplement avec la commande

docker logs mon_conteneur

C'est particulièrement utile lorsqu'on démarre le conteneur en arrière-plan avec l'option -d car la sortie standard n'apparait pas dans le terminal.

Voir les commentaires

Rédigé par Bliz

Publié dans #docker

Publié le 8 Juillet 2016

On peut préciser le répertoire à utiliser lors du démarrage du daemon docker avec l'option -g:

docker daemon -g /home/docker

attention les données dans l'ancien répertoire ne sont pas transférer. On a donc l'impression que toutes les images ont disparu mais non il suffit de refaire pointer le daemon sur l'ancient répertoire (en adaptant ou supprimant l'option -g) et on retrouve tout.

Voir les commentaires

Rédigé par Bliz

Publié le 8 Juillet 2016

On peut démarrer un conteneur docker en tant que daemon ce qui est plus pratique que d'embarquer la commande dans un nohup.

docker run -d -i -p 7000:7000 ubuntu:trusty netcat -l 7000

Ici c'est l'option -d qui permet de lancer le conteneur en tant que daemon.

-p permet de préciser le mapping des ports (host:container).

-i active le mode interactif (qui permet de garder l'entrée standard ouverte)

ubuntu:trusty est le nom de l'image à utiliser (ubuntu:latest n'inclut plus la commande netcat)

nc -l 7000 lance netcat en écoute sur le port 7000.

Voir les commentaires

Rédigé par Bliz

Publié dans #docker

Publié le 8 Juillet 2016

Par défaut pour des raisons de sécurité le daemon docker n'est accessible que localement.

Il utilise une socket unix locale mais on peut demander à utiliser une socket tcp accessible à distance.

Cela s'effectue avec l'option -H lorsqu'on redémarre le daemon docker:

docker daemon -H tcp://0.0.0.0:2375

Attention ici on utilise l'adresse 0.0.0.0 qui signifie simplement que n'import qui peut se connecter mais on peut préciser une adresse donnée pour limiter l'accès.

Voir les commentaires

Rédigé par Bliz

Publié dans #docker

Publié le 7 Juillet 2016

J'utilise un docker registry privé sur lequel les développeurs pousse régulièrement de nouvelles images.

Il faut donc régulièrement mettre à jour les images locales que nous utilisons et quand on commence à avoir beaucoup d'images cela devient vide fastidieux.

Heureusement on peut effectuer cela en une seule ligne

for image in $(docker ps -a | awk '{ if (NR != 1) print $2 }'); do docker pull $image; done

Voilà pour la commande et maintenant son explication:

On récupère la liste de toutes les images avec docker ps -a ensuite on récupère uniquement la deuxième colonne à l'aide de awk (le if permet d'éviter la première ligne qui contient l'entête).

Enfin on utilise une boucle for classique pour executer docker pull avec chaque image.

Voir les commentaires

Rédigé par Bliz

Publié dans #docker