Docker sur Windows 10 : problème avec Hyper-V

Docker dispose désormais d’une mouture sérieuse pour Windows 10 : Docker Desktop.

Il y a quelques pré-requis à vérifier mais l’installeur fait tout le nécessaire à votre place :

  • activation de Hyper-V
  • activation de WSL 2
  • activation des containers Windows / Linux

Malgré ce joli package, j’ai rencontré une difficulté pour faire fonctionner Docker. Son installation se passe bien mais Docker ne démarre jamais. C’est Hyper-V qui dysfonctionne à cause d’un paramètre de sécurité « Exploit protection » de Windows : Code flow guard (CFG).

Voici l’erreur rencontrée dans le manager Hyper-V lorsqu’on demande la connexion au serveur local :

Ce paramètre « Exploit protection » semble empêcher le programme vmcompute.exe de fonctionner alors que Hyper-V en a besoin pour contrôler ses VMs. Son état d’activation dépend des mises à jour installées sur votre Windows.

Sur un Windows en français, vous trouverez le paramètre à désactiver ici (à travers la recherche du menu Démarrer) :

  • Sécurité Windows
  • Contrôle des applications et du navigateur
  • Exploit protection > Paramètres d’Exploit protection
  • Paramètres du programme
  • \System32\vmcompute.exe > Modifier
  • Protection du flux de contrôle > Désactiver

Une fois ce paramètre désactivé, redémarrez vmcompute dans un PowerShell en admin :

  • net start vmcompute

Vous devriez alors pouvoir faire fonctionner Hyper-V et obtenir une connexion à votre votre « ordinateur local » dans le manager Hyper-V. A partir de là, Docker devrait démarrer sans difficultés !

Voici la source de ma solution.

Warmup : préparez les caches de votre site

Une commande toute simple pour préparer les caches de votre site avant son ouverture en production :

wget -r -np -p -k [URL]

Détail des options

  • -r : suivre récursivement tous les liens de chaque page
  • -np : empêcher le robot de remonter l’arborescence du site
  • -p : télécharger toutes les ressources de la page (css, images, Javascript…)
  • -k : convertir les liens des pages pour utiliser les ressources locales téléchargées

RequireJS et ParsleyJS : utiliser les shims pour traduire vos contrôles de formulaires

ParsleyJS est une librairie Javascript permettant de contrôler la saisie de ses formulaires. Elle est livrée avec de nombreuses traductions de ses messages d’erreurs. Si vous gérez les dépendances de votre projet avec RequireJS, voici comment charger élégamment les traductions de Parsley.

Configuration des dépendances avec RequireJS

On indique à RequireJS le path vers les modules « parsley », « parsleyfr » et « parsleyfrextra ». Puis, on utilise les shims pour définir 2 nouvelles dépendances du module « parsley » :

  • parsleyfr
  • parsleyfrextra
require.config({
    paths: {
        "jquery":           "libs/jquery/dist/jquery",
        "underscore":       "libs/underscore/underscore",
        "backbone":         "libs/backbone/backbone",
        "parsley":          "libs/parsleyjs/dist/parsley",
        "parsleyfr":        "libs/parsleyjs/src/i18n/fr",
        "parsleyfrextra":   "libs/parsleyjs/src/i18n/fr.extra",
    },
    shim: {
        "parsley": {
            deps: ["parsleyfr", "parsleyfrextra"]
        },
    }
});

Déclaration d’une dépendance à Parsley

Ensuite, dans nos modules qui dépendent de Parsley, on indique normalement la dépendance dans la fonction « define ».

define([
        "backbone",
        "underscore",
        "parsley"
    ],
    function(Backbone, _) {

    }
);

Grâce aux shims, RequireJS va charger les modules « parsleyfr » et « parsleyfrextra » avant le module « parsley ». Vous pourrez ensuite changer la locale de vos contrôles de formulaires en appelant la méthode « setLocale » de ParsleyJS.

window.Parsley.setLocale('fr');

Un peu de lecture

MySQL : obtenir la taille des bases de données en ligne de commande

Requête

SELECT table_schema AS "Database name", SUM(data_length + index_length) / 1024 / 1024 AS "Size (MB)"
FROM information_schema.TABLES
GROUP BY table_schema

Résultat

+--------------------+--------------+
| Database name      | Size (MB)    |
+--------------------+--------------+
| database 1         | 607.70312500 |
| database 2         | 647.92187500 |
| information_schema |   0.00878906 |
| database 3         | 417.16526890 |
| database 4         | 567.17187500 |
+--------------------+--------------+

Envoyez les logs de vos applications à vos développeurs

Petite astuce simple et rapide à mettre en œuvre pour que votre équipe de développement devienne proactive : envoyez les logs de vos applications par mail à vos développeurs.

Exemple de cronjob

0 0 * * * echo "Subject: Ma super appli : error.log" | cat - /path/to/log/folder/error.log | /usr/sbin/sendmail -t mesdeveloppeurs@maboite.com

En cadeau, un super tutoriel sur les cronjobs : http://code.tutsplus.com/tutorials/scheduling-tasks-with-cron-jobs–net-8800