18
Docker Prise en main et mise en pratique sur une architecture micro-services 2 e édition Jean-Philippe GOUIGOUX

Docker - static.fnac-static.com · Docker Prise en main et mise en pratique Docker Prise en main et mise en pratique sur une architecture micro-services Jean-Philippe GOUIGOUX est

Embed Size (px)

Citation preview

Page 1: Docker - static.fnac-static.com · Docker Prise en main et mise en pratique Docker Prise en main et mise en pratique sur une architecture micro-services Jean-Philippe GOUIGOUX est

Doc

ker

Pris

e en

mai

n et

mis

e en

pra

tique

Docker Prise en main et mise en pratique sur une architecture micro-services

Jean-Philippe GOUIGOUX est Directeur Technique d’un éditeur de logiciels pour lequel il a mené une refonte de l’architecture autour de microservices urba-nisés. Il est reconnu Microsoft MVP (Most Valuable Professional) dans diverses spécialités depuis 8 ans. Auteur de plusieurs livres et articles scientifiques, il intervient régulièrement à l’Université ainsi que lors de conférences Microsoft Experiences, Agile Tour ou BreizhCamp pour partager ses connaissances. Ce livre sur Docker est l’occasion pour lui d’aider les lecteurs à s’approprier de façon structurée ce nouvel outil qui est en passe de révolutionner le monde de l’informatique comme la virtualisation l’a fait en son temps.

Ce livre sur Docker s’adresse à tout développeur, architecte, administrateur souhaitant aboutir à une connaissance structurée de Docker en s’appuyant sur la mise en pratique d’un exemple concret de déploiement d’une application en conteneurs. Une connaissance même minimale de Linux et des réseaux TCP/IP est un prérequis indispensable pour tirer le meilleur profit de ce livre qui est organisé en deux parties. La première partie détaille les mécanismes constituant les fondements de Docker avec des exemples de manipulations sur des exercices pratiques. Docker faisant partie d’un écosystème foisonnant et extrêmement mouvant, l’auteur s’attache à fournir au lecteur des bases solides sur son fonctionne-ment et sur ses concepts les plus importants pour que son utilisation soit efficace et pour maîtriser les besoins élémentaires des utilisateurs professionnels (création d’images simples et solides, connais-sance des bonnes pratiques, sécurité...).Dans une seconde partie, l’auteur met en œuvre une infrastructure complète autour d’une application exemple, en architecture micro services. Le point de vue adopté par l’auteur est celui d’un éditeur de logiciels dont le besoin est de mettre en œuvre des services logiciels sur une architecture souple et évolutive. Cette mise en pratique sur une application réaliste permet de décrire les astuces de déploie-ment de conteneurs pour Java, Core .NET, Python et Node.js/AngularJS. L’application ainsi créée est ensuite déployée dans un cluster de machines géré par Docker Swarm.Des éléments sont en téléchargement sur le site www.editions-eni.fr et sur le compte GitHub des Edi-tions ENI. Ainsi, le lecteur est en mesure de mettre en œuvre la totalité de l’exemple traité dans le livre.

Avant-propos • Introduction à Docker • Premiers pas • Création de vos propres images • Installation d’un registre privé • Mise en œuvre d’une architecture logicielle • Déploiement dans un cluster • Encore plus loin avec Docker

Les chapitres du livre

Téléchargementwww.editions-eni.fr.fr

sur www.editions-eni.fr : b codes sources des microservices.b fichiers de définition des images

(dockerfile).b fichier Docker Compose pour orchestrer

les conteneurs.

ISSN : 1960-3444ISBN : 978-2-409-01237-2

54 €

DockerPrise en main

et mise en pratique sur une architecture

micro-services

2e édition

Nouvelle éditionJean-Philippe GOUIGOUX

Pour plus d’informations :

Page 2: Docker - static.fnac-static.com · Docker Prise en main et mise en pratique Docker Prise en main et mise en pratique sur une architecture micro-services Jean-Philippe GOUIGOUX est

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.

lcroise
Tampon
Page 3: Docker - static.fnac-static.com · Docker Prise en main et mise en pratique Docker Prise en main et mise en pratique sur une architecture micro-services Jean-Philippe GOUIGOUX est

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 - static.fnac-static.com · Docker Prise en main et mise en pratique Docker Prise en main et mise en pratique sur une architecture micro-services Jean-Philippe GOUIGOUX est

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 - static.fnac-static.com · Docker Prise en main et mise en pratique Docker Prise en main et mise en pratique sur une architecture micro-services Jean-Philippe GOUIGOUX est

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 - static.fnac-static.com · Docker Prise en main et mise en pratique Docker Prise en main et mise en pratique sur une architecture micro-services Jean-Philippe GOUIGOUX est

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 - static.fnac-static.com · Docker Prise en main et mise en pratique Docker Prise en main et mise en pratique sur une architecture micro-services Jean-Philippe GOUIGOUX est

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 - static.fnac-static.com · Docker Prise en main et mise en pratique Docker Prise en main et mise en pratique sur une architecture micro-services Jean-Philippe GOUIGOUX est

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 - static.fnac-static.com · Docker Prise en main et mise en pratique Docker Prise en main et mise en pratique sur une architecture micro-services Jean-Philippe GOUIGOUX est

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 - static.fnac-static.com · Docker Prise en main et mise en pratique Docker Prise en main et mise en pratique sur une architecture micro-services Jean-Philippe GOUIGOUX est

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 - static.fnac-static.com · Docker Prise en main et mise en pratique Docker Prise en main et mise en pratique sur une architecture micro-services Jean-Philippe GOUIGOUX est

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 - static.fnac-static.com · Docker Prise en main et mise en pratique Docker Prise en main et mise en pratique sur une architecture micro-services Jean-Philippe GOUIGOUX est

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 - static.fnac-static.com · Docker Prise en main et mise en pratique Docker Prise en main et mise en pratique sur une architecture micro-services Jean-Philippe GOUIGOUX est

Chapitre 2

Premiers pas

Premiers pas

1. Installation de Docker

Pourvu que vous utilisiez une version assez récente de Linux, l'installation deDocker est un modèle de simplicité. Le but de la présente section n'est pas dedétailler le processus pour toutes les distributions de Linux, ni d'entrer dansdes options complexes de quota sur la mémoire ou de paramétrage de sécurité,mais simplement de donner les instructions de base pour que le lecteur soit enmesure de réaliser les exemples qui suivront.

La page dédiée à l’installation de Docker sur le site de référence https://docs.docker.com/engine/installation/ est exhaustive sur le sujet, avec en par-ticulier les options sur les différentes distributions Linux, les modes de miseen place sur les plateformes cloud, etc. Notre but, dans la présente section, estseulement de faire en sorte que le lecteur, qu’il souhaite utiliser une machinedistante ou bien installer Docker sur son système d’exploitation Linux ouWindows, trouve rapidement la méthode la plus standard pour ce faire.

Le produit étant désormais disponible sous forme de plusieurs éditions, unpoint sera fait pour résumer les principales différences. Le mode de mise à jourde Docker étant une option à déterminer lors de l’installation, les différentscanaux proposés par Docker pour cette opération seront également expliqués.

lcroise
Tampon
Page 14: Docker - static.fnac-static.com · Docker Prise en main et mise en pratique Docker Prise en main et mise en pratique sur une architecture micro-services Jean-Philippe GOUIGOUX est

© E

dit

ions

EN

I -

All r

ights

rese

rved

50Prise en main et mise en pratique

Docker

1.1 Utiliser des machines préconfigurées

Si le lecteur dispose d'un compte sur un cloud, la façon la plus simple est deprovisionner une machine supportant Docker sur ce genre de plateforme.Ainsi, l'installation est déjà réalisée, à jour et dans une configuration dont onpeut attendre qu'elle soit optimale.

Remarque

Presque toutes les plateformes proposent des abonnements gratuits pour unepériode d'essai, voire des offres sans frais sur lesquelles seule la consommationde ressources est limitée. Pour se former à une technologie, ces solutions sontidéales, car elles permettent de ne pas avoir à modifier quoi que ce soit surson ordinateur personnel, ni perdre du temps sur des questions d'installation oude prérequis (qui n'auront aucune valeur d'apprentissage, car complètementdifférentes dans un autre contexte).

Encore une fois, le but du présent chapitre n'est pas de décrire de manièreexhaustive les méthodes pour lancer Docker sur les clouds existants. Unexemple sera simplement donné sur Microsoft Azure.

dConnectez-vous sur le portail Azure (http://portal.azure.com).

dCliquez sur Nouveau en haut à gauche.

dAccédez au Marketplace.

dLancez une recherche sur "docker".

Page 15: Docker - static.fnac-static.com · Docker Prise en main et mise en pratique Docker Prise en main et mise en pratique sur une architecture micro-services Jean-Philippe GOUIGOUX est

51Premiers pasChapitre 2

La liste des résultats donne une idée du nombre de possibilités pour disposerd’un Docker sur Azure. Certaines machines sont dédiées à Docker, d’autressont éditées par Docker pour supporter des serveurs applicatifs (par exemplePostgreSQL), certaines proposent un système d’exploitation Linux avecDocker préinstallé (comme Docker on Ubuntu Server, maintenue conjointe-ment par Canonical et Microsoft).

Cette première liste est l’occasion d’expliquer les différentes éditions possiblespour Docker. Depuis 2017, l’éditeur Docker Inc. a fait le choix de fournir deuxéditions de Docker.

Page 16: Docker - static.fnac-static.com · Docker Prise en main et mise en pratique Docker Prise en main et mise en pratique sur une architecture micro-services Jean-Philippe GOUIGOUX est

© E

dit

ions

EN

I -

All r

ights

rese

rved

52Prise en main et mise en pratique

Docker

La première, dite Community Edition, reprend les fonctionnalités tradition-nelles de Docker tel qu’il était distribué auparavant : il s’agit d’une versiongratuite, ne comprenant pas de support, mais permettant de lancer des conte-neurs, de les orchestrer et de les lier par le réseau. En gros, il s’agit des techno-logies Docker Engine, Docker Compose et Docker Swarm, et c’est cetteédition qui constitue le sujet d’étude du présent ouvrage.

La seconde, dite Enterprise Edition, contient toutes les fonctionnalités del’édition Community, mais ajoute des fonctionnalités de plus haut niveauainsi que du support. Elle s’adresse clairement aux entreprises qui souhaitentobtenir une garantie – même payante – de fonctionnement continu et des ser-vices avancés comme la certification de l’infrastructure, un gestionnaire privépour les images Docker, etc. Nous ne couvrirons pas ces fonctionnalités avan-cées dans ce livre, dont le but est une connaissance approfondie des conceptsde base de Docker et non un survol de tout l’écosystème. L’édition Enterpriseest elle-même fournie sous forme de trois sous-éditions, à savoir Basic, Stan-dard et Advanced, dans l’ordre croissant de richesse fonctionnelle (et donc detarif).

dDe façon à rester dans une approche légère, modifiez la recherche dans leportail Azure en remplaçant le mot-clé « docker » par « coreos ».

Remarque

CoreOS est un système d’exploitation extrêmement compact et réalisé surmesure autour de Docker. Il permet de disposer d’une base très légère pourexécuter Docker, mais aussi peut servir d’image de base légère pour desimages Docker. Ces concepts d’image et de « poids » de ces dernières serontexpliqués en détail dans les chapitres suivants.

Page 17: Docker - static.fnac-static.com · Docker Prise en main et mise en pratique Docker Prise en main et mise en pratique sur une architecture micro-services Jean-Philippe GOUIGOUX est

53Premiers pasChapitre 2

dDans la liste apparue, sélectionnez une des options possibles (la releasestable est le choix de raison) pour la machine CoreOS à créer.

dCliquez sur Créer.

dDonnez un nom à la machine.

dChoisissez un nom d'utilisateur (utilisez "core").

Page 18: Docker - static.fnac-static.com · Docker Prise en main et mise en pratique Docker Prise en main et mise en pratique sur une architecture micro-services Jean-Philippe GOUIGOUX est

© E

dit

ions

EN

I -

All r

ights

rese

rved

54Prise en main et mise en pratique

Docker

dPour une simple machine de test, inutile de mettre en place une authentifi-cation par clé SSH (Secure Shell), un mot de passe suffit.

dCliquez sur OK.