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

21
Editions ENI Docker Prise en main et mise en pratique sur une architecture micro-services (2 e édition) Collection Epsilon Table des matières

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

Page 1: Docker - Editions ENI...Editions ENI Docker Prise en main et mise en pratique sur une architecture micro-services (2e édition) Collection Epsilon Table des matières Table des matières

Editions ENI

Docker Prise en main et mise en pratique

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

CollectionEpsilon

Table des matières

Page 2: Docker - Editions ENI...Editions ENI Docker Prise en main et mise en pratique sur une architecture micro-services (2e édition) Collection Epsilon Table des matières 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.

Page 3: Docker - Editions ENI...Editions ENI Docker Prise en main et mise en pratique sur une architecture micro-services (2e édition) Collection Epsilon Table des matières Table des matières

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

Page 4: Docker - Editions ENI...Editions ENI Docker Prise en main et mise en pratique sur une architecture micro-services (2e édition) Collection Epsilon Table des matières Table des matières

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

Page 5: Docker - Editions ENI...Editions ENI Docker Prise en main et mise en pratique sur une architecture micro-services (2e édition) Collection Epsilon Table des matières Table des matières

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

Page 6: Docker - Editions ENI...Editions ENI Docker Prise en main et mise en pratique sur une architecture micro-services (2e édition) Collection Epsilon Table des matières Table des matières

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

Page 7: Docker - Editions ENI...Editions ENI Docker Prise en main et mise en pratique sur une architecture micro-services (2e édition) Collection Epsilon Table des matières Table des matières

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

Page 8: Docker - Editions ENI...Editions ENI Docker Prise en main et mise en pratique sur une architecture micro-services (2e édition) Collection Epsilon Table des matières Table des matières

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

Page 9: Docker - Editions ENI...Editions ENI Docker Prise en main et mise en pratique sur une architecture micro-services (2e édition) Collection Epsilon Table des matières Table des matières

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

Page 10: Docker - Editions ENI...Editions ENI Docker Prise en main et mise en pratique sur une architecture micro-services (2e édition) Collection Epsilon Table des matières Table des matières

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

Page 11: Docker - Editions ENI...Editions ENI Docker Prise en main et mise en pratique sur une architecture micro-services (2e édition) Collection Epsilon Table des matières Table des matières

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

Page 12: Docker - Editions ENI...Editions ENI Docker Prise en main et mise en pratique sur une architecture micro-services (2e édition) Collection Epsilon Table des matières Table des matières

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

Page 13: Docker - Editions ENI...Editions ENI Docker Prise en main et mise en pratique sur une architecture micro-services (2e édition) Collection Epsilon Table des matières Table des matières

Editions ENI

DockerDéploiement de microservices

sous Linux ou Windows (Docker Swarm, Docker Compose,

Docker Machine)

CollectionEpsilon

Table des matières

Page 14: Docker - Editions ENI...Editions ENI Docker Prise en main et mise en pratique sur une architecture micro-services (2e édition) Collection Epsilon Table des matières 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

Page 15: Docker - Editions ENI...Editions ENI Docker Prise en main et mise en pratique sur une architecture micro-services (2e édition) Collection Epsilon Table des matières Table des matières

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

Page 16: Docker - Editions ENI...Editions ENI Docker Prise en main et mise en pratique sur une architecture micro-services (2e édition) Collection Epsilon Table des matières Table des matières

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

Page 17: Docker - Editions ENI...Editions ENI Docker Prise en main et mise en pratique sur une architecture micro-services (2e édition) Collection Epsilon Table des matières Table des matières

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

Page 18: Docker - Editions ENI...Editions ENI Docker Prise en main et mise en pratique sur une architecture micro-services (2e édition) Collection Epsilon Table des matières Table des matières

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

Page 19: Docker - Editions ENI...Editions ENI Docker Prise en main et mise en pratique sur une architecture micro-services (2e édition) Collection Epsilon Table des matières Table des matières

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

Page 20: Docker - Editions ENI...Editions ENI Docker Prise en main et mise en pratique sur une architecture micro-services (2e édition) Collection Epsilon Table des matières Table des matières

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

Page 21: Docker - Editions ENI...Editions ENI Docker Prise en main et mise en pratique sur une architecture micro-services (2e édition) Collection Epsilon Table des matières Table des matières

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