19
Docker Jean-Philippe GOUIGOUX Prise en main et mise en pratique sur une architecture micro-services Téléchargement www.editions-eni.fr .fr

Docker - Fnacmultimedia.fnac.com/multimedia/editorial/pdf/9782746097520.pdf · à l'Université ainsi que lors de conférences Tech Days, Agile Tour ou BreizhCamp pour partager ses

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Docker - Fnacmultimedia.fnac.com/multimedia/editorial/pdf/9782746097520.pdf · à l'Université ainsi que lors de conférences Tech Days, Agile Tour ou BreizhCamp pour partager ses

Docker

Jean-PhilippeGOUIGOUX

Do

cker

- P

rise

en

ma

in e

t m

ise

en

pra

tiq

ue

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

Jean-Philippe GOUIGOUX est DirecteurTechnique d'un éditeur de logiciels, pourlequel il mène actuellement une refonte del'architecture autour de microservicesurbanisés. Il est reconnu Microsoft MVP(Most Valuable Professional) dans la spé-cialité Intégration depuis 4 ans. Auteur deplusieurs livres, il intervient régulièrementà l'Université ainsi que lors de conférencesTech Days, Agile Tour ou BreizhCamppour partager ses connaissances. Ce livresur Docker est l’occasion pour lui d’aiderles lecteurs à s’approprier de façon structu-rée ce nouvel outil qui va révolutionner lemonde de l’informatique comme la virtua-lisation l’a fait en son temps.

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.

ISBN 978-2-7460-9752-0

54 €9 782746 097520

ISSN 1960-3444

Les chapitres du livre

Avant-propos • Introduction à Docker • Premierspas • Création de vos propres images • Installationd'un registre privé • Mise en œuvre d'une architec-ture logicielle • Déploiement dans un cluster •Encore plus loin avec Docker

Plusd’informations :

Prise en main

et mise en pratique

sur une architecturemicro-services

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

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 exempleconcret de déploiement d’une application en conteneurs. Une connaissance même minimale deLinux et des réseaux TCP/IP est un prérequis indispensable pour tirer le meilleur profit de ce livrequi est organisé en deux parties.

La première partie détaille les mécanismes constituant les fondements de Docker avec des exem-ples de manipulations sur des exercices pratiques. Docker étant encore en pleine évolution, l’au-teur s’est attaché à fournir au lecteur des bases solides sur le fonctionnement de Docker et sur sesconcepts les plus importants pour aboutir à la mise en production d’une solution dans l'écosystèmeDocker et maîtriser ainsi les besoins élémentaires des utilisateurs professionnels (création d’imagessimples et solides, mise en œuvre d’un registre, sécurité…).

Dans une seconde partie, l’auteur met en œuvre une infrastructure complète autour d'une appli-cation 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 architecturesouple et évolutive. Cette mise en pratique sur une application réaliste permet de décrire les astuces de déploiement de conteneurs pour Java, .NET, Python et Node.js/AngularJS.L'application ainsi créée est ensuite déployée dans un cluster de machines CoreOS.

Des éléments sont en téléchargement sur le site www.editions-eni.fr et sur le compte Github desEditions ENI. Ainsi, le lecteur est en mesure de mettre en œuvre la totalité de l'exemple traitédans le livre.

Epsilon_GT_v8_Mise en page 1 28/09/2015 09:44 Page 24

Page 2: Docker - Fnacmultimedia.fnac.com/multimedia/editorial/pdf/9782746097520.pdf · à l'Université ainsi que lors de conférences Tech Days, Agile Tour ou BreizhCamp pour partager ses

1Table des matières

Avant-propos

Chapitre 1Introduction à Docker

1. Docker ou la virtualisation légère . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131.1 L'approche par virtualisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131.2 Docker pour optimiser l'usage des ressources . . . . . . . . . . . . . . 151.3 Positionnement de Docker par rapport à la virtualisation. . . . . 17

2. Principe des conteneurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.1 Principe des conteneurs industriels . . . . . . . . . . . . . . . . . . . . . . . 202.2 Docker et l'approche normalisée . . . . . . . . . . . . . . . . . . . . . . . . . 21

3. Les fondements de Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223.1 Namespaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223.2 Cgroups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243.3 LXC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243.4 Libcontainer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253.5 Système de fichiers en couches . . . . . . . . . . . . . . . . . . . . . . . . . . 26

3.5.1 Principe d'isolation des fichiers . . . . . . . . . . . . . . . . . . . . 263.5.2 Approche par virtualisation . . . . . . . . . . . . . . . . . . . . . . 273.5.3 Utilité des systèmes de fichiers en couches . . . . . . . . . . 283.5.4 Gestion des modifications de fichiers . . . . . . . . . . . . . . . 303.5.5 Dernière couche en écriture . . . . . . . . . . . . . . . . . . . . . . 323.5.6 Technologies utilisées . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

4. Les plus de Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

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

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

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

Page 3: Docker - Fnacmultimedia.fnac.com/multimedia/editorial/pdf/9782746097520.pdf · à l'Université ainsi que lors de conférences Tech Days, Agile Tour ou BreizhCamp pour partager ses

2Prise en main et mise en pratique

Docker

6. Architectures de services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366.1 Historique des architectures de services . . . . . . . . . . . . . . . . . . . 36

6.1.1 Principes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366.1.2 Approche EAI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376.1.3 Approche SOA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376.1.4 Microservices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376.1.5 Lien à l'urbanisation des SI . . . . . . . . . . . . . . . . . . . . . . . 38

6.2 Architecture de microservices . . . . . . . . . . . . . . . . . . . . . . . . . . . 386.2.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386.2.2 Avantages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396.2.3 Inconvénients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

6.3 Apport de Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436.4 Fil conducteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

Chapitre 2Premiers pas

1. Installation de Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451.1 Utiliser des machines préconfigurées . . . . . . . . . . . . . . . . . . . . . 461.2 Installation de Docker sur Linux . . . . . . . . . . . . . . . . . . . . . . . . . 51

1.2.1 Prérequis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511.2.2 Installation par Aptitude . . . . . . . . . . . . . . . . . . . . . . . . 511.2.3 Installation par script . . . . . . . . . . . . . . . . . . . . . . . . . . . 511.2.4 Installation depuis les binaires . . . . . . . . . . . . . . . . . . . . 52

1.3 Installation de Docker sous Windows ou Mac OS X. . . . . . . . . 531.3.1 Un paradoxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531.3.2 Boot2Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531.3.3 Docker et Hyper-V . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581.3.4 Machine virtuelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

1.4 Utilisation de Docker avec Vagrant . . . . . . . . . . . . . . . . . . . . . . 631.4.1 Configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 641.4.2 Mode de fonctionnement sous Linux . . . . . . . . . . . . . . 661.4.3 Mode de fonctionnement sous Windows . . . . . . . . . . . 66

Page 4: Docker - Fnacmultimedia.fnac.com/multimedia/editorial/pdf/9782746097520.pdf · à l'Université ainsi que lors de conférences Tech Days, Agile Tour ou BreizhCamp pour partager ses

3Table des matières

1.4.4 Pour aller plus loin avec Vagrant . . . . . . . . . . . . . . . . . . 67

2. Hello World, Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682.1 Démarrage d'un conteneur simple . . . . . . . . . . . . . . . . . . . . . . . 682.2 Que s'est-il passé ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

2.2.1 Récupération de l'image . . . . . . . . . . . . . . . . . . . . . . . . . 692.2.2 Anatomie de l'image obtenue . . . . . . . . . . . . . . . . . . . . . 702.2.3 Lancement du processus . . . . . . . . . . . . . . . . . . . . . . . . . 732.2.4 Arrêt du conteneur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

3. Manipulations de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 773.1 Trouver une image Docker préexistante . . . . . . . . . . . . . . . . . . 77

3.1.1 Le registre Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 773.1.2 Images officielles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793.1.3 Autres images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 803.1.4 Recherche par la ligne de commande . . . . . . . . . . . . . . . 823.1.5 Précautions sur une image non officielle . . . . . . . . . . . . 83

3.2 Gestion du compte Docker Hub et dépôts privés . . . . . . . . . . . 883.2.1 Création d'un compte . . . . . . . . . . . . . . . . . . . . . . . . . . . 893.2.2 Association à un compte GitHub . . . . . . . . . . . . . . . . . . 893.2.3 Connexion au compte en ligne de commande . . . . . . . . 95

4. Un second conteneur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 964.1 Récupération de l'image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 964.2 Explication des tags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 974.3 Premier lancement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 994.4 Lancement en mode interactif . . . . . . . . . . . . . . . . . . . . . . . . . 1024.5 Persistance des modifications sous forme d'une image . . . . . . 1054.6 Prise en main du client Docker . . . . . . . . . . . . . . . . . . . . . . . . . 107

4.6.1 Ménage dans les conteneurs . . . . . . . . . . . . . . . . . . . . . 1084.6.2 Ménage dans les images . . . . . . . . . . . . . . . . . . . . . . . . 1084.6.3 Suppression automatique à la sortie . . . . . . . . . . . . . . . 1094.6.4 Affectation d'un nom de conteneur . . . . . . . . . . . . . . . 1094.6.5 Modification du point d'entrée par défaut . . . . . . . . . . 1104.6.6 Envoi de variables d'environnement . . . . . . . . . . . . . . . 111

Page 5: Docker - Fnacmultimedia.fnac.com/multimedia/editorial/pdf/9782746097520.pdf · à l'Université ainsi que lors de conférences Tech Days, Agile Tour ou BreizhCamp pour partager ses

4Prise en main et mise en pratique

Docker

4.6.7 Modification du hostname . . . . . . . . . . . . . . . . . . . . . . 1134.7 Manipulation des conteneurs . . . . . . . . . . . . . . . . . . . . . . . . . . 114

4.7.1 Lancement en mode bloquant . . . . . . . . . . . . . . . . . . . 1144.7.2 Lancement en arrière-plan . . . . . . . . . . . . . . . . . . . . . . . 1164.7.3 Gestion correcte du cycle de vie des conteneurs. . . . . . 1214.7.4 Exposition de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . 1244.7.5 Supervision des conteneurs . . . . . . . . . . . . . . . . . . . . . . 126

5. Retours sur les premiers pas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

Chapitre 3Création de vos propres images

1. Création manuelle d'une nouvelle image . . . . . . . . . . . . . . . . . . . . . 1291.1 Installation d'un logiciel dans un conteneur . . . . . . . . . . . . . . 1291.2 Persistance de l'image pour une utilisation future . . . . . . . . . . 1321.3 Utilisation de l'image créée . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1331.4 Connexion depuis la machine hôte . . . . . . . . . . . . . . . . . . . . . 1351.5 Suite des opérations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

2. Utilisation d’un Dockerfile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1382.1 Intérêt des fichiers Dockerfile . . . . . . . . . . . . . . . . . . . . . . . . . . 1382.2 Utilisation d'un fichier Dockerfile . . . . . . . . . . . . . . . . . . . . . . 1402.3 Résultats de l'utilisation d'un Dockerfile complet . . . . . . . . . . 1432.4 Anatomie d'un fichier Dockerfile . . . . . . . . . . . . . . . . . . . . . . . 144

2.4.1 FROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1442.4.2 RUN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1442.4.3 ENV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1462.4.4 VOLUME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1472.4.5 COPY. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1502.4.6 ENTRYPOINT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1512.4.7 EXPOSE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1542.4.8 CMD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154

Page 6: Docker - Fnacmultimedia.fnac.com/multimedia/editorial/pdf/9782746097520.pdf · à l'Université ainsi que lors de conférences Tech Days, Agile Tour ou BreizhCamp pour partager ses

5Table des matières

2.5 Notre premier Dockerfile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1552.5.1 Création et test du script . . . . . . . . . . . . . . . . . . . . . . . 1552.5.2 Création du Dockerfile . . . . . . . . . . . . . . . . . . . . . . . . . 1562.5.3 Génération de l'image. . . . . . . . . . . . . . . . . . . . . . . . . . . 1582.5.4 Lancement du conteneur . . . . . . . . . . . . . . . . . . . . . . . . 1592.5.5 Arrêt et relance du conteneur . . . . . . . . . . . . . . . . . . . . 1602.5.6 Gestion des paramètres . . . . . . . . . . . . . . . . . . . . . . . . . 1622.5.7 Reconstruction de l'image et cache . . . . . . . . . . . . . . . . 163

2.6 Commandes additionnelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1652.6.1 Gestion des fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1652.6.2 Notion de contexte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1662.6.3 Retours sur l'affectation du processus à démarrer . . . . 1672.6.4 Remarque sur le format ligne

de commande ou exécution . . . . . . . . . . . . . . . . . . . . . 1692.6.5 Commandes diverses . . . . . . . . . . . . . . . . . . . . . . . . . . . 172

3. Partage et réutilisation simple des images . . . . . . . . . . . . . . . . . . . . 1743.1 Envoi sur votre compte Docker Hub. . . . . . . . . . . . . . . . . . . . . 1743.2 Export et import sous forme de fichiers . . . . . . . . . . . . . . . . . . 177

4. Bonnes pratiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1784.1 Principe du cache sur les images . . . . . . . . . . . . . . . . . . . . . . . . 1784.2 Principe du cache à la compilation . . . . . . . . . . . . . . . . . . . . . . 184

4.2.1 Retour sur les images intermédiaires . . . . . . . . . . . . . . 1844.2.2 Anatomie d'une compilation d'image . . . . . . . . . . . . . . 1864.2.3 Analyse d'une modification du Dockerfile . . . . . . . . . . 1884.2.4 Gestion correcte des étiquettes . . . . . . . . . . . . . . . . . . . 1904.2.5 Invalidation du cache par modification

de l'image de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1934.2.6 Invalidation du cache par modification du contexte . 199

4.3 Conséquences sur l'écriture des Dockerfile . . . . . . . . . . . . . . . 2014.3.1 Le problème sur les opérations non idempotentes . . . 2014.3.2 Contournement du problème de cache . . . . . . . . . . . . 2044.3.3 Effets bénéfiques sur le nombre

et la taille des images . . . . . . . . . . . . . . . . . . . . . . . . . . . 207

Page 7: Docker - Fnacmultimedia.fnac.com/multimedia/editorial/pdf/9782746097520.pdf · à l'Université ainsi que lors de conférences Tech Days, Agile Tour ou BreizhCamp pour partager ses

6Prise en main et mise en pratique

Docker

4.4 Conséquences sur le choix des images de base . . . . . . . . . . . . 2094.4.1 La bonne image de base . . . . . . . . . . . . . . . . . . . . . . . . . 2094.4.2 Votre propre image de base . . . . . . . . . . . . . . . . . . . . . . 211

4.5 Arborescence recommandée. . . . . . . . . . . . . . . . . . . . . . . . . . . . 2134.5.1 Avantages d'une arborescence type . . . . . . . . . . . . . . . 2134.5.2 Intégration des fichiers . . . . . . . . . . . . . . . . . . . . . . . . . 2154.5.3 Limitation du contexte . . . . . . . . . . . . . . . . . . . . . . . . . 217

4.6 La question du processus unique. . . . . . . . . . . . . . . . . . . . . . . . 2184.6.1 Principe général . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2184.6.2 Exception au principe général avec Supervisor. . . . . . . 2184.6.3 Critique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2204.6.4 Approche intermédiaire . . . . . . . . . . . . . . . . . . . . . . . . . 220

5. Pour aller plus loin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

Chapitre 4Installation d'un registre privé

1. Premiers pas pour un registre privé . . . . . . . . . . . . . . . . . . . . . . . . . 2231.1 Avertissement sur l'ancien registre . . . . . . . . . . . . . . . . . . . . . . 2231.2 Image Docker en local . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2241.3 Pointer sur un registre donné . . . . . . . . . . . . . . . . . . . . . . . . . . 2261.4 Registre sur le réseau local . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227

1.4.1 Scénario et préparation des machines . . . . . . . . . . . . . 2281.4.2 Démarrage du registre . . . . . . . . . . . . . . . . . . . . . . . . . . 2301.4.3 Dépôt de l'image depuis une autre machine . . . . . . . . 2311.4.4 Utilisation de l'image depuis une troisième machine . 2331.4.5 Suppression de l'image sur la machine source . . . . . . . 2361.4.6 En cas de problème avec boot2docker . . . . . . . . . . . . . . 238

2. Un registre plus professionnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2392.1 Gestion de la persistance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239

2.1.1 Gestion locale par volume . . . . . . . . . . . . . . . . . . . . . . . 2392.1.2 Remarque sur SELinux . . . . . . . . . . . . . . . . . . . . . . . . . . 2412.1.3 Un stockage plus sécurisé . . . . . . . . . . . . . . . . . . . . . . . 242

Page 8: Docker - Fnacmultimedia.fnac.com/multimedia/editorial/pdf/9782746097520.pdf · à l'Université ainsi que lors de conférences Tech Days, Agile Tour ou BreizhCamp pour partager ses

7Table des matières

2.1.4 Remarque sur la protection de la clé . . . . . . . . . . . . . . 2492.2 Sécurisation du registre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251

2.2.1 Préparation des clés pour le canal crypté . . . . . . . . . . . 2512.2.2 Mise en place du frontal Nginx . . . . . . . . . . . . . . . . . . . 2542.2.3 Accès par le client Docker . . . . . . . . . . . . . . . . . . . . . . . 2602.2.4 Outils additionnels de diagnostic . . . . . . . . . . . . . . . . . 2622.2.5 Génération du fichier des utilisateurs autorisés . . . . . . 2652.2.6 Ajout de l'authentification dans Nginx . . . . . . . . . . . . 2662.2.7 Correction sur les headers . . . . . . . . . . . . . . . . . . . . . . . 2682.2.8 Gestion de la connexion . . . . . . . . . . . . . . . . . . . . . . . . 269

2.3 Un vrai registre en production . . . . . . . . . . . . . . . . . . . . . . . . . 270

3. Approches complémentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2723.1 Utilisation d'un service cloud déjà préparé . . . . . . . . . . . . . . . . 2723.2 L'API du registre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2733.3 Mise en place d'un miroir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2733.4 Mise en place d'un cache pour les paquetages . . . . . . . . . . . . . 277

3.4.1 Contournement possible . . . . . . . . . . . . . . . . . . . . . . . . 2773.4.2 Mise en œuvre d'un cache de paquetages . . . . . . . . . . . 279

Chapitre 5Mise en œuvre d’une architecture logicielle

1. Présentation de l'application exemple . . . . . . . . . . . . . . . . . . . . . . . 2831.1 Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2831.2 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2851.3 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2881.4 Utilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2901.5 Principes à l'œuvre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291

1.5.1 Un mot sur les architectures de microservices . . . . . . . 2911.5.2 Lien avec la programmation SOLID . . . . . . . . . . . . . . . 291

Page 9: Docker - Fnacmultimedia.fnac.com/multimedia/editorial/pdf/9782746097520.pdf · à l'Université ainsi que lors de conférences Tech Days, Agile Tour ou BreizhCamp pour partager ses

8Prise en main et mise en pratique

Docker

2. Création de l'architecture exemple . . . . . . . . . . . . . . . . . . . . . . . . . . 2932.1 Principes de construction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2932.2 Détails de l'image aspnetbase . . . . . . . . . . . . . . . . . . . . . . . . . . 294

2.2.1 Utilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2942.2.2 Création dans Docker . . . . . . . . . . . . . . . . . . . . . . . . . . 295

2.3 Détails du service optimizer . . . . . . . . . . . . . . . . . . . . . . . . . . . 2972.3.1 Fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2982.3.2 Intégration dans Docker . . . . . . . . . . . . . . . . . . . . . . . . 3022.3.3 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3042.3.4 Remarques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306

2.4 Détails du service calculator . . . . . . . . . . . . . . . . . . . . . . . . . . . 3072.4.1 Fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3072.4.2 Intégration dans Docker . . . . . . . . . . . . . . . . . . . . . . . . 3092.4.3 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311

2.5 Mise en place de liens entre conteneurs . . . . . . . . . . . . . . . . . . 3132.6 Détails du service reporting . . . . . . . . . . . . . . . . . . . . . . . . . . . 318

2.6.1 Fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3182.6.2 Dockerisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3202.6.3 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321

2.7 Détails du service notifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3232.7.1 Fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3232.7.2 Dockerisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3252.7.3 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326

2.8 Détails du service de persistance . . . . . . . . . . . . . . . . . . . . . . . 3282.9 Détails de l'image nodebase . . . . . . . . . . . . . . . . . . . . . . . . . . . 3292.10 Détails du service portal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331

2.10.1 Fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3312.10.2 Dockerisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3342.10.3 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335

2.11 État atteint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336

3. Redéployer automatiquement avec Docker Compose . . . . . . . . . . 3373.1 Principe de Docker Compose . . . . . . . . . . . . . . . . . . . . . . . . . . . 3373.2 Écriture du fichier docker-compose.yml . . . . . . . . . . . . . . . . . . 339

Page 10: Docker - Fnacmultimedia.fnac.com/multimedia/editorial/pdf/9782746097520.pdf · à l'Université ainsi que lors de conférences Tech Days, Agile Tour ou BreizhCamp pour partager ses

9Table des matières

3.3 Mise en œuvre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3403.3.1 Préparation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3403.3.2 Lancement des conteneurs . . . . . . . . . . . . . . . . . . . . . . 3413.3.3 Gestion des conteneurs . . . . . . . . . . . . . . . . . . . . . . . . . 343

3.4 Parallélisation des traitements . . . . . . . . . . . . . . . . . . . . . . . . . 3443.5 Limites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347

4. Exploitation d'une infrastructure Docker . . . . . . . . . . . . . . . . . . . . 3474.1 Le réseau dans Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347

4.1.1 Mode de fonctionnement standard (bridge). . . . . . . . . 3484.1.2 Modes de fonctionnement alternatifs . . . . . . . . . . . . . 3504.1.3 Support des liens entre conteneurs . . . . . . . . . . . . . . . . 3534.1.4 Autres options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3554.1.5 Limites de la couche réseau existante . . . . . . . . . . . . . . 355

4.2 Les volumes Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3584.2.1 Le problème de la persistance . . . . . . . . . . . . . . . . . . . . 3584.2.2 Les volumes comme solution simple . . . . . . . . . . . . . . 3584.2.3 Lien direct sur un répertoire local . . . . . . . . . . . . . . . . . 3614.2.4 Partage de volumes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3624.2.5 Gestion des volumes orphelins . . . . . . . . . . . . . . . . . . . 3634.2.6 Sophistication de l'approche . . . . . . . . . . . . . . . . . . . . . 3644.2.7 Application à la gestion des logs . . . . . . . . . . . . . . . . . . 364

Chapitre 6Déploiement dans un cluster

1. Description globale de l'approche . . . . . . . . . . . . . . . . . . . . . . . . . . . 3671.1 Objectif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3671.2 État des lieux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3681.3 Avertissement préalable sur notre choix . . . . . . . . . . . . . . . . . 3691.4 Déroulement de l'exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370

Page 11: Docker - Fnacmultimedia.fnac.com/multimedia/editorial/pdf/9782746097520.pdf · à l'Université ainsi que lors de conférences Tech Days, Agile Tour ou BreizhCamp pour partager ses

10Prise en main et mise en pratique

Docker

2. Montage d'un cluster CoreOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3702.1 Choix du cloud cible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3702.2 Installation des outils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371

2.2.1 Azure Command Line Interface . . . . . . . . . . . . . . . . . . 3712.2.2 Connexion à Azure . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3712.2.3 Préparation des certificats pour l'accès SSH . . . . . . . . . 372

2.3 Création du fichier de configuration de CoreOS . . . . . . . . . . . 3722.4 Création du service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3742.5 Provisionnement du cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3742.6 Manipulation locale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376

2.6.1 Connexion par PuTTY. . . . . . . . . . . . . . . . . . . . . . . . . . 3762.6.2 Vérification du cluster . . . . . . . . . . . . . . . . . . . . . . . . . . 378

2.7 Pilotage du cluster depuis une machine externe . . . . . . . . . . . 3792.7.1 Installation de fleetctl . . . . . . . . . . . . . . . . . . . . . . . . . . 3802.7.2 Gestion de la sécurité . . . . . . . . . . . . . . . . . . . . . . . . . . 3802.7.3 Découverte du cluster . . . . . . . . . . . . . . . . . . . . . . . . . . 381

2.8 Script de suppression du cluster . . . . . . . . . . . . . . . . . . . . . . . . 381

3. Déploiement global des services . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3823.1 Approche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3823.2 Installation de Docker Compose . . . . . . . . . . . . . . . . . . . . . . . 3833.3 Publication des services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3833.4 Reprise du fichier docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3853.5 Mise en œuvre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386

4. Déploiement atomique des services . . . . . . . . . . . . . . . . . . . . . . . . . 3904.1 Approche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3904.2 Les outils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3924.3 Gestion des fichiers d’unités . . . . . . . . . . . . . . . . . . . . . . . . . . . 393

4.3.1 Cas du service de calcul . . . . . . . . . . . . . . . . . . . . . . . . . 3934.3.2 Écriture des autres fichiers de service . . . . . . . . . . . . . . 396

4.4 Gestion des unités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3974.4.1 Lancement des services simples . . . . . . . . . . . . . . . . . . 3974.4.2 Vérification du fonctionnement . . . . . . . . . . . . . . . . . . 3994.4.3 Modification du service de base de données . . . . . . . . 401

Page 12: Docker - Fnacmultimedia.fnac.com/multimedia/editorial/pdf/9782746097520.pdf · à l'Université ainsi que lors de conférences Tech Days, Agile Tour ou BreizhCamp pour partager ses

11Table des matières

4.4.4 Vérification du fonctionnement du portail . . . . . . . . . 4044.4.5 Lancement des services de calcul . . . . . . . . . . . . . . . . . 4054.4.6 Vérification de l'ensemble . . . . . . . . . . . . . . . . . . . . . . . 406

4.5 Perspectives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4094.5.1 Gestion d'un serveur maître . . . . . . . . . . . . . . . . . . . . . 4094.5.2 Scripting de démarrage du cluster . . . . . . . . . . . . . . . . 4114.5.3 Remarque sur la gestion de la charge . . . . . . . . . . . . . . 412

5. Approches alternatives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4135.1 Docker Swarm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4135.2 Docker Machines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414

Chapitre 7Encore plus loin avec Docker

1. Docker dans votre usine logicielle . . . . . . . . . . . . . . . . . . . . . . . . . . 4151.1 Docker à tous les étages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4151.2 Produire des images en sortie de build . . . . . . . . . . . . . . . . . . . 417

1.2.1 Positionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4171.2.2 Utilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4171.2.3 Conseils de mise en place . . . . . . . . . . . . . . . . . . . . . . . 418

1.3 Utiliser des conteneurs pour l’usine logicielle . . . . . . . . . . . . . 4191.3.1 Positionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4191.3.2 Utilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4191.3.3 Conseils de mise en place . . . . . . . . . . . . . . . . . . . . . . . 420

1.4 Utiliser des conteneurs pour les tests . . . . . . . . . . . . . . . . . . . . 4211.4.1 Positionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4211.4.2 Utilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4211.4.3 Conseils de mise en place . . . . . . . . . . . . . . . . . . . . . . . 4221.4.4 Variante associée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422

1.5 Retour sur le registre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4241.6 Perspectives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425

Page 13: Docker - Fnacmultimedia.fnac.com/multimedia/editorial/pdf/9782746097520.pdf · à l'Université ainsi que lors de conférences Tech Days, Agile Tour ou BreizhCamp pour partager ses

12Prise en main et mise en pratique

Docker

2. Avant de partir en production avec Docker . . . . . . . . . . . . . . . . . . . 4262.1 Sécurité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4272.2 Restriction sur les ressources . . . . . . . . . . . . . . . . . . . . . . . . . . 4272.3 Supervision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428

3. Docker et Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4293.1 Le client Docker sous Windows . . . . . . . . . . . . . . . . . . . . . . . . 4293.2 Docker sur Azure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4313.3 Docker sous Windows Server . . . . . . . . . . . . . . . . . . . . . . . . . . 432

4. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435

Page 14: Docker - Fnacmultimedia.fnac.com/multimedia/editorial/pdf/9782746097520.pdf · à l'Université ainsi que lors de conférences Tech Days, Agile Tour ou BreizhCamp pour partager ses

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.

Les trois sections ci-dessous correspondent aux trois méthodes les pluscourantes pour mettre à disposition les outils Docker. Nous reviendrons plustard sur l'intérêt de chacune en fonction des utilisations de Docker, mais pourl'instant, le lecteur peut choisir simplement celle qui est la plus pratique pourlui.

Lors de l'écriture du présent ouvrage, la version 1.5.0 a été utilisée dans unpremier temps. Dès la sortie de la version 1.6.0, le 7 avril 2015, les exemplesont été basculés sur cette dernière. La gestion des libellés (mot-clé LABEL), enparticulier, ne peut être réalisée qu'avec cette version. Les versions s'enchaî-nant rapidement, il n'est pas impossible qu'une version 1.7.0 ou supérieuresoit disponible à l'heure où le présent ouvrage sera imprimé.

Page 15: Docker - Fnacmultimedia.fnac.com/multimedia/editorial/pdf/9782746097520.pdf · à l'Université ainsi que lors de conférences Tech Days, Agile Tour ou BreizhCamp pour partager ses

© E

dit

ions

EN

I -

All r

ights

rese

rved

46Prise 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 bas à gauche.

dAccédez au Marketplace.

dLancez une recherche sur "coreos" (nous reviendrons plus en détail sur ceque représente ce nom).

Page 16: Docker - Fnacmultimedia.fnac.com/multimedia/editorial/pdf/9782746097520.pdf · à l'Université ainsi que lors de conférences Tech Days, Agile Tour ou BreizhCamp pour partager ses

47Premiers 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.

dAcceptez les termes légaux.

dDonnez un nom à la machine.

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

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

dLancez la création, qui prendra normalement quelques minutes au plus.

Page 17: Docker - Fnacmultimedia.fnac.com/multimedia/editorial/pdf/9782746097520.pdf · à l'Université ainsi que lors de conférences Tech Days, Agile Tour ou BreizhCamp pour partager ses

© E

dit

ions

EN

I -

All r

ights

rese

rved

48Prise en main et mise en pratique

Docker

dUtilisez le nom DNS (voir capture précédente) pour vous connecter à la ma-chine créée. L'exemple suivant utilise PuTTY.

Page 18: Docker - Fnacmultimedia.fnac.com/multimedia/editorial/pdf/9782746097520.pdf · à l'Université ainsi que lors de conférences Tech Days, Agile Tour ou BreizhCamp pour partager ses

49Premiers pasChapitre 2

Si l'authentification par mot de passe a été choisie, un certificat sera automa-tiquement généré pour sécuriser la conversation. Vous devrez alors l'accepterpour continuer.

L'accès utilise le nom d'utilisateur et le mot de passe spécifiés lors de lacréation de la machine.

Les fonctionnalités de Docker sont alors disponibles.

Page 19: Docker - Fnacmultimedia.fnac.com/multimedia/editorial/pdf/9782746097520.pdf · à l'Université ainsi que lors de conférences Tech Days, Agile Tour ou BreizhCamp pour partager ses

© E

dit

ions

EN

I -

All r

ights

rese

rved

50Prise en main et mise en pratique

Docker

Afficher les informations sur la version de Docker installée

docker version

Le fait que la commande docker réponde montre que l'outil est bien installépar défaut dans la distribution CoreOS, dont nous reparlerons un peu plusloin.

Remarque

Dans un environnement professionnel, il est recommandé d'utiliser plutôtl'authentification par certificat. Dans le cas de notre exemple sur Azure, nousrenvoyons à http://azure.microsoft.com/en-us/documentation/articles/vir-tual-machines-linux-use-ssh-key/, qui explique de manière très détaillée labonne façon de procéder.

Avant de continuer dans l'utilisation de l'outil, nous allons montrer les alter-natives dans lesquelles nous procédons nous-mêmes à son installation.