Docker - Editions ENI...Editions ENI Docker Prise en main et mise en pratique sur une architecture...

Post on 21-May-2020

47 views 1 download

Transcript of Docker - Editions ENI...Editions ENI Docker Prise en main et mise en pratique sur une architecture...

Editions ENI

Docker Prise en main et mise en pratique

sur une architecture micro-services (2e édition)

CollectionEpsilon

Table des matières

1Table des matières

Avant-propos

Chapitre 1

Introduction à Docker

1. Docker comme alternative légère à la virtualisation . . . . . . . . . . . . . 131.1 L'approche par virtualisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141.2 Docker pour optimiser l'usage des ressources . . . . . . . . . . . . . . 151.3 Positionnement de Docker par rapport à la virtualisation. . . . . 18

2. Principe des conteneurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.1 Principe des conteneurs industriels . . . . . . . . . . . . . . . . . . . . . . . 222.2 Docker et l'approche normalisée . . . . . . . . . . . . . . . . . . . . . . . . . 23

3. Les fondements de Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243.1 Namespaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243.2 Cgroups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263.3 LXC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263.4 Libcontainer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273.5 Système de fichiers en couches . . . . . . . . . . . . . . . . . . . . . . . . . . 29

3.5.1 Principe d'isolation des fichiers . . . . . . . . . . . . . . . . . . . . . 293.5.2 Approche par virtualisation . . . . . . . . . . . . . . . . . . . . . . . 293.5.3 Utilité des systèmes de fichiers en couches . . . . . . . . . . . 303.5.4 Gestion des modifications de fichiers . . . . . . . . . . . . . . . . 323.5.5 Dernière couche en écriture . . . . . . . . . . . . . . . . . . . . . . . 343.5.6 Technologies utilisées . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

4. Les plus de Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

5. L’écosystème Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

Les éléments à télécharger sont disponibles à l'adresse suivante :http://www.editions-eni.fr

Saisissez la référence de l'ouvrage EP2DOC dans la zone de recherche et validez. Cliquez sur le titre du livre puis sur le bouton de téléchargement.

2

© E

dit

ions

EN

I -

All r

ights

rese

rved

Prise en main et mise en pratique

Docker

6. Architectures de services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386.1 Historique des architectures de services . . . . . . . . . . . . . . . . . . . 39

6.1.1 Principes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396.1.2 Approche EAI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396.1.3 Approche SOA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406.1.4 Microservices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406.1.5 Lien à l'urbanisation des SI . . . . . . . . . . . . . . . . . . . . . . . . 41

6.2 Architecture de microservices . . . . . . . . . . . . . . . . . . . . . . . . . . . 416.2.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416.2.2 Avantages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436.2.3 Inconvénients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

6.3 Apport de Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476.4 Fil conducteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

Chapitre 2

Premiers pas

1. Installation de Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491.1 Utiliser des machines préconfigurées . . . . . . . . . . . . . . . . . . . . . 501.2 Installation de Docker sur Linux . . . . . . . . . . . . . . . . . . . . . . . . . 62

1.2.1 Prérequis système . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621.2.2 Installation par gestionnaire de paquets . . . . . . . . . . . . . 621.2.3 Installation par script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

1.3 Installation de Docker sous Windows . . . . . . . . . . . . . . . . . . . . 681.3.1 Un paradoxe résolu. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681.3.2 Installation sur Windows 10 . . . . . . . . . . . . . . . . . . . . . . . 701.3.3 Installation sur Windows Server 2016 . . . . . . . . . . . . . . . 741.3.4 Machine virtuelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

2. Hello World, Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 762.1 Démarrage d'un conteneur simple . . . . . . . . . . . . . . . . . . . . . . . 762.2 Que s'est-il passé ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

2.2.1 Récupération de l'image . . . . . . . . . . . . . . . . . . . . . . . . . . 782.2.2 Anatomie de l'image obtenue . . . . . . . . . . . . . . . . . . . . . . 79

3Table des matières

2.2.3 Lancement du processus . . . . . . . . . . . . . . . . . . . . . . . . . . 822.2.4 Arrêt du conteneur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

3. Utiliser des images Docker préexistantes . . . . . . . . . . . . . . . . . . . . . . 863.1 Le Docker Store. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

3.1.1 Le principe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 863.1.2 Recherche et qualification d'images . . . . . . . . . . . . . . . . . 883.1.3 Exemple de recherche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 903.1.4 Cas des images communautaires. . . . . . . . . . . . . . . . . . . . 923.1.5 Compléments sur les images officielles. . . . . . . . . . . . . . . 943.1.6 Lien avec le registre Docker Hub . . . . . . . . . . . . . . . . . . . . 963.1.7 Recherche par la ligne de commande . . . . . . . . . . . . . . . . 973.1.8 Précautions sur une image non officielle. . . . . . . . . . . . . 100

3.2 Gestion du compte DockerHub et dépôts privés . . . . . . . . . . . 1063.2.1 Création d'un compte. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1073.2.2 Caractéristiques du compte . . . . . . . . . . . . . . . . . . . . . . . 1083.2.3 Automated build et compte GitHub. . . . . . . . . . . . . . . . 1103.2.4 Connexion au compte en ligne de commande . . . . . . . . 1173.2.5 Webhook sur évènement de push dans Docker Hub . . . 1183.2.6 Déconnexion des comptes Docker Hub et Github. . . . . 120

4. Un second conteneur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1224.1 Récupération de l'image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1224.2 Explication des tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1234.3 Premier lancement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1254.4 Lancement en mode interactif . . . . . . . . . . . . . . . . . . . . . . . . . 1284.5 Persistance des modifications sous forme d'une image . . . . . . 1304.6 Prise en main du client Docker . . . . . . . . . . . . . . . . . . . . . . . . . 133

4.6.1 Ménage dans les conteneurs . . . . . . . . . . . . . . . . . . . . . . 1334.6.2 Ménage dans les images . . . . . . . . . . . . . . . . . . . . . . . . . 1344.6.3 Le grand ménage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1344.6.4 Suppression automatique à la sortie . . . . . . . . . . . . . . . . 1354.6.5 Affectation d'un nom de conteneur . . . . . . . . . . . . . . . . 1364.6.6 Modification du point d'entrée par défaut . . . . . . . . . . . 1374.6.7 Envoi de variables d'environnement . . . . . . . . . . . . . . . . 138

4

© E

dit

ions

EN

I -

All r

ights

rese

rved

Prise en main et mise en pratique

Docker

4.6.8 Modification du hostname . . . . . . . . . . . . . . . . . . . . . . . 1404.7 Manipulation des conteneurs . . . . . . . . . . . . . . . . . . . . . . . . . . 141

4.7.1 Lancement en mode bloquant . . . . . . . . . . . . . . . . . . . . 1414.7.2 Lancement en arrière-plan . . . . . . . . . . . . . . . . . . . . . . . . 1434.7.3 Gestion correcte du cycle de vie des conteneurs. . . . . . . 1484.7.4 Exposition de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . 1514.7.5 Supervision des conteneurs . . . . . . . . . . . . . . . . . . . . . . . 153

5. Retours sur les premiers pas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155

Chapitre 3

Création de vos propres images

1. Création manuelle d'une nouvelle image . . . . . . . . . . . . . . . . . . . . . 1571.1 Installation d'un logiciel dans un conteneur . . . . . . . . . . . . . . 1571.2 Persistance de l'image pour une utilisation future . . . . . . . . . . 1601.3 Utilisation de l'image créée . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1611.4 Connexion depuis la machine hôte . . . . . . . . . . . . . . . . . . . . . 1631.5 Suite des opérations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

2. Utilisation d’un Dockerfile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1662.1 Intérêt des fichiers Dockerfile . . . . . . . . . . . . . . . . . . . . . . . . . . 1662.2 Utilisation d'un fichier Dockerfile . . . . . . . . . . . . . . . . . . . . . . 1682.3 Résultats de l'utilisation d'un Dockerfile complet . . . . . . . . . . 1702.4 Anatomie d'un fichier Dockerfile . . . . . . . . . . . . . . . . . . . . . . . 171

2.4.1 FROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1722.4.2 RUN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1722.4.3 ENV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1732.4.4 VOLUME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1752.4.5 COPY. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1792.4.6 ENTRYPOINT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1802.4.7 EXPOSE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1822.4.8 CMD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

5Table des matières

2.5 Notre premier Dockerfile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1832.5.1 Création et test du script . . . . . . . . . . . . . . . . . . . . . . . . . 1832.5.2 Création du Dockerfile . . . . . . . . . . . . . . . . . . . . . . . . . . . 1852.5.3 Génération de l'image. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1872.5.4 Lancement du conteneur . . . . . . . . . . . . . . . . . . . . . . . . . 1882.5.5 Arrêt et relance du conteneur . . . . . . . . . . . . . . . . . . . . . 1892.5.6 Gestion des paramètres . . . . . . . . . . . . . . . . . . . . . . . . . . 1912.5.7 Reconstruction de l'image et cache . . . . . . . . . . . . . . . . . 192

2.6 Commandes additionnelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1942.6.1 Gestion des fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1942.6.2 Notion de contexte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1952.6.3 Retours sur l'affectation du processus à démarrer . . . . . 1962.6.4 Remarque sur le format ligne de commande

ou exécution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1992.6.5 Commandes diverses . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201

3. Partage et réutilisation simple des images . . . . . . . . . . . . . . . . . . . . 2053.1 Envoi sur votre compte Docker Hub. . . . . . . . . . . . . . . . . . . . . 2053.2 Export et import sous forme de fichiers . . . . . . . . . . . . . . . . . . 210

4. Bonnes pratiques. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2114.1 Principe du cache sur les images . . . . . . . . . . . . . . . . . . . . . . . . 2114.2 Principe du cache à la compilation . . . . . . . . . . . . . . . . . . . . . . 216

4.2.1 Retour sur les images intermédiaires . . . . . . . . . . . . . . . 2164.2.2 Anatomie d'une compilation d'image . . . . . . . . . . . . . . . 2204.2.3 Analyse d'une modification du Dockerfile . . . . . . . . . . . 2224.2.4 Gestion correcte des étiquettes . . . . . . . . . . . . . . . . . . . . 2254.2.5 Invalidation du cache par modification

de l'image de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2294.2.6 Invalidation du cache par modification du contexte . . 234

4.3 Conséquences sur l'écriture des Dockerfile . . . . . . . . . . . . . . . . 2364.3.1 Le problème sur les opérations non idempotentes . . . . 2364.3.2 Contournement du problème de cache . . . . . . . . . . . . . . 2394.3.3 Effets bénéfiques sur le nombre et la taille des images . 2434.3.4 Ordonnancement des commandes dans le Dockerfile . . 245

6

© E

dit

ions

EN

I -

All r

ights

rese

rved

Prise en main et mise en pratique

Docker

4.4 Conséquences sur le choix des images de base . . . . . . . . . . . . . 2464.4.1 La bonne image de base . . . . . . . . . . . . . . . . . . . . . . . . . . 2464.4.2 Votre propre image de base . . . . . . . . . . . . . . . . . . . . . . . 248

4.5 Arborescence recommandée. . . . . . . . . . . . . . . . . . . . . . . . . . . . 2514.5.1 Avantages d'une arborescence type . . . . . . . . . . . . . . . . 2514.5.2 Intégration des fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . 2524.5.3 Limitation du contexte . . . . . . . . . . . . . . . . . . . . . . . . . . 254

4.6 La question du processus unique. . . . . . . . . . . . . . . . . . . . . . . . 2554.6.1 Principe général . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2554.6.2 Exception au principe général avec Supervisor. . . . . . . . 2564.6.3 Critique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2574.6.4 Approche intermédiaire . . . . . . . . . . . . . . . . . . . . . . . . . . 258

5. Pour aller plus loin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260

Chapitre 4

Installation d’un registre privé

1. Premiers pas pour un registre privé . . . . . . . . . . . . . . . . . . . . . . . . . 2611.1 Remarque préliminaire importante. . . . . . . . . . . . . . . . . . . . . . 2621.2 Avertissement sur l'ancien registre . . . . . . . . . . . . . . . . . . . . . . 2621.3 Image Docker en local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2631.4 Pointer sur un registre donné. . . . . . . . . . . . . . . . . . . . . . . . . . . 2651.5 Registre sur un réseau public . . . . . . . . . . . . . . . . . . . . . . . . . . . 268

1.5.1 Scénario et préparation des machines . . . . . . . . . . . . . . 2691.5.2 Démarrage du registre . . . . . . . . . . . . . . . . . . . . . . . . . . . 2701.5.3 Dépôt de l'image depuis une autre machine . . . . . . . . . . 2731.5.4 Utilisation de l'image depuis une troisième machine. . . 2761.5.5 Suppression de l'image sur la machine source . . . . . . . . 277

2. Un registre plus professionnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2792.1 Gestion de la persistance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279

2.1.1 Gestion locale par volume . . . . . . . . . . . . . . . . . . . . . . . . 2792.1.2 Remarque sur SELinux . . . . . . . . . . . . . . . . . . . . . . . . . . . 2812.1.3 Un stockage plus sécurisé . . . . . . . . . . . . . . . . . . . . . . . . 282

7Table des matières

2.2 Sécurisation du registre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2842.2.1 Préparation des clés pour le canal crypté . . . . . . . . . . . . 2842.2.2 Mise en place du frontal Nginx . . . . . . . . . . . . . . . . . . . . 2872.2.3 Accès par le client Docker . . . . . . . . . . . . . . . . . . . . . . . . 2932.2.4 Outils additionnels de diagnostic . . . . . . . . . . . . . . . . . . 2952.2.5 Génération du fichier des utilisateurs autorisés . . . . . . . 2972.2.6 Ajout de l'authentification dans Nginx . . . . . . . . . . . . . 2982.2.7 Correction sur les headers . . . . . . . . . . . . . . . . . . . . . . . . 3002.2.8 Gestion de la connexion . . . . . . . . . . . . . . . . . . . . . . . . . 301

2.3 Un vrai registre en production . . . . . . . . . . . . . . . . . . . . . . . . . 302

3. Utilisation d'un service de registre dans le cloud . . . . . . . . . . . . . . . 3043.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3043.2 Offre payante de Docker Hub . . . . . . . . . . . . . . . . . . . . . . . . . . 3063.3 Azure Container Registry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309

3.3.1 Préparation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3093.3.2 Création du registre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3103.3.3 Paramétrage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313

4. Approches complémentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3154.1 L'API du registre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3154.2 Mise en place d'un miroir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3154.3 Mise en place d'un cache pour les paquetages . . . . . . . . . . . . . 319

4.3.1 Contournement possible . . . . . . . . . . . . . . . . . . . . . . . . . 3194.3.2 Mise en œuvre d'un cache de paquetages . . . . . . . . . . . . 321

Chapitre 5

Mise en œuvre d’une architecture logicielle

1. Présentation de l'application exemple . . . . . . . . . . . . . . . . . . . . . . . . 3251.1 Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3251.2 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3271.3 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3301.4 Utilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332

8

© E

dit

ions

EN

I -

All r

ights

rese

rved

Prise en main et mise en pratique

Docker

1.5 Principes à l'œuvre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3331.5.1 Un mot sur les architectures de microservices . . . . . . . . 3331.5.2 Lien avec la programmation SOLID . . . . . . . . . . . . . . . . 334

2. Création de l'architecture exemple . . . . . . . . . . . . . . . . . . . . . . . . . . 3352.1 Principes de construction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3352.2 Détails du service optimizer . . . . . . . . . . . . . . . . . . . . . . . . . . . 336

2.2.1 Fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3362.2.2 Intégration dans Docker . . . . . . . . . . . . . . . . . . . . . . . . . 3412.2.3 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3442.2.4 Remarques. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346

2.3 Détails du service calculator . . . . . . . . . . . . . . . . . . . . . . . . . . . 3472.3.1 Fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3472.3.2 Intégration dans Docker . . . . . . . . . . . . . . . . . . . . . . . . . 3492.3.3 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351

2.4 Mise en place de liens entre conteneurs . . . . . . . . . . . . . . . . . . 3542.5 Détails du service reporting . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359

2.5.1 Fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3592.5.2 Dockerisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3612.5.3 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362

2.6 Détails du service notifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3642.6.1 Fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3642.6.2 Dockerisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3672.6.3 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368

2.7 Détails du service de persistance . . . . . . . . . . . . . . . . . . . . . . . . 3722.8 Mise en œuvre éventuelle d’une image de base . . . . . . . . . . . . 3732.9 Détails du service portal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376

2.9.1 Fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3762.9.2 Dockerisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3792.9.3 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380

2.10 État atteint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381

9Table des matières

3. Redéployer automatiquement avec Docker Compose . . . . . . . . . . 3823.1 Principe de Docker Compose . . . . . . . . . . . . . . . . . . . . . . . . . . . 3823.2 Écriture du fichier docker-compose.yml . . . . . . . . . . . . . . . . . . 3833.3 Mise en œuvre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386

3.3.1 Préparation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3863.3.2 Lancement des conteneurs. . . . . . . . . . . . . . . . . . . . . . . . 3873.3.3 Gestion des conteneurs . . . . . . . . . . . . . . . . . . . . . . . . . . 389

3.4 Parallélisation des traitements . . . . . . . . . . . . . . . . . . . . . . . . . 3903.5 Limites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392

4. Exploitation d'une infrastructure Docker . . . . . . . . . . . . . . . . . . . . . 3934.1 Le réseau dans Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393

4.1.1 Mode de fonctionnement standard (bridge). . . . . . . . . . 3934.1.2 Modes de fonctionnement alternatifs. . . . . . . . . . . . . . . 3964.1.3 Support des liens entre conteneurs . . . . . . . . . . . . . . . . . 3994.1.4 Autres options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4014.1.5 Limites de la couche réseau existante . . . . . . . . . . . . . . . 401

4.2 Les volumes Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4024.2.1 Le problème de la persistance. . . . . . . . . . . . . . . . . . . . . . 4024.2.2 Les volumes comme solution simple. . . . . . . . . . . . . . . . 4034.2.3 Lien direct sur un répertoire local . . . . . . . . . . . . . . . . . . 4054.2.4 Partage de volumes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4064.2.5 Gestion des volumes orphelins . . . . . . . . . . . . . . . . . . . . 4074.2.6 Sophistication de l'approche . . . . . . . . . . . . . . . . . . . . . . 4084.2.7 Application à la gestion des logs . . . . . . . . . . . . . . . . . . . 4094.2.8 Plus loin avec les volumes . . . . . . . . . . . . . . . . . . . . . . . . 410

Chapitre 6

Déploiement dans un cluster

1. Description globale de l'approche . . . . . . . . . . . . . . . . . . . . . . . . . . . 4111.1 Objectif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4111.2 État des lieux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4121.3 Déroulement de l'exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413

10

© E

dit

ions

EN

I -

All r

ights

rese

rved

Prise en main et mise en pratique

Docker

1.4 Avertissement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413

2. Montage d'un cluster Swarm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4142.1 Fonctionnement résumé de Swarm . . . . . . . . . . . . . . . . . . . . . 4142.2 Description des machines utilisées . . . . . . . . . . . . . . . . . . . . . . 4152.3 Initialisation du cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4192.4 Attachement des autres machines. . . . . . . . . . . . . . . . . . . . . . . 4192.5 Prise en main à distance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420

3. Déploiement sur le cluster Swarm . . . . . . . . . . . . . . . . . . . . . . . . . . 4213.1 Principes des services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4213.2 Envoi des images sur le registre . . . . . . . . . . . . . . . . . . . . . . . . . 4233.3 Lancement d'une stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4253.4 Passage à l'échelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429

4. Quelques informations supplémentaires sur Swarm . . . . . . . . . . . . 4324.1 Ce qui s'est passé sous le capot . . . . . . . . . . . . . . . . . . . . . . . . . 432

4.1.1 Commandes de diagnostic . . . . . . . . . . . . . . . . . . . . . . . . 4324.1.2 Gestion du réseau overlay et des ports . . . . . . . . . . . . . . 435

4.2 Pour aller plus loin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4364.2.1 Arrêt de la plateforme . . . . . . . . . . . . . . . . . . . . . . . . . . . 4364.2.2 Branchement sur un registre privé . . . . . . . . . . . . . . . . . 4374.2.3 Gestion des contraintes . . . . . . . . . . . . . . . . . . . . . . . . . . 4384.2.4 Déploiement incrémental (rolling update) . . . . . . . . . . . 439

Chapitre 7

Encore plus loin avec Docker

1. Docker dans votre usine logicielle . . . . . . . . . . . . . . . . . . . . . . . . . . . 4431.1 Docker à tous les étages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4431.2 Produire des images en sortie de build. . . . . . . . . . . . . . . . . . . . 445

1.2.1 Positionnement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4451.2.2 Utilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4451.2.3 Conseils de mise en place. . . . . . . . . . . . . . . . . . . . . . . . . 446

11Table des matières

1.3 Utiliser des conteneurs pour l’usine logicielle. . . . . . . . . . . . . . 4471.3.1 Positionnement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4471.3.2 Utilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4471.3.3 Conseils de mise en place . . . . . . . . . . . . . . . . . . . . . . . . . 448

1.4 Utiliser des conteneurs pour les tests . . . . . . . . . . . . . . . . . . . . 4491.4.1 Positionnement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4491.4.2 Utilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4491.4.3 Conseils de mise en place . . . . . . . . . . . . . . . . . . . . . . . . . 4501.4.4 Variante associée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450

1.5 Retour sur le registre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452

2. Avant de partir en production avec Docker . . . . . . . . . . . . . . . . . . . 4532.1 Sécurité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4532.2 Restriction sur les ressources . . . . . . . . . . . . . . . . . . . . . . . . . . . 454

3. Docker et Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455

4. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459

Editions ENI

DockerDéploiement de microservices

sous Linux ou Windows (Docker Swarm, Docker Compose,

Docker Machine)

CollectionEpsilon

Table des matières

1Table des matières

Chapitre 1

Introduction

1. Contenu du livre. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.1 Objectifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.2 Prérequis de lecture. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.3 Avertissement sur les versions de Docker . . . . . . . . . . . . . . . . . . 101.4 Approche simplificatrice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2. Principes de séparation de l’application, du déploiement et du support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.1 Industrialisation du déploiement . . . . . . . . . . . . . . . . . . . . . . . . 132.2 Principes de structuration du système d'information . . . . . . . . 132.3 Découplage obtenu par Docker . . . . . . . . . . . . . . . . . . . . . . . . . . 15

Les éléments à télécharger sont disponibles à l'adresse suivante :http://www.editions-eni.fr

Saisissez la référence de l'ouvrage EPDOCDE dans la zone de recherche et validez. Cliquez sur le titre du livre puis sur le bouton de téléchargement.

Chapitre 2

Docker en réseau

1. Mise en réseau de Docker. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171.1 Approche théorique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

1.1.1 Problématique de montée en charge . . . . . . . . . . . . . . . . . 171.1.2 Solution découplée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211.1.3 Conséquences sur l'approche initiale. . . . . . . . . . . . . . . . . 22

1.2 Fonctionnement pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231.2.1 Notion de réseau. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231.2.2 Docker Swarm ou Swarm mode ? . . . . . . . . . . . . . . . . . . . 241.2.3 Les différents types de nœuds . . . . . . . . . . . . . . . . . . . . . . 271.2.4 Fonctionnalités du cluster . . . . . . . . . . . . . . . . . . . . . . . . . 28

2

Déploiement de microservices sous Linux ou Windows

Docker

2. Préparation de machines avec Vagrant . . . . . . . . . . . . . . . . . . . . . . . . 282.1 Principe de Vagrant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282.2 Création d'une machine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292.3 Provisionnement de Docker sur la machine . . . . . . . . . . . . . . . . 352.4 Accès à la machine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

2.4.1 Gestion du certificat. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362.4.2 Connexion par PuTTY. . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

2.5 Mise en place des autres machines . . . . . . . . . . . . . . . . . . . . . . . 44

3. Docker Swarm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443.1 Initialisation du cluster Swarm . . . . . . . . . . . . . . . . . . . . . . . . . . 453.2 Liaison des agents au cluster Swarm. . . . . . . . . . . . . . . . . . . . . . 473.3 Ajout d'un manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503.4 Limites à l'ajout de managers. . . . . . . . . . . . . . . . . . . . . . . . . . . . 523.5 Promotion d'un nœud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543.6 Suppression d'un nœud du cluster Swarm . . . . . . . . . . . . . . . . . 563.7 Utilisation simple du cluster Swarm. . . . . . . . . . . . . . . . . . . . . . 58

4. Docker Machine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654.1 Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

4.2 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 664.3 Mise en œuvre pour une machine seule . . . . . . . . . . . . . . . . . . . 674.4 Commandes supplémentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . 724.5 Accès aux machines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 774.6 Cycle de vie des machines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 784.7 Mise en œuvre pour un ensemble de machines . . . . . . . . . . . . . 80

4.7.1 Choix du driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 804.7.2 Pilotage Azure par la ligne de commande . . . . . . . . . . . . . 824.7.3 Analyse des options pour le driver Azure . . . . . . . . . . . . . 884.7.4 Dernières recommandations avant la création

d'une machine. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 954.7.5 Déploiement d'une machine dans Azure

par Docker Machine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 964.7.6 Mise en place du cluster Swarm . . . . . . . . . . . . . . . . . . . . 984.7.7 Options Swarm dans la ligne de commande . . . . . . . . . 102

3Table des matières

4.7.8 Suppression des ressources. . . . . . . . . . . . . . . . . . . . . . . . 103

5. Docker for Azure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1055.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1055.2 Préparation du Service Principal . . . . . . . . . . . . . . . . . . . . . . . . 1085.3 Remplissage des autres paramètres . . . . . . . . . . . . . . . . . . . . . . 1115.4 Accès au cluster. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1185.5 Quelques remarques complémentaires . . . . . . . . . . . . . . . . . . . 121

6. Azure Container Service. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1246.1 Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1246.2 Création d'un cluster ACS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1256.3 Accès au cluster. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1306.4 Quelques remarques complémentaires . . . . . . . . . . . . . . . . . . . 136

6.4.1 Fonctionnement interne du cluster ACS . . . . . . . . . . . . 1366.4.2 Autres orchestrateurs disponibles . . . . . . . . . . . . . . . . . . 1376.4.3 Arrêter le cluster ACS. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1386.4.4 Autres solutions de CaaS . . . . . . . . . . . . . . . . . . . . . . . . . 138

Chapitre 3

Distribution logicielle

1. Une première application en mode cluster . . . . . . . . . . . . . . . . . . . . 1391.1 Présentation de l'application exemple . . . . . . . . . . . . . . . . . . . . 140

1.1.1 Fichier docker-compose.yml . . . . . . . . . . . . . . . . . . . . . . 1401.1.2 Fichier Dockerfile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1421.1.3 Fichier package.json . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1431.1.4 Fichier index.js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

1.2 Déploiement manuel sur le cluster Swarm. . . . . . . . . . . . . . . . 1471.2.1 Accès au cluster. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1471.2.2 Préparation des images . . . . . . . . . . . . . . . . . . . . . . . . . . . 1481.2.3 Lancement des services. . . . . . . . . . . . . . . . . . . . . . . . . . . 1491.2.4 Premier test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1541.2.5 Mise en place d'un réseau overlay dédié . . . . . . . . . . . . . 1551.2.6 Validation du fonctionnement . . . . . . . . . . . . . . . . . . . . 157

4

Déploiement de microservices sous Linux ou Windows

Docker

1.3 Passage à l'échelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1601.4 Alternative d'installation automatisée . . . . . . . . . . . . . . . . . . . 162

1.4.1 Le retour de Docker Compose . . . . . . . . . . . . . . . . . . . . . 1621.4.2 Détail du vocabulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1631.4.3 Déploiement d'une stack . . . . . . . . . . . . . . . . . . . . . . . . . 1651.4.4 Gestion par le registre. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1671.4.5 Alternative pour l'envoi sur Docker Hub . . . . . . . . . . . . 1691.4.6 Diagnostic et validation du fonctionnement . . . . . . . . . 1791.4.7 Utilisation des réseaux Docker . . . . . . . . . . . . . . . . . . . . 1841.4.8 Passage à l'échelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1931.4.9 Utilisation du DNS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1951.4.10Arrêt de la stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

1.5 Le futur avec les bundles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1981.5.1 Principe des bundles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1981.5.2 Passage de Docker en mode expérimental . . . . . . . . . . . 1991.5.3 Création du bundle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2021.5.4 Déploiement du bundle . . . . . . . . . . . . . . . . . . . . . . . . . . 2051.5.5 Dernière remarque sur les DAB . . . . . . . . . . . . . . . . . . . . 205

2. Informations complémentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2072.1 Évolutions supplémentaires dans la grammaire Dockerfile . . . 207

2.1.1 Obsolescense du mot-clé MAINTAINER . . . . . . . . . . . . 2072.1.2 Passage d'argument à la compilation d'image. . . . . . . . . 2072.1.3 Gestion de l'état de santé des conteneurs . . . . . . . . . . . . 2082.1.4 Approche complètement découplée . . . . . . . . . . . . . . . . 210

2.2 Évolutions supplémentaires dans la grammaire Docker Compose. . . . . . . . . . . . . . . . . . . . . 2122.2.1 Coopération entre image et build . . . . . . . . . . . . . . . . . . 2122.2.2 Composition de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . 2132.2.3 Détails sur les versions . . . . . . . . . . . . . . . . . . . . . . . . . . . 213

3. Mise en pratique sur un exemple plus complexe . . . . . . . . . . . . . . . 2143.1 Contexte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2143.2 Modifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214

3.2.1 Récupération de la release . . . . . . . . . . . . . . . . . . . . . . . . 214

5Table des matières

3.2.2 Modifications du fichier Docker Compose . . . . . . . . . . . 2153.2.3 Modifications annexes . . . . . . . . . . . . . . . . . . . . . . . . . . . 220

3.3 Mise en œuvre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2213.3.1 Préparation du Swarm . . . . . . . . . . . . . . . . . . . . . . . . . . . 2213.3.2 Ouverture de la sécurité . . . . . . . . . . . . . . . . . . . . . . . . . . 2233.3.3 Récupération du code de l'application. . . . . . . . . . . . . . . 2253.3.4 Compilation éventuelle des images . . . . . . . . . . . . . . . . . 2263.3.5 Lancement de l'application . . . . . . . . . . . . . . . . . . . . . . . 2263.3.6 Test de l'application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2283.3.7 Fermeture pour sécurité . . . . . . . . . . . . . . . . . . . . . . . . . . 231

Chapitre 4

Maintien en condition opérationnelle d’un cluster

1. Utilisation d'un registre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2331.1 Docker Hub ou registre privé. . . . . . . . . . . . . . . . . . . . . . . . . . . 2331.2 Registre privé as a Service avec Azure . . . . . . . . . . . . . . . . . . . . 234

2. Gestion de la mise à jour des services . . . . . . . . . . . . . . . . . . . . . . . . 239

2.1 Lien entre évolution logicielle et Docker. . . . . . . . . . . . . . . . . . 2392.2 Problématique associée. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2402.3 Principe du rolling update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2412.4 Bonnes pratiques sur les versions applicatives . . . . . . . . . . . . . 2422.5 Mise en œuvre sur un service dans Swarm. . . . . . . . . . . . . . . . 2432.6 Autres ajustements possibles du service . . . . . . . . . . . . . . . . . . 249

3. Métadonnées et aiguillage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2543.1 Problématique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2543.2 Contraintes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2553.3 Mise en application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2563.4 Couplage lâche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258

4. Répartition de charge dynamique . . . . . . . . . . . . . . . . . . . . . . . . . . . 2594.1 Problématique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2594.2 Solution apportée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261

6

Déploiement de microservices sous Linux ou Windows

Docker

4.3 Fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2614.4 Préparation du fichier Docker Compose . . . . . . . . . . . . . . . . . . 2624.5 Ajout des instructions Traefik. . . . . . . . . . . . . . . . . . . . . . . . . . 2654.6 Test de fonctionnement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2674.7 Montage dans une stack Docker . . . . . . . . . . . . . . . . . . . . . . . . 272

Chapitre 5

Docker pour Windows

1. Docker et Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2731.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2731.2 Plusieurs fonctionnements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274

1.2.1 Docker Toolbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2741.2.2 Docker for Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274

2. Docker dans Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2762.1 Windows 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276

2.1.1 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2762.1.2 Concurrence sur VT-X . . . . . . . . . . . . . . . . . . . . . . . . . . . 280

2.1.3 Modes de conteneurs disponibles . . . . . . . . . . . . . . . . . . 2822.1.4 Premier essai . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285

2.2 Windows Server 2016. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2882.2.1 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2882.2.2 Niveau d'isolation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2902.2.3 Utilisation depuis un client . . . . . . . . . . . . . . . . . . . . . . . 290

3. Spécificités sous Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2963.1 Images de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296

3.1.1 Nécessité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2963.1.2 Windows Server Core. . . . . . . . . . . . . . . . . . . . . . . . . . . . 2963.1.3 Nano Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2973.1.4 Compatibilité et disponibilité . . . . . . . . . . . . . . . . . . . . . 298

3.2 Différences avec Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3023.2.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3023.2.2 Dockerfile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302

7Table des matières

3.2.3 Gestion du réseau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3043.2.4 Autres différences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305

3.3 Versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306

4. Paramétrages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3074.1 Configuration standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3074.2 Mode conteneurs Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3104.3 Cas particulier des lecteurs de disque . . . . . . . . . . . . . . . . . . . . 311

5. Premiers conteneurs sous Windows . . . . . . . . . . . . . . . . . . . . . . . . . 3125.1 Remarque préliminaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3125.2 Remplacement de Nginx par IIS . . . . . . . . . . . . . . . . . . . . . . . . 313

5.2.1 Création du Dockerfile . . . . . . . . . . . . . . . . . . . . . . . . . . . 3135.2.2 Compilation du Dockerfile en une image . . . . . . . . . . . . 3145.2.3 Lancement du conteneur . . . . . . . . . . . . . . . . . . . . . . . . . 3155.2.4 Test du conteneur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3165.2.5 Suppression du conteneur . . . . . . . . . . . . . . . . . . . . . . . . 3175.2.6 Mise en place de volumes. . . . . . . . . . . . . . . . . . . . . . . . . 318

Chapitre 6

Industrialisation

1. Objectifs d'industrialisation du cluster . . . . . . . . . . . . . . . . . . . . . . . 319

2. Vérification du fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3192.1 Supervision matérielle du cluster. . . . . . . . . . . . . . . . . . . . . . . . 321

2.1.1 Définition des tâches . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3212.1.2 Outillage standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

2.2 Supervision des conteneurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3242.2.1 Définition des tâches . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3242.2.2 Approche bétail plutôt qu’animal domestique . . . . . . . . 3262.2.3 Outillage possible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328

2.3 Supervision applicative. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3302.3.1 Définition des tâches . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3302.3.2 Approches d'outillage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331

8

Déploiement de microservices sous Linux ou Windows

Docker

2.3.3 Point de vue de l'utilisateur . . . . . . . . . . . . . . . . . . . . . . . 332

3. Pilotage du cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333

4. Bonnes pratiques logicielles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3334.1 Importance de la normalisation des logs. . . . . . . . . . . . . . . . . . 3344.2 API de statut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3344.3 Retry policies et circuit breakers . . . . . . . . . . . . . . . . . . . . . . . . 3354.4 Répartition de la charge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337

4.4.1 Load-balancing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3374.4.2 Inversion de consommation . . . . . . . . . . . . . . . . . . . . . . 338

4.5 Gestion du multitenant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341

5. Gestion de la performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3435.1 Passage à l'échelle automatique . . . . . . . . . . . . . . . . . . . . . . . . . 3435.2 Cas particulier du cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3445.3 Alignement sur le CPU et les threads . . . . . . . . . . . . . . . . . . . . 3455.4 Approche "production only" . . . . . . . . . . . . . . . . . . . . . . . . . . . 346

6. Gestion de la persistance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348

7. Sécurité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349

7.1 Évolution de la prise en compte. . . . . . . . . . . . . . . . . . . . . . . . . 3497.2 Sécurisation du cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3517.3 Pratique de sécurisation des ports . . . . . . . . . . . . . . . . . . . . . . . 3517.4 Sécurité sur l'utilisation des images. . . . . . . . . . . . . . . . . . . . . . 352

7.4.1 Choix des versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3537.4.2 Distribution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3537.4.3 Docker Security Benchmark . . . . . . . . . . . . . . . . . . . . . . 354

8. Pour aller plus loin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3548.1 Autres technologies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3548.2 Cluster hybride . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3568.3 Déploiement et intégration continus . . . . . . . . . . . . . . . . . . . . 356

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357