Uniformiser les tons de la peau à l’aide du filtre « passe haut inversé »

But de l’opération

Le filtre passe haut inversé (ou inversed high pass – IHP) a pour but de dégrossir rapidement une retouche portrait, en uniformisant le ton de la peau. Cette technique permet de préparer rapidement la retouche, qui gagnera à être finalisée à l’aide d’un Dodge’n burn.

Exemple passe haut inversé

Mode opératoire

Nous allons illustrer ici cette technique avec Photoshop, mais elle pourrait être transposée sur tout autre outil de retouche disposant de calques (Gimp! par exemple).

  1. Dupliquer le calque de base (CTRL/cmd + J en ayant sélectionné le calque de base)
    ihp-copy
  2. Pour plus de lisibilité, renommer le nouveau claque « IHP » (Inversed High Pass)
  3. Appliquer un filtre « flou gaussien » en ajustant le rayon pour obtenir une couleur uniforme pour le teint. Notez le rayon choisi, car vous en aurez besoin à l’étape suivante (7 pixels dans le cas présent).ihp-flou
    Notez que, pour éviter que des détails (yeux, bouche, cheveux… ) ne bavent sur le reste de la peau, vous pouvez utiliser le filtre « Flou de surface », en jouant sur le seuil et plus du rayon. Il est toujours important de mémoriser le rayon, pas le seuil.
  4. Toujours sur le calque dupliqué (« IHP »), appliquez un filtre « Passe-haut » en paramétrant le rayon au triple de la valeur appliquée au flou gaussien (d’où l’interêt d’avoir mémorisé cette valeur)ihp-passehaut
  5. Inverser le calque « IHP » (CTRL/cmd + i)ihp-invert
  6. Modifier le mode de fusion du calque à « lumière linéaire »
    ihp-lumlineaireihp-afterfusion
    On remarque que le résultat est très moche, mais qu’on a obtenu un lissage des tons, tout en préservant la texture de la peau.
  7. Ajouter un masque de fusion noir au calque (alt + clic sur le bouton de création de masque de la fenêtre des calques ou menu « Calque »).
    ihp-addfusion
  8. Peindre ensuite en blanc sur le masque de fusion, avec un pinceau à 100% d’opacité et un faible flux (5%, par exemple), sur les zones à uniformiser.
  9. Si l’effet est trop marqué, vous pouvez réduire l’opacité du calque.

Et voila le travail !

ihp-beforeafter

Docker natif sous MacOS et Windows

Docker sous MacOS ou Windows… mais ça existait déjà !

Jusqu’à présent, Docker n’était disponible nativement que pour les plateformes Linux. Pour le faire fonctionner sous Windows ou MacOS, il était nécessaire d’utiliser une machine virtuelle Linux fonctionnant à l’aide de VirtualBox. Cette solution était intégrée sous la forme de « boot2docker », ou « Docker toolbox ».

Ca fonctionnait, mais l’utilisation d’une solution de virtualisation tierce alourdissait considérablement le fonctionnement et les performances de l’ensemble : difficulté d’installation, de configuration et de maintenance des versions de docker et de VirtualBox, performances et intégration au système dégradées par la nécessité de lancer et de maintenir une machine virtuelle VirtualBox.

Une intégration native

Docker propose désormais, en version Bêta pour l’instant, une version native de sa solution de containérisation applicative, qui ne fait plus appel à VirtualBox, mais exploite les mécanismes de l’OS (Apple Xhyve pour MacOS 10.10+, HyperV pour Windows 10) pour la virtualisation, la gestion du réseau et du système de fichier.

De ce fait, cet outil se retrouve nettement mieux intégré au système d’exploitation. Plus besoin de lancer VirtualBox : le démarrage s’en trouve grandement accéléré et l’utilisation des ressources est grandement améliorée. Les commandes docker sont désormais directement disponibles dans l’invite de commandes, sans nécessiter de passer préalablement par un script de démarrage de la machine virtuelle. Les containers Docker peuvent utiliser directement le système de fichier, sans passer par un montage intermédiaire. Enfin, la maintenance de la solution est grandement facilitée par le fait que tout est pris en charge par une seule application native, intégrant un mécanisme de mise à jour automatique.

Cerise sur le gâteau, on a désormais accès à une icône dans la barre de status pour contrôler rapidement le fonctionnement et la configuration de Docker.

Capture d’écran 2016-07-15 à 09.33.51

L’installateur de l’environnement se charge de migrer automatiquement les images et containers ayant été créés à l’aide de « Boot2docker » ou « Docker Toolbox ».

Capture d’écran 2016-07-15 à 09.15.35

Mis à part ça, on retrouve le fonctionnement traditionnel de docker, en ligne de commande ou avec l’interface graphique Kitematic. C’est juste plus simple à installer, configurer et plus efficace !

De quoi rendre encore plus efficace l’utilisation de docker dans les environnements MacOs et Windows (non testé).

A noter que cette version de Docker ne fonctionne que sous les toutes dernières versions de Windows et MacOs. Si vous utilisez une version plus ancienne de ces systèmes, il faudra continuer à utiliser Docker Toolbox.

DockerWin8

Continuer la lecture de Docker natif sous MacOS et Windows

Créer un GIF animé à l’aide d’ImageMagick

Pour réaliser un GIF animé à partir d’une série d’images fixes, il est possible d’utiliser la commande « convert » d’ImageMagick.

Par exemple, pour créer une animation dans laquelle les images se succéderaient toutes les 15 centièmes de seconde, il faut utiliser la commande suivante :

convert -delay 15 *.jpg danse.gif

Si les fichiers JPEG sont bien classés dans l’ordre désiré pour la séquence, on obtiendra le résultat ci-dessous.

danse

Si vous souhaitez un autre ordre, il faudra remplacer « *.jpg » par la liste des fichiers images, dans l’ordre désiré.

Référence de raccourcis clavier

Le site ShortcutMapper permet de visualiser très rapidement les raccourcis clavier des outils graphiques suivants :

  • Adobe After Effects
  • Adobe Illustrator
  • Adobe Lightroom
  • Adobe Photoshop
  • Autodesk 3dsMax
  • Autodesk Maya
  • Blender
  • Euro Truck Simulator 2
  • JetBrains AppCode
  • JetBrains CLion
  • JetBrains IntelliJ IDEA
  • JetBrains PhpStorm
  • JetBrains PyCharm
  • JetBrains RubyMine
  • JetBrains WebStorm
  • SketchUp
  • Sublime Text
  • The Foundry Nuke
  • Unity 3D

On y visualise les cartes de clavier pour les différentes versions des outils, l’OS utilisé (Windows, Mac ou Linux) et les dispositions de clavier. On peut même ne visualiser que les raccourcis d’un thème donné (par exemple : « modélisation 3D » pour Blender).

raccourcisClavier

A mettre dans ses favoris !

GitKraken : un gestionnaire de dépôt GIT

gitkrakenGitKraken est un gestionnaire graphique de dépôt GIT.

Il s’agit d’un produit OpenSource en plein développement, mais déjà pleinement fonctionnel.

Il facilite grandement la gestion de dépôts complexes, sans frustrer les utilisateurs avancés, habitués à utiliser git en ligne de commande. Il intègre notamment « git flow », qui facilite la mise en place de bons usages dans la gestions des branches de développement (master, develop, feature, release, bugfix). Il se connecte automatiquement aux dépôt GitHub, BitBucket ou tout dépôt accessible via ssh.

L’ergonomie de l’outil est particulièrement réussie. Elle allie estétisme, avec un thème noir très tendance, et efficacité.

GitKraken_ecran

Docker : introduction aux conteneurs applicatifs

docker-logoQu’est-ce que Docker ?

Un porte conteneur applicatif

Docker est un système de gestion de conteneurs applicatifs. Il permet d’isoler des environnements applicatifs et, si besoin, de les relier entre eux.
A l’image de son logo, Docker est donc un porte-conteneurs applicatifs (en forme de baleine…).

Un conteneur applicatif peut intégrer tout type d’application fonctionnant sous Linux : tout ce qui s’installe sur un système Linux peut être isolé dans un conteneur Docker. Il est donc théoriquement possible de configurer l’intégralité des éléments de l’infrastructure dans seul gros conteneur Docker, mais cela ne présenterait alors que peu d’intérêt. L’idée de docker est de décomposer l’infrastructure en petits éléments spécialisés, qu’il faudra assembler pour obtenir le résultat recherché. Chaque conteneur sera ainsi plus simple à mettre en œuvre, à sécuriser et à faire évoluer.

Docker n’est pas un système de virtualisation, mais un système d’isolation applicative. Cette approche présente de nombreux avantages, à commencer par des performances plus intéressantes, en évitant le sur coût de la virtualisation de l’ensemble de l’environnement d’exécution (système d’exploitation).

docker-vm docker-contener

Comme Docker n’est pas un système de virtualisation, il est parfaitement exploitable dans un contexte virtualisé, car il n’ajoute pas son propre hyperviseur. Il est donc particulièrement adapté à une exploitation sur les plate forme « Cloud » (OpenStack, Microsoft Azure, Amazon Web Services… ).

Docker est actuellement uniquement disponible pour les systèmes Linux. Il est toutefois porté dans les environnements Windows et MacOS, sous la forme d’une machine virtuelle (boot2docker).
Des projets de portage mieux intégrés à ces environnements sont en cours.

Exemple d’application

Imaginez que vous vouliez mettre en place un environnement de développement Web. Ce dernier se compose des éléments suivants :

  1. Un serveur Web (NGINX)
  2. Un serveur de base de données (PHP)
  3. Un serveur PhpMyAdmin, permettant d’administrer le contenu de la base de données.

Dans une approche classique, vous installeriez ces trois éléments sur un système Linux classique et feriez en sorte qu’ils cohabitent tous ensemble.

Avec docker, l’approche est différente : vous allez créer un conteneur d’application par élément de votre environnement :

  1. pour le serveur Web
  2. pour la base de données
  3. pour PhpMyAdmin

Ces trois conteneurs seront isolés les uns des autres mais, pour pouvoir interagir entre eux, le serveur Web et PhpMyAdmin devront être liés au serveur de base de données. Pour pouvoir être accessible depuis le navigateur des utilisateurs, le serveur Web devra exposer son port 80 et PhpMyAdmin, son port 8080.

docker-link

Chaque conteneur sera totalement indépendant des autres et il sera possible de faire cohabiter des systèmes théoriquement incompatibles. Le serveur de base de données peut, par exemple, fonctionner sur une base Debian, le serveur Web sur RedHat. Le serveur Web peut fonctionner sur NGINX et PhpMyAdmin sur Apache, par exemple.

Le conteneur MySql ne sera pas visible de l’extérieur, puisqu’aucun de ses ports n’est publié. Il ne sera donc exploitable que depuis les conteneurs « serveur Web » et « PhpMyAdmin ». Nous n’avons donc pas à nous soucier de sa sécurisation vis à vis des attaques exterieures. De même, les serveurs Web et PhpMyAdmin ne sont respectivement accessibles que depuis les ports 80 et 8080, même si d’autres ports n’auraient pas été sécurisés dans les conteneurs (accès SSH ou Telnet, par exemple). Cette ouverture explicite facilite grandement la sécurisation de l’accès aux conteneurs : tout est fermé par défaut, sauf ce qui est ouvert explicitement au moment de la déclaration du conteneur.

Enfin, chaque conteneur pourra évoluer indépendamment des autres, sans se soucier des éventuels effet de bord sur les autres, puisqu’ils sont isolés. Si, par exemple, nous souhaitons désormais faire fonctionner le serveur MySql sur ArchLinux, cela n’aura aucun impact sur les autres conteneurs.

L’écosystème et la communauté Docker

docker-hub

Premier contact avec Docker

KitematicMême s’il commence à exister des interfaces graphiques pour manipuler Docker (kitematic, par exemple), nous allons utiliser les commandes en lignes, qui me semble plus simples à comprendre (on est pas chez fisherprice, après tout…). De toute façon, si vous comprenez le fonctionnement de base (ligne de commande), vous n’aurez aucun mal à utiliser les clickodromes interfaces graphiques, alors que la réciproque n’est pas vraie.

Le Hub Docker

Le hub docker est un élément très important de l’écosystème Docker. Il est accessible à l’adresse http://hub.docker.com et permet le partage de conteneurs Docker prêt à l’emploi. Vous devriez donc y trouver de quoi répondre à vos besoin et, dans le cas contraire, il vous sera possible de proposer vos propres conteneurs.

DockerHub

Chaque conteneur est accompagné d’une fiche explicative, rédigée par son mainteneur et expliquant comment l’utiliser.

Exemple : pour chercher un conteneur correspondant à un système Debian de base, je peux utiliser le moteur de recherche du site DockerHub ou lancer la commande suivante :

docker search debian

Les résultats seront présentés sous la forme d’une liste, faisant apparaître les informations suivantes :

  1. nom de l’image. C’est ce dernier qui devra être utilisé lors de la création d’un conteneur (voir partie suivante). Généralement, les noms respectent la nomenclature suivante : les dépôts officiels ont un nom direct, les variantes sont précédées du nom du mainteneur (exemple : « google/debian »)
  2. Description rapide du contenu de l’image
  3. Évaluation de l’image, sous la forme d’un nombre d’étoiles. Tout utilisateur authentifié sur le hub docker peut attribuer des étoiles à une image
  4. S’agit-il d’une image officielle ?
  5. L’image est-elle construite automatiquement ?

dockerSearchDebianManipulation de conteneurs

Lancement interactif

Entrons dans le vif du sujet et lançons notre premier conteneur. Dans un premier temps, vous allons lancer un système Debian vierge. Pour cela, nous allons utiliser la commande suivante :

docker run -ti debian

DockerRunDebianDans cette ligne :

  1. run : indique que l’on souhaite lancer un nouveau conteneur
  2. l’option « -ti » : le « t » indique que l’on souhaite ouvrir un terminal dans le conteneur et « i », que l’on souhaite interagir avec lui. Nous verrons plus loin que, souvent, les conteneurs sont lancé en mode démon (option « -d »), sans interaction directe avec l’utilisateur.
  3. « debian » correspond au nom de l’image sur laquelle devra se baser le nouveau conteneur. Ce nom a été trouvé sur le docker hub (soit directement en consultat le site Web, soit en utilisant la commande « docker search ‘texte recherché' »).

Après avoir tapé cette ligne de commande, docker va peut-être aller télécharger les éléments de l’images qui ne se trouvent pas déja sur votre système et, ensuite, vous ouvrir une ligne de commande dans votre conteneur.

Vous vous retrouver alors sur une invite de commande correspondant à un système Debian. Il est alors possible d’entrer des commandes spécifiques aux systèmes debian, comme « apt-get update », par exemple.

Si on quitte le terminal, le conteneur se terminera également. C’est ce qui se passe si on exécute la commande « exit » ou si on fait « CTRL+D », par exemple.

Le fait de relancer la commande « docker run -ti debian » créera un nouveau conteneur basé sur l’image Debian. Vous remarquerez que les éventuelles modifications apportées au précédent conteneur ne s’y retrouvent pas. Vous pouvez constater que les fichiers que vous auriez créé ou supprimé n’y figurent plus.

Exemple : lancer un conteneur Debian, puis supprimez le contenu du répertoire « /bin ». Vous allez vous retrouver avec un système totalement inutilisable. Quittez ce conteneur à l’aide de « exit » ou « CTRL-D », puis relancer un nouveau conteneur avec la même ligne de commande pour retrouver un système « tout neuf ».

Docker-exemple1

Même si le système alors obtenu proposera du comportement d’un système Debian, il continue à s’exécuter sur le système hôte, car Docker n’est pas système de virtualisation. Vous pourrez vous en rendre compte en lançant la commande suivante :

root@7c1213bfd4b4:/# uname -a
Linux 7c1213bfd4b4 4.1.13-boot2docker #1 SMP Fri Nov 20 19:05:50 UTC 2015 x86_64 GNU/Linux

Vous remarquerez que le noyau en cours de fonctionnement est celui de la machine hôte (un système « boot2docker » dans le cas présent, car l’exemple est exécutée sur un Macintosh) et non un noyau Debian.

Si vous lancez un nouveau conteneur basé sur une image différente (RedHat, par exemple), vous remarquerez que la commande « uname -a » retourne la même valeur.

Lancement en tâche de fond

Il est possible de lancer un conteneur en tâche de fond, en remplaçant l’option « -ti » par « -d » :

docker run -d debian

Vous remarquerez que, dans ce cas, le conteneur se lance et s’arrête dans la foulée. Ce n’est pas une erreur, mais le comportement normal de docker. Lorsqu’un conteneur est lancé, il exécute une commande et, dès que cette termine se termine, le conteneur s’arrête dans la foulée.

Dans le cas présent, le conteneur debian va lancer un shell mais, en l’absence d’interaction utilisateur, celui-ci va se fermer, entraînant la fermeture du shell.

Essayons donc de lancer un conteneur basé sur une autre image, comme le serveur Web NGINX par exemple.

docker run -d nginx

On peut se rendre compte que, dans ce cas, le conteneur s’exécute en tâche de fond à l’aide de la commande suivante :

docker ps

DockerPs

On a donc un serveur Web qui tourne avec les ports 80 et 443 qui sont actifs… mais inaccessibles.

Il est donc nécessaire de déclarer une redirection de ports au moment de la création du conteneur. Cette redirection est réalisée à l’aide de l’option « -p » de la commande « docker run ».

On arrête la machine en cours d’exécution :

docker stop <CONTAINER_ID>

NB : au lieu d’utiliser l’id complet, il est possible de ne saisir que le début, tant que ce dernier est discriminant. Dans notre cas, comme il n’y a qu’une seule machine en cours d’exécution, on pourra se contenter de préciser « 1 ».

docker stop 1

On constate ensuite, à l’aide de la commande « docker ps », que plus aucun conteneur n’est actif.

On peut donc relancer un nouveau conteneur en précisant que le port 80 de ce dernier devra être rediriger vers le port 8080 de la machine hôte.

docker run -d -p 8080:80 nginx

DockerRunRedirect

On peut constater dans le résultat de la commande « docker ps » que le port 80 de la machine hôte est désormais redirigé vers le port 8080 du conteneur. Si on ouvre un navigateur vers ce port, on pourra admirer la page Web du serveur NGINX du conteneur.

DockerNginx

Si on souhaite entrer dans un conteneur qui tourne en tâche de fond, il est possible d’y lancer une commande interactive à l’aide de « docker exec ». Pour lancer un shell de commande dans notre conteneur NGINX, on utilisera la commande suivante :

docker exec -ti <container id> /bin/bash

Je peux alors aller modifier le contenu de mon conteneur, pour éditer, par exemple, le fichier HTML par défaut, qui se trouve dans le répertoire « /usr/share/nginx/html ». Pour ce faire, il est nécessaire d’installer un éditeur, « vim » par exemple.

apt-get update
apt-get install vim
vi /usr/share/nginx/html/index.html

Une fois les modifications apportées dans le fichier HTML, je peux sortir de la commande en tapant « exit » ou CTRL-D. Dans ce cas, le conteneur continuera à tourner, car sa commande principale (« nginx ») continue à s’exécuter.

On le constate en tapant la commande suivante :

docker ps

Par contre, le contenu du conteneur a été modifié par l’installation de « vim » et la modification du fichier « index.html ». Je peux consulter la liste des modifications en utilisant la commande suivante :

docker diff <CONTAINER ID>

Cette commande me retourne la liste de toutes les modifications apportées au conteneur, comparé à l’image de départ. Ces modifications seront perdues si je relance le conteneur à partir de l’image.

Pour conserver ces modifications, il est possible d’enregistrer le conteneur actuel sous la forme d’une nouvelle image, à l’aide de la commande « docker commit ».

docker commit <CONTAINER ID> <nom de l'image>

Dès lors, il sera possible de relancer de nouveaux conteneurs basés sur cette image en utilisant la commande « docker run -d -p 8080:80 <nom de l’image>.

Une autre solution aurait consister à rediriger, au moment de la création du conteneur, le répertoire « /usr/share/nginx/html » vers un répertoire de la machine hôte. Cette redirection est réalisée à l’aide de l’option « -v » de la commande « docker run ».

docker run -d -p 8080:80 -v /Users/remi/nginx/:/usr/share/nginx/html/ <nom de l'image>

Le contenu du répertoire « /usr/share/nginx/html/ » du conteneur correspond donc à celui du répertoire « /Users/remi/nginx/ » de la machine hôte. Si on y crée un fichier « index.html », celui-ci sera publié par le serveur NGINX. Par conséquent, le contenu du répertoire sera conservé sur la machine hôte et il ne disparaitra plus avec le conteneur.

Si vous utilisez boot2docker pour MacOs, vous retrouvez sans problème l’ensemble de vos répertoires depuis votre machine « boot2docker ».

Il en est de même lorsque vous fonctionnez sous Windows, car vous retrouverez les arborescences de vos disques à la racine, dans des répertoires dont le nom correspond à la lettre de vos lecteurs. Le contenu du disque C se retrouvera, par exemple, dans le répertoire /c. Petite attention toutefois, lorsque vous faites référence à ces arborescence, vous devrez doubler le premier « / ». Ainsi, pour rediriger le répertoire « c:\temp » dans « /tmp » du conteneur, il faudra utiliser la commande suivante :

docker run -ti -v //c/temp:/tmp debian

Liens entre conteneurs

Il est possible de définir des liens entre les conteneurs en utilisant l’option « –link » au moment de leur création. Ainsi, les commandes suivantes permettent de créer deux conteneurs qui se voient mutuellement : un serveur mysql et un serveur WordPress.

docker run -d -e MYSQL_ROOT_PASSWORD=admin --name mydb mysql
docker run -d --link mydb:mysql --name mywp -p 8080:80 wordpress

A noter que l’option « –name » a été utilisée pour faciliter la manipulation des conteneurs à partir de leur nom et non de leur id.

Dans cet exemple, la machine « mywp » a vu ajouté dans son fichier « /etc/hosts » une entrée correspondant à la machine « mysql ». « mywp » est ainsi capable d’accéder au conteneur « mydb », sous l’alias « mysql ».

En interrogeant le port 8080 de la machine hôte, on accédera donc à la page d’installation de WordPress. Pour vérifier que les données sont bien stockées dans la base du conteneur « mydb », on peut créer un troisième conteneur contenant PhpMyAdmin relié à la base de données.

docker run --link mydb:mysql --name mypma -p 90:80 nazarpc/phpmyadmin

On peut donc dès lors ouvrir le port 90 de la machine hôte pour constater que, après installation de WordPress, les tables seront bien créées dans la base MySql (compte « root », mot de passe « admin »).

Gestion des images

Lorsque vous utilisez une image pour la première fois, vous avez remarqué que docker la télécharge localement avant de lancer le conteneur. Ainsi, les lancements suivants de conteneurs basés sur la même image seront beaucoup plus rapides.

Il est possible de consulter la liste des images locales à l’aide de la commande suivante :

docker images

DockerImages

Si une image n’est plus utilisée, il est possible de la supprimer avec la commande suivante :

docker rmi <IMAGE ID>

NB : au lieu d’utiliser l’id complet, il est possible de ne saisir que le début, tant que ce dernier est discriminant. Exemple : « 3 » est suffisant pour identifier l’image « 3c7295e3e956 », car aucune autre image ne commence par ce nombre. Par contre, « 1 » ne serait pas suffisant et il faudrait utiliser, soit « 18 », soit « 1d ».

Comme vous avez peut-être pu vous en rendre compte lors de leur téléchargement, les images ne sont pas monolithiques, mais décomposées en couches successives. Ainsi, les couches de l’images debian seront certainement utilisées par une autre image, contenant le serveur MySql installé dans un système Debian. Idem entre Ubuntu et Debian, qui ont des bases communes. L’utilisation d’une nouvelle image ne téléchargera donc que les parties qui n’ont pas déjà été téléchargées.

Construire son propre conteneur : le DockerFile

Finalités

Un DockerFile est un fichier décrivant la façon dont une image doit être construite. C’est, en quelque sorte, la recette de l’image. Il décrit les différentes étapes de la construction de l’image.

Syntaxe du DockerFile

Le dockerfile doit se trouver dans un répertoire dédié et se nommer « Dockerfile » (exactement).

Exemple de dockerfile :

FROM debian
 MAINTAINER Rémi LEBLOND <remi@xx.com>
 RUN apt-get update
 RUN apt-get -y install nginx
 RUN apt-get -y install vim
 ADD index.html /var/www/html/
 ADD script.sh /root/
 RUN chmod +x /root/script.sh
 EXPOSE 80
 CMD ["/root/script.sh"]

Ce docker file décrit donc les étapes suivantes :

  1. on se base sur une image existante : debian
  2. on met à jour la base des paquets et on installe « nginx » et « vim ». A noter que les commandes passées ne doivent pas attendre d’interaction utilisateur, comme des confirmations par exemple. C’est la raison pour laquelle les commandes « apt-get » sont passées avec l’option « -y ».
  3. on copie le fichier « index.html », situé dans le même répertoire que le dockerfile, dans le répertoire « /var/www/html » du conteneur
  4. idem pour le fichier « script.sh », qui l’on copie dans « /root »
  5. on ajoute les droits d’exécution sur le script
  6. on déclare que le conteneur pourra utiliser le port 80
  7. enfin, on finit par déclarer le script qui sera lancé au démarrage du conteneur (et qui provoquera la fin du conteneur lorsqu’il sera fini.

Construction et lancement

Pour construire la nouvelle image, il faut se placer dans le répertoire du dockerfile et lancer la commande suivante :

docker build -t <nom de l'image> .

On constate ensuite que cette image a été ajoutée, en lançant la commande suivante :

docker images

Il est alors possible de lancer un nouveau conteneur basé sur la nouvelle image en lançant la commande suivante :

docker run -d -p 8080:80 <nom de l'image>

Docker Compose

L’outil « docker-compose »

L’outil « docker-compose » permet de définir le contenu et la configuration des conteneurs ainsi que les liens entre eux.

Ainsi, il est possible de lancer, en une seule commande, l’ensemble de l’infrastructure. Jusqu’à présent, il était nécessaire de lancer successivement plusieurs commandes « docker run » pour arriver au même résultat.

Syntaxe du fichier

La composition est définie dans un fichier de configuration au format YML : « docker-compose.yml ». Vous remarquerez qu’on y défini tous les composants de l’infrastructure (images de base, liens entre conteneurs, paramètres, redirection de répertoires et de port réseau).

my-db:
 image: mysql
 environment:
 - MYSQL_ROOT_PASSWORD=admin
 volumes:
 - mysql:/var/lib/mysql

my-wordpress:
 image: wordpress
 ports:
 - 8080:80
 links:
 - my-db:mysql

my-pma:
 image: nazarpc/phpmyadmin
 links:
 - my-db:mysql
 ports:
 - 9090:80

Pour lancer cette infrastructure, il suffit de taper la commande suivante, en se plaçant préalablement dans le répertoire contenant le fichier « docker-compose.ml » :

docker-compose up

DevDocs.io : documentation unifiée des languages de développement

Le site DevDocs regroupe la documentation des principaux langages du Web au sens large :

  • HTML, CSS, Sass, SVG, HTTP, JavaScript, DOM, jQuery…
  • C, C++, PHP,
  • Cordova, AngularJS, Drupal, Symphony…

Toutes les documentations sont regroupées en un même point et l’utilisateur peut choisir les langages qu’il souhaite consulter. La présentation unifiée de la documentation facilite la lecture.

Un moteur de recherche permet de trouver rapidement la documentation souhaitée.

A noter la possibilité de consulter le site hors ligne (sur certains navigateurs seulement).

Capture d'écran de WebDocs.io
Capture d’écran de WebDocs.io

DevDocs.io

Imagemagick : la commande « convert »

Imagemagick-logoUne suite d’outils

ImageMagick est une suite d’outils en ligne de commandes, permettant la manipulation d’images numériques. On y retrouve plusieurs outils, comme « convert », qui permet de convertir des images.

Conversion de format

convert <image originale> <image finale>

Il suffit de préciser, dans le noms des fichiers, le format des images de départ et d’arrivée, pour convertir automatiquement le format des images.

Exemples :

convert image.png image.jpeg
convert image.bmp image.png
convert image.svg image.png

Transformation d’images

Il est possible de préciser des paramètres de conversion, comme la taille du fichier ou la couleur de l’arrière-plan.

Redimensionnement

Ce paramètre est bien utile lors de la conversion de format vectoriels, comme le SVG.

Redimensionner l’image à une taille donnée, en conservant les proportions :

convert -resize 400 image.svg image.png
convert -resize 400x400 image.svg image.png

Redimensionnement proportionnel :

convert -resize 50% image.svg image.png

Imagemagick-logoImagemagick-logo50

Changer l’arrière-plan

Peut être appliqué à la conversion d’images vectorielles, comme le SVG. A noter que les images comportant un canal alpha de transparence partielles ne peuvent pas recevoir une couleur d’arrière-plan avec cette méthode. Il fait alors utiliser l’ajout d’un bordure colorée (voir ci-dessous).
Par défaut, l’arrière-plan de l’image convertie sera blanc, comme si le formation de destination ne supportait pas la transparence.

Si on souhaite obtenir un arrière-plan transparent, il faut préciser :

convert -background none image.svg image.png

logo

Pour avoir un arrière-plan coloré, il faut préciser le code RVB de la couleur souhaitée au paramètre « background ».

On peut utiliser trois syntaxes différentes pour spécifier la couleur de fond (bleu, ici) :

convert -background '#00F' image.svg image.png
convert -background 'rgb(0,0,255)' image.svg image.png
convert -background 'rgb(0,0,100)' image.svg image.png

logo-bleu

Passage en négatif

convert -negate image.png image.jpeg

Imagemagick-logo-negate

Ajout d’une bordure

Ajout d’une bordure bleue:

convert -border 1 -bordercolor '#00F' image.png image.jpeg>

Imagemagick-logo-border

Intégrer « convert » dans une chaine de traitement

Il est possible d’intégrer la commande dans une chaine de traitement (chaine de « pipe »). En effet, « convert » sait aussi bien traiter les flux entrants que générer des flux sortant.

Ainsi, si on souhaite convertir une image SVG en bitmap, avec un fond vert et une bordure rouge, on pourra utiliser la chaîne de traitement suivante (on envoie le flux PNG sur la sortie de la première commande et on récupère ce flux dans l’entrée standard de la deuxième, à l’aide du caractère ‘-‘) :

convert -resize 400x400 -background 'rgb(0,100,0)' logo.svg png:- | convert -border 10 -bordercolor '#F00' - logo-bl-border.png

logo-bl-border

Emmet LiveStyle : éditeur de feuille de style (CSS, LESS, SCSS) temps réel bidirectionnel

logo_LiveStyle

LiveStyle est un outil permettant de modifier en temps réel les feuilles de styles CSS, LESS ou SCSS de façon bidirectionnel :

  • Vous modifiez votre feuille de style et constatez directement les effets dans le navigateur;
  • Vous modifiez votre feuille de style directement dans votre navigateur et votre code est modifié dans l’éditeur de texte.

Disponible pour Windows et Mac, en tant que plugin pour Chrome et SublimeText.

Emmet LiveStyle — the first bi-directional real-time edit tool for CSS, LESS and SCSS

Emmet