Introduction
J’ai regardé Docker. Docker est en Go ainsi que pas mal de projets en fait. J’ai donc décidé d’essayer.
Dans ce chapitre nous n’allons pas trop discuter du langage mais surtout mettre en place tout les outils.
J’ai regardé Docker. Docker est en Go ainsi que pas mal de projets en fait. J’ai donc décidé d’essayer.
Dans ce chapitre nous n’allons pas trop discuter du langage mais surtout mettre en place tout les outils.
Nous allons voir docker-machine. Docker-machine permet de simplifier l’installation/gestion/déploiement de Docker.
Il existe des jeux vidéos pour apprendre à programmer. Voici quelques exemples.
Vim adventure permet d’apprendre les touches de Vim de manière ludique. Personnellement j’ai beaucoup joué à Dungeon Crawl qui utilise les touches h
, j
, k
, l
Dans le post précèdent sur docker, j’avais expliqué comment automatiser la création des containers grâce au Dockerfile
aujourd’hui je vais expliquer docker-compose
Les développeurs aiment les liens. Il y a toujours un article à partager et/ou sauvegarder. Pour les sauvegarder, Personnelement j’utilisai un fichier texte ou j’ajoutai en favori dans mon navigateur (avec plus ou moins de bonheur au moment du changement d’ordinateur). Des gens ont décidé de versionner leurs listes de liens sur Github. Cela s’appelle Awesome-(la techno ou le thème que vous vous voulez)
par exemple:
Ben oui la liste est longue. C’est pour cela qu’il existe une awesome-list de awesome
Si vous cherchez à vous former dans une techno, je crois que vous savez par où commencer.
Je continue dans mon exploration de Docker, aujourd’hui nous allons voir comment automatiser la création d’un container à l’aide d’un Dockerfile
.
Nous allons créer un container pour tig.. C’est un interface git qui marche sous un terminal. Pour moi, c’est un magnifique outil de travail. Je m’en sers très souvent (surtout la vue de status (touche S
) puis u
pour ajouter, !
pour reverter, C
pour commit, e
pour lancer mon éditeur (Bien entendu Vim)
Nous allons faire
Dockerfile
qui automatise la partie 1Je commence avec une Ubuntu que je lance en mode interactif.
1
|
|
Je mets à jour ma distribution
1
|
|
J’installe tig (il est dans les dépôts officiels)
1
|
|
A cause du apt-get update
Ubuntu a téléchargé toutes les sources des dépôts dans le répertoire var/lib/apt/lists/
pour ne pas alourdir le container je vais effacer celui-ci
1
|
|
Je lance tig
1 2 |
|
Il n’y a pas de dépot git à la racine c’est normal.
je quitte mon container et je liste
1 2 3 |
|
Je vais le committer.
1
|
|
Je vais le relancer avec la commande suivante.
1
|
|
En gros j’ai crée un lien symbolique qui pointe le répertoire courant de mon ordinateur vers le répertoire project
du container.
je me place dans le répertoire project.
1
|
|
et je lance tig
1
|
|
Si dans le répertoire courant il y a un dépôt git. Normalement l’interface de Tig apparait.
Voila j’ai placé tig dans un container.
On se place dans un répertoire vide
Je crée un fichier DockerFile
avec le contenu suivant
1 2 3 4 5 6 7 8 |
|
WORKDIR
et VOLUME
indique à Docker que le répertoire par défault est project
et que l’on lance tig
On va maintenant demander à docker de builder l’image à l’aide de la commande suivante
1
|
|
On attend un peu.. Et on relance
1
|
|
C’est beaucoup plus rapide.
Quand je liste mon image via la commande suivante
1 2 |
|
Mon container fait 234 méga ! C’est beaucoup pour un simple utilitaire. pour simplifier je vais utiliser une autre distribution alpine-linux (que je ne connaissais pas ..) et le dockerhub suivant qui réduit la distribution à 5 méga !
Voici mon DockerFile
1 2 3 4 5 |
|
Je relance un build.
1
|
|
Maintenant mon container ne fait plus que 24 Méga !
Nous allons créer un nouveau dépôt avec un README.
Que je vais cloner.
1
|
|
Je vais ajouter mon DockerFile, Commiter et Pusher
1 2 3 |
|
Et c’est tout.
Résultat ici
Je pars du principe que vous avez un compte sur DockerHub.
Add Repository->Automated Build
Résultat ici
Le Dockerfile sert à automatiser la création d’image. il est plus simple de stocker le Dockerfile
que le container (puisque Dockerhub s’occupe de faire build)
J’ai crée mon premier dépôt. Ce n’est pas très compliqué. Dans un prochain article, je vais essayer d’expérimenter docker compose
.
J’ai assisté à un Meetup sur VIM.
Le speaker parlait de la correction orthographique sous VIM. Je savais que c’était possible, mais je ne m’en suis jamais servis. J’ai donc décidé de réessayer.. Et j’ai vu de façon différente mes posts sur ce blog. Je suis repasser un peu sur tout.
Voici la commande pour activer/installer la correction automatique
1
|
|
Normalement Vim va télécharger pour vous les différents fichiers sur le Ftp officiel. Il y a une commande interactive pour vous aider dans l’installation. Si jamais il a un souci le wiki français indique de se placer dans son répertoire spell
(chez moi ~/.vim/spell
) et de lancer les commandes suivantes
1 2 3 4 |
|
La touche magique ici est z=
puis les touches du 0..n
. ]s
pour aller à l’erreur suivante [s
pour l’erreur précédente. Il y a différentes touches pour ajouter à son propre dictionnaire. J’avoue que cela ne m’intéresse pas trop de suite.
On peut aussi faire de l’auto complétion ou plutôt de l’auto correction pendant la saisie avec les touche Ctrl-x
+ s
.
Touche | Description |
---|---|
z= |
auto correct si spell est activée |
[s |
erreur précédente |
]s |
erreur suivante |
Crtl-x s |
auto complétion via le dictionnaire |
Warning : Ctrl-s
parfois freeze le terminal (option pratique quand je regarde les tests fonctionnels passés). Pour defreezer le terminal c’est Ctrl-Q
Il manque le correcteur grammatical :-)
je continue sur ma découverte de Docker. Je vais parler de deux containers
Il y a un container fourni par phaudit qui contient déjà des outils pour auditer le code.
Voici la ligne de commande pour l’installer
1
|
|
Et je me place dans mon répertoire projet
phploc
donne le nombre de ligne, le nombre de classes etc ..1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
phpmd
donne un retour sur la qualité du code (nommage des variables etc..)1 2 3 4 5 6 7 |
|
phpcs
erreur de convention de code (Psr-..) et phpcbf
pour les fixer automatiquement1 2 3 4 5 6 7 8 9 10 11 12 |
|
phpcpd
détecte les copier/coller1 2 3 4 5 6 7 8 9 10 11 |
|
d’autre commandes que je connais un peu moins
PHP_Depend pdepend
donnes des analyses, dépendences, complexités etc..
PHP Dead Code Detector phpdcd
détecte le code qui semble ne pas servir.
PhpMetrics phpmetrics
donnes des métriques (Je ne connais pas)
1
|
|
php-cs-fixer
une autre commandes pour fixer le code par SensioL’astuce est de se créer l’alias suivant
1 2 3 |
|
alors les lignes de commandes précédentes deviennent plus simple
1
|
|
Fait par la même équipe.
il est possible de faire une intégration continue en local. Il va lancer les builds en testant toutes versions de php spécifié dans un fichier yml
.
L’installation est très simple il suffit de télécharger le .phar
à l’url suivante
1
|
|
il faut créer un fichier .travis.yml
voici les lignes à ajouter pour un projet en php
1 2 3 4 5 |
|
puis la commande suivante:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
|
En ajoutant un fichier .yml
et sans installer aucune version de php, je peux tester sur trois plateformes mon code. C’est vraiment impressionnant.
Nous avons vus ensemble deux applications très simples qui permettent d’intégrer Docker dans notre workflow.
Merci à l’équipe JoliCode pour ces deux outils.
Je me suis inspiré de la présentation suivante. http://slides.com/jeremyderusse/docker-dev#/5/2
Je suis tombé un peu par hasard sur la critique du livre 10 PRINT , le pdf du livre est gratuit et plutôt joli, il parle de programmation, d’art et d’aléatoire. Tout le livre est centré sur le programme de basic suivant qui donne l’image de la couverture.
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Bon la police d’écriture ne rend pas vraiment justice au code.
C’est possible de faire le même motif en PHP et en peu de code ?
Une solution
1 2 3 4 |
|
Attention array_rand
renvoie la clé et non la valeur d’où le $out[array_rand($out)]
Et puis je me suis dit que array_rand ne sert pas à grand chose.
Donc j’ai essayé
1 2 3 4 |
|
pour générer des nombres aléatoire, il vaut mieux utiliser mt_rand
qui d’après la documentation génère des nombres aléatoires plus intéressants (?). Pour des vrai nombres aléatoires pour les mots de passe, on utilise des librairies voir cette présentation.
Mais il est possible d’initialiser plus d’une constante dans la boucle for.
1 2 3 |
|
On peut aussi faire plus d’une action dans l’incrémentation.
1 2 |
|
On minimise les variables et la notation avec les []
Nous obtenons le code suivant
1
|
|
Je n’avais jamais écris de boucle for sans corps({..}
).
La documentation de PHP est plutôt claire sur le for
Suite à une présentation à une conférence. J’ai commencé à m’y mettre. J’écris ce post en tant que grand débutant..
Docker est une solution de virtualisation d’instance, plus précisément de container. Il y a pas mal de différence avec les différentes visualisations de Virtual box/Xen/VmWare. On isole juste les process et le file-system. Ce qui fait que l’on consomme très peu de processeurs.
Installer docker n’est pas très compliqué sous ubuntu 14.04.
1
|
|
Et c’est tout !
Pour éviter de préfixer sudo
à chaque commande il est plus facile d’ajouter son utilisateur au group docker.
1
|
|
Lancer docker
1
|
|
Cette commande fait plusieurs choses:
ubuntu:14.04
n’existe pas, elle va la télécharger.D’ailleurs si on relance la même commande, on constate que l’image est déjà sur le disque dur.
la commande prend moins d’une seconde. Pourtant on a chargé un container et lancer une commande !
Essayons la commande suivante
1 2 |
|
Nous avons un bash intéractif. -i
mode interactif, et -t
affiche un pseudo terminal
Il faut comprendre que dès que la commande principale est finie, l’instance aussi. Dans le cas Echo 'Hello World'
la commande se finit de suite. Dans le cas de /bin/bash
On spécifie le mode interactif. Donc l’instance continue tant que l’on a pas quitté le bash.
Ouvrons un nouveau terminal
1 2 3 |
|
On voit que mon image est toujours en cours.
La commande docker ps affiche tout les containers allumés pour afficher tout les containers allumés pendant la session. C’est dockers ps -a
On peux inspecter une instance avec la commande
1 2 |
|
Cela renvoie un json.
On peux aussi lister les images disponibles via la commande
1
|
|
Vous voulez télécharger des images
1
|
|
Vous cherchez une images particulières
1
|
|
La liste des images disponibles est disponible sur Docker Hub . D’ailleurs Dockers est très couplé avec DockerHub. DockerHub est un le GitHub pour Docker. On peux très bien faire du Git sans GitHub. C’est la même chose pour docker.
Docker et Git partage aussi la notion de commit et de push.
relancons notre instance
1 2 |
|
Installons un paquet au hasard
1
|
|
On quitte Exit
puis on commit
1 2 |
|
Si je liste les images.
1
|
|
je vois apparaitre mon marc/vim
Je peux ainsi réutiliser mon container ainsi
1
|
|
On peux ainsi se créer ses propres containers. Mais c’est un peu laborieux. Docker utilise des DockerFile
pour automatiser le process. Cela fera un prochain post
docker run -i -t ubuntu:14.10 /bin/bash
lance en mode interactif et un terminal avec la commande Bash.docker run -i -t ubuntu:14.10 'hello world'
docker ps
liste les containers en cours.docker ps -a
liste tout les containers.docker images
liste toutes les images.docker pull centos
pour télécharger une image (tout les images officielles sont sur le Hubdocker inspect uuid
affiche les informations sur l’instance.docker commit uuid name
pour commiter.Bon j’avoue que je débute depuis 2 jours. Ce qui m’impressionne dans Docker c’est la vitesse (moins d’une seconde pour démarrer). C’est plutôt simple d’utilisation. La notion de commit a l’air sympa (Même si au fond c’est l’équivalent d’un snapshot sous vmware). J’espère pouvoir faire mon premier dépôt sous DockerHub bientôt.