Rapport Docker
Rapport Docker
Rapport Docker
Introduction à Docker :
Docker est un ensemble de plateformes et de services qui facilitent la création, le déploiement et la gestion
d'applications à l'aide de conteneurs. Les conteneurs Docker offrent une solution légère et portable pour l'emballage
des applications avec toutes leurs dépendances et en garantissant leur exécution cohérente quel que soit
l'environnement. En d'autres termes, Docker permet aux développeurs d'empaqueter une application avec toutes les
parties dont elle a besoin, telles que les bibliothèques et les autres dépendances, et de la déployer sous forme de
conteneur, ce qui garantit une portabilité et une cohérence maximales lors de son exécution sur différents
environnements, des ordinateurs portables de développement aux serveurs de production en passant par les
environnements cloud.
Docker propose cinq pilotes réseau intégrés qui implémentent les fonctionnalités de base du réseau :
a. Bridge : Crée un pont logiciel entre l'hôte et le conteneur, permettant aux conteneurs connectés au réseau
de communiquer entre eux. Les conteneurs peuvent également accéder au réseau de l'hôte et à Internet,
mais ils restent isolés des dispositifs physiques sur le réseau local.
b. Host : Les conteneurs utilisant le mode réseau de l'hôte partagent la pile réseau de l'hôte sans aucune
isolation. Ils n'ont pas d'adresse IP propre et les liaisons de ports sont directement publiées sur l'interface
réseau de l'hôte.
Le choix du type de réseau dépend des besoins spécifiques de votre application et de votre environnement. En général :
• Les réseaux bridge sont recommandés pour la plupart des cas d'utilisation. Ils offrent une isolation et permettent aux
conteneurs de communiquer entre eux et avec le réseau de l'hôte.
• Les réseaux host sont adaptés lorsque vous avez besoin d'une intégration directe avec le réseau de l'hôte et que l'isolation
des conteneurs n'est pas une préoccupation majeure.
• Les réseaux overlay sont essentiels pour les environnements distribués où les conteneurs sur différents hôtes doivent
communiquer directement entre eux.
• Les réseaux macvlan sont utiles lorsque les conteneurs doivent apparaître comme des périphériques physiques sur le réseau
de l'hôte.
• Les réseaux IPvLAN sont une option avancée offrant un contrôle précis sur les adresses IP et le routage des conteneurs.
Il est également possible d'utiliser des plug-ins réseau tiers pour étendre les fonctionnalités du réseau Docker selon vos besoins
spécifiques. Enfin, la désactivation de la mise en réseau au niveau du conteneur avec l'option "none" peut renforcer la sécurité en
isolant complètement le conteneur du réseau.
Docker exploite la pile réseau de votre hôte pour mettre en place son système de mise en réseau. Il gère le trafic vers les
conteneurs en ajustant les règles iptables, ce qui assure l'isolation entre les réseaux Docker et votre hôte.
iptables, l'outil standard de filtrage de paquets Linux, définit le cheminement du trafic à travers la pile réseau de l'hôte. Les
réseaux Docker ajoutent des règles de filtrage pour diriger le trafic vers les applications des conteneurs, tout cela de manière
automatisée, évitant ainsi toute manipulation manuelle d'iptables.
Pour créer un réseau, utilisez la commande docker network create. Vous pouvez spécifier le pilote à utiliser, tel qu’un pont ou un
hôte, en définissant l’indicateur -d. Un réseau de ponts sera créé si vous omettez l’indicateur.
Vous pouvez attacher de nouveaux conteneurs à un réseau en définissant l’indicateur --network avec votre commande docker run.
Ensuite, ouvrez votre troisième fenêtre de terminal et démarrez un autre conteneur Ubuntu, cette fois sans l’indicateur --network :
Essayez maintenant de communiquer entre les deux conteneurs, en utilisant leurs noms :
Les conteneurs ne sont pas encore dans le même réseau, ils ne peuvent donc pas communiquer directement entre eux.
Les conteneurs partagent désormais un réseau, ce qui leur permet de se découvrir mutuellement :
Les réseaux bridge sont ce que vous utiliserez le plus souvent pour connecter vos conteneurs. Explorons également les capacités des réseaux
host, où les conteneurs se connectent directement aux interfaces de votre hôte. Vous pouvez activer la mise en réseau de l’hôte pour un conteneur
en le connectant au réseau host intégré :
NGINX écoute sur le port 80 par défaut. Étant donné que le conteneur utilise un réseau hôte, vous pouvez accéder à votre serveur NGINX
sur localhost :80 de votre hôte en dehors du conteneur, même si aucun port n’a été explicitement lié :
Lorsque la mise en réseau d’un conteneur est désactivée, il n’y a pas de connectivité disponible, que ce
soit avec d’autres conteneurs ou avec votre réseau plus large. Désactivez la mise en réseau en attachant
votre conteneur au réseau none :
Docker vous permet de gérer librement les connexions réseau sans redémarrer vos conteneurs. Dans la section précédente, vous avez vu
comment connecter un conteneur après sa création ; Il est également possible de supprimer des conteneurs des réseaux auxquels ils n’ont
plus besoin de participer :
f. Gestion de réseaux :
Vous pouvez répertorier tous vos réseaux Docker à l’aide de la commande network ls :
Pour supprimer un réseau, déconnectez ou arrêtez tous les conteneurs Docker qui l’utilisent, puis transmettez l’ID ou le nom du réseau
à network rm :
Vous pouvez supprimer automatiquement tous les réseaux inutilisés à l’aide de la commande network prune :
Les données ne persistent pas lorsque ce conteneur n'existe plus, et il peut être difficile d'extraire les données du conteneur si un autre
processus en a besoin.
La couche inscriptible d'un conteneur est étroitement liée à la machine hôte sur laquelle le conteneur s'exécute. Vous ne pouvez pas
déplacer facilement les données ailleurs.
Écrire dans une couche inscriptible de conteneur nécessite un pilote de stockage pour gérer le système de fichiers.
Le pilote de stockage fournit un système de fichiers en union, en utilisant le noyau Linux. Cette abstraction supplémentaire réduit les
performances par rapport à l'utilisation de volumes de données, qui écrivent directement sur le système de fichiers de l'hôte. Docker
propose deux options pour que les conteneurs stockent des fichiers sur la machine hôte, de sorte que les fichiers soient persistants
même après l'arrêt du conteneur : les volumes et les montages de liaison.
Par défaut, lorsqu'un conteneur crée des fichiers, ils sont stockés dans une couche de conteneur inscriptible. Les implications sont les
suivantes :
• Les données ne sont pas conservées une fois que le conteneur est supprimé, rendant difficile l'extraction de données si
nécessaire.
• Cette couche est étroitement liée à la machine hôte, ce qui limite la portabilité des données.
• Écrire dans cette couche nécessite un pilote de stockage, ce qui peut affecter les performances car il ajoute une abstraction
supplémentaire.
Pour rendre les données persistantes après l'arrêt du conteneur, Docker propose deux solutions : les volumes et les montages de
liaison.
1. Volumes :
Les volumes sont le mécanisme privilégié pour persister les données générées et utilisées par les conteneurs Docker. Alors que
les montages de liaison dépendent de la structure des répertoires et du système d'exploitation de la machine hôte, les volumes
sont entièrement gérés par Docker. Les volumes présentent plusieurs avantages par rapport aux montages de liaison :
Voyons comment fonctionnent les volumes. Vous pouvez démarrer un conteneur avec un volume en définissant l’indicateur -v lorsque vous
appelez docker run.
La commande suivante démarre un nouveau conteneur Ubuntu 22.04 et y attache votre terminal (-it), prêt à exécuter des commandes de
démonstration dans les étapes suivantes. Un volume appelé demo_volume est monté sur /data à l’intérieur du conteneur. Exécutez la
commande maintenant :
Le chemin d’accès existe, ce qui indique que le volume a été monté avec succès, mais qu’aucun fichier n’a encore été créé.
Le volume demo_volume existe déjà, Docker le réutilisera au lieu d’en créer un nouveau. Cette fois, le volume est monté sur un chemin
différent à l’intérieur du conteneur, mais lorsque vous répertoriez le contenu du chemin d’accès, vous verrez le fichier créé par le premier
conteneur :
Docker a conservé le contenu du volume après l’arrêt du premier conteneur, ce qui lui a permis d’être réutilisé avec votre conteneur de
remplacement.
L’exemple ci-dessus a montré comment Docker crée automatiquement des volumes lorsque vous référencez un nouveau nom pour la première
fois. Vous pouvez créer manuellement des volumes à l’avance à l’aide de la commande docker volume create :
Le volume peut ensuite être monté sur vos conteneurs de la même manière qu’auparavant :
Lorsque vous montez des volumes sur des chemins d'accès dans les conteneurs qui contiennent déjà des données, Docker copie ces
données existantes dans le nouveau volume. Cela prévient toute perte accidentelle de données et permet aux autres conteneurs
utilisant le même volume de voir également le contenu provenant des points de montage voisins.
Les volumes sont montés en mode lecture-écriture par défaut. Pour monter un volume en mode lecture seule,
incluez ro ou readonly comme troisième champ dans l’indicateur -v de votre commande docker run :
Le volume sera en lecture seule pour le conteneur, idéal pour partager des données entre plusieurs conteneurs où seuls certains ont
besoin de permissions d'écriture.
d. Réutilisation des volumes au démarrage des conteneurs :
Parfois, vous souhaiterez peut-être démarrer un nouveau conteneur avec les mêmes volumes qu’un conteneur existant sur votre
hôte. Au lieu de répéter la liste des options -v requises, vous pouvez utiliser --volumes-from pour inclure automatiquement
les volumes d’un autre conteneur :
Docker monte automatiquement tous les volumes déjà attachés au conteneur existant, en utilisant les mêmes chemins de destination
pour les monter dans le nouveau conteneur. Cette fonctionnalité simplifie la sauvegarde des volumes d'un conteneur, permettant de
les monter facilement dans un nouveau conteneur exécutant une image de sauvegarde dédiée
Docker permet aux images de définir des points de montage de volume à l’aide de l’instruction VOLUME Dockerfile. Lorsqu’un
conteneur est démarré à partir d’une image, Docker crée automatiquement de nouveaux volumes pour les points de montage
répertoriés dans le fichier Dockerfile.
Le fichier Dockerfile suivant monte toujours un volume sur /app_data à l’intérieur du conteneur, même si vous appelez docker
run sans l’indicateur -v :
FROM ubuntu:22.04
VOLUME /app_data
Vous pouvez toujours monter manuellement un volume nouveau ou existant sur des chemins référencés par les instructions VOLUME.
L’option -v remplace le contenu du fichier Dockerfile :
L’instruction VOLUME garantit que les chemins critiques sont toujours conservés lorsque les utilisateurs démarrent un nouveau
conteneur. Cependant, il doit être traité avec précaution car les utilisateurs ne s’attendront pas nécessairement à ce comportement.
L’utilisation de VOLUME supprime le choix de créer un conteneur purement éphémère à des fins de débogage ou de test.
L’interface de ligne de commande Docker comprend un ensemble de commandes permettant d’interagir avec les volumes de votre
hôte.
$ docker volume ls
DRIVER VOLUME NAME
local app_data
local demo_volume
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/demo_volume/_data",
"Name": "demo_volume",
"Options": null,
"Scope": "local"
}
]
Les volumes qui sont actuellement montés sur un conteneur ne peuvent pas être supprimés à moins que vous n’ajoutiez l’option -
f (force) :
• Le fichier ou le répertoire est disponible sur le système hôte même lorsque le service Docker n'est pas en cours
d'exécution.
• Les montages de liaison peuvent être créés n'importe où sur le système hôte.
Lorsque vous utilisez un bind mount, un fichier ou un répertoire sur la machine hôte est monté dans un conteneur.
Contrairement aux volumes, l'emplacement d'un bind mount sur la machine hôte n'a pas besoin d'être contrôlé par Docker.
Prenons un exemple. Supposons que vous ayez un répertoire sur votre hôte à /home/user/my_directory, et que vous
souhaitez le rendre accessible à votre conteneur à /mnt/my_directory. Vous pouvez utiliser le drapeau -v ou --mount à cet
effet :
En utilisant -v :
En utilisant --mount :
Dans les deux exemples, /home/user/my_directory est le chemin du répertoire source sur l'hôte, et /mnt/my_directory est le
chemin où le répertoire est monté dans le conteneur.
La principale différence entre -v et --mount est que la syntaxe --mount est plus verbeuse mais plus claire et plus facile à
utiliser, surtout pour les débutants.
4. Montages tmpfs :
Si vous utilisez Docker sur Linux, vous avez une troisième option : les montages tmpfs. Lorsque vous créez un conteneur avec un
montage tmpfs, le conteneur peut créer des fichiers en dehors de la couche inscriptible du conteneur.
Contrairement aux volumes et aux bind mounts, un montage tmpfs est temporaire et n'est persisté que dans la mémoire de l'hôte.
Lorsque le conteneur s'arrête, le montage tmpfs est supprimé et les fichiers écrits là ne seront pas persistés.
Avantages :
Temporaire et n'est persisté que dans la mémoire de l'hôte. Idéal pour stocker temporairement des fichiers sensibles.
Limitations :
Les permissions sur les montages tmpfs peuvent être réinitialisées après le redémarrage du conteneur.
En général, --mount est plus explicite et verbeux. La plus grande différence est que le drapeau --tmpfs ne prend pas en charge les
options configurables.
--tmpfs : Montage d'un montage tmpfs sans vous permettre de spécifier des options configurables, et peut seulement être utilisé avec
des conteneurs autonomes.
--mount : Composé de plusieurs paires clé-valeur, séparées par des virgules et chaque paire consistant en un tuple <clé>=<valeur>.
La syntaxe --mount est plus verbeuse que --tmpfs.
Le drapeau --tmpfs ne vous permet pas de spécifier des options configurables. Le drapeau --tmpfs ne peut pas être utilisé avec les
services swarm. Vous devez utiliser --mount.
Pour utiliser un montage tmpfs dans un conteneur, utilisez le drapeau --tmpfs, ou utilisez le drapeau --mount avec type=tmpfs et
des options de destination. Il n'y a pas de source pour les montages tmpfs.
Exemple d'utilisation :
Vérifiez que le montage est bien un montage tmpfs en regardant dans la section Monts de la sortie docker inspect.
Les montages tmpfs permettent deux options de configuration, aucune n'est obligatoire. Si vous devez spécifier ces options, vous
devez utiliser le drapeau --mount, car le drapeau --tmpfs ne les prend pas en charge.
Options :
Exemple d'utilisation :
La sécurité Docker est un aspect crucial à considérer lors du déploiement et de l'utilisation de conteneurs dans un environnement de
production. Voici une expansion sur les quatre domaines principaux de sécurité Docker :
Ces fonctionnalités du noyau Linux sont essentielles pour l'isolation des conteneurs. Les espaces de noms permettent de créer des
instances virtuelles d'éléments du système tels que les processus, les réseaux et les systèmes de fichiers, garantissant ainsi que les
processus d'un conteneur ne peuvent pas voir ou affecter ceux d'un autre conteneur ou de l'hôte système. Les cgroups (control
groups) permettent de contrôler et de limiter les ressources système utilisées par les conteneurs, assurant ainsi un partage équitable
des ressources et prévenant les abus qui pourraient entraîner une dégradation des performances ou des pannes du système.
Le démon Docker est le point d'entrée principal pour interagir avec le système de conteneurisation. Il nécessite des privilèges étendus
pour fonctionner correctement, ce qui en fait une cible potentielle pour les attaquants. Il est important de limiter l'accès au démon
Docker uniquement aux utilisateurs de confiance et de sécuriser les points de terminaison de l'API Docker. Cela peut être réalisé en
utilisant des mécanismes d'authentification robustes, en configurant des pare-feu pour restreindre l'accès aux ports Docker, en utilisant
des réseaux privés virtuels (VPN) pour l'accès à distance, et en surveillant régulièrement les journaux d'activité du démon Docker pour
détecter les activités suspectes.
Docker utilise les fonctionnalités de sécurité du noyau Linux pour renforcer l'isolation des conteneurs. Par exemple, Docker démarre
les conteneurs avec un ensemble restreint de capacités, ce qui limite les privilèges du conteneur et réduit la surface d'attaque
potentielle. De plus, Docker prend en charge des fonctionnalités de sécurité telles que SELinux (Security-Enhanced Linux) et
AppArmor, qui permettent de définir des politiques de sécurité granulaires pour contrôler les actions des processus dans les
conteneurs. En activant ces fonctionnalités, les administrateurs peuvent renforcer la sécurité des conteneurs en restreignant leurs
capacités et en limitant leur accès aux ressources système sensibles.
Docker Content Trust (DCT) est une fonctionnalité de sécurité qui garantit l'authenticité et l'intégrité des images Docker en utilisant
des signatures numériques. Lorsque DCT est activé, Docker vérifie la signature numérique de chaque image téléchargée à partir d'un
référentiel Docker avant de l'exécuter, garantissant ainsi que seules les images signées par des entités de confiance peuvent être
exécutées sur les hôtes Docker. Cela réduit le risque d'exécution d'images malveillantes ou altérées et renforce la confiance dans les
sources d'images Docker.
En combinant ces meilleures pratiques de sécurité, les administrateurs peuvent renforcer la sécurité de leurs déploiements Docker et
réduire les risques associés à l'utilisation de conteneurs dans des environnements de production sensibles.
V. Docker Compose :
Docker Compose est un outil permettant de définir et d’exécuter des applications multi-conteneurs. C’est la clé d’une
expérience de développement et de déploiement rationalisée et efficace.
1. Avantages :
Docker-compose présente plusieurs avantages significatifs pour les développeurs :
2. Simplification des tests : Une fonctionnalité puissante de Docker Compose est sa capacité à exécuter rapidement et de manière
reproductible des tests de bout en bout dans des environnements isolés. Au lieu de tester une application sur son système
d'exploitation local, les développeurs peuvent exécuter des tests dans des environnements similaires à ceux de production, ce qui
augmente la fiabilité des tests.
3. Isolation des environnements : En utilisant des noms de projet, Docker Compose permet d'isoler les environnements les uns des
autres. Cela signifie qu'il est possible d'exécuter plusieurs copies du même environnement sur une seule machine sans qu'ils
n'interfèrent les uns avec les autres, offrant ainsi une meilleure isolation et une gestion plus efficace des projets et services.
2. Cas d’utilisation :
1. Déploiements sur un seul hôte : Bien que Docker Compose ait été initialement axé sur le développement et les tests, il est
désormais largement utilisé pour déployer et gérer des déploiements de conteneurs complets sur un seul système hôte. Cela
simplifie la gestion des applications dans un environnement de production.
2. Environnements de développement : Docker Compose facilite l'exécution d'applications dans des environnements de
développement isolés. En utilisant un fichier Compose, toutes les dépendances de l'application, telles que les bases de données et les
caches, peuvent être gérées et chaque conteneur peut être créé avec une seule commande, ce qui accélère le processus de
développement.
3. Tests automatisés : Les environnements isolés créés avec Docker Compose sont également utiles pour exécuter des tests
automatisés. Cela permet de reproduire de manière fiable les conditions de production pour tester l'application, ce qui contribue à
garantir la qualité et la fiabilité du logiciel.
En résumé, Docker-compose offre une solution pratique pour la gestion des environnements de développement, des tests et des
déploiements, ce qui en fait un outil essentiel pour les développeurs modernes.
La structure du fichier Docker Compose est fondamentale pour la gestion efficace des conteneurs Docker. Voici un résumé concis des
principaux éléments du fichier et des concepts associés :
3. Volumes : Définit les volumes utilisés pour stocker les données générées par les conteneurs.
4. Réseaux : Spécifie les réseaux sur lesquels les conteneurs seront connectés.
Commandes :
Les commandes sont utilisées pour exécuter des actions une fois le conteneur démarré et remplacer l’action CMD dans votre fichier
Dockerfile.
Volumes :
Les volumes Docker sont essentiels pour stocker les données utilisées par les conteneurs, et ils offrent plusieurs options de
configuration :
1. Volume Normal : Définit simplement un chemin spécifique, et Docker crée un volume pour celui-ci automatiquement. Par
exemple :
2.Cartographie des Chemins d'Accès : Permet de définir un mappage absolu entre un chemin sur le système hôte et un chemin
dans le conteneur. Par exemple :
Dépendances :
Les dépendances dans Docker servent à garantir qu'un service particulier est disponible avant le démarrage du conteneur qui en
dépend. Ceci est crucial lorsque vous avez un service qui ne peut pas fonctionner sans un autre, par exemple un CMS (Système de
Gestion de Contenu) sans sa base de données.
Voici un exemple simple avec un CMS Ghost qui dépend de la base de données MySQL pour fonctionner, utilisant la commande
depends_on :
Variables d’environements :
Les variables d’environnement sont cruciales pour importer des données de configuration dans vos applications Docker. Elles sont
souvent utilisées lorsque vous avez des configurations dépendant du système d'exploitation hôte ou d'autres variables susceptibles de
changer.
Il existe plusieurs méthodes pour passer des variables d'environnement dans votre fichier Compose :
1.Définition directe : Vous pouvez définir des variables d'environnement directement dans un conteneur en utilisant la clé
environment. Par exemple :
2.Passage depuis le shell : Vous pouvez également transmettre des variables d'environnement de votre shell directement à un
conteneur en définissant simplement une clé d'environnement dans votre fichier Compose sans lui donner de valeur. Par exemple :
Réseaux :
Les réseaux jouent un rôle crucial dans la définition des règles de communication entre les conteneurs, ainsi qu'entre les conteneurs et
le système hôte. Ils permettent de créer des applications qui fonctionnent ensemble de manière sécurisée en fournissant une isolation
complète des conteneurs.
Par défaut, Docker Compose configure un réseau unique pour chaque conteneur. Chaque conteneur rejoint automatiquement le réseau
par défaut, ce qui le rend accessible à la fois par les autres conteneurs du réseau et détectable par le nom d'hôte défini dans le fichier
Compose.
Cependant, vous pouvez spécifier des réseaux personnalisés pour créer des topologies plus complexes et spécifier des pilotes et des
options réseau.
Voici comment spécifier des réseaux personnalisés dans votre fichier Compose :
Chaque service peut ensuite spécifier les réseaux auxquels il doit se connecter en utilisant le mot-clé networks :
Si vous avez des réseaux externes préexistants, vous pouvez les utiliser avec Docker Compose en utilisant l'option external :
Enfin, au lieu de définir vos propres réseaux, vous pouvez modifier les paramètres du réseau par défaut en définissant une entrée
avec le nom default sous le mot-clé networks :
4. CLI :
La CLI de Docker-Compose offre un ensemble de commandes similaire à celui de Docker, mais orienté vers la gestion des architectures
multi-conteneurs définies dans le fichier docker-compose.yml. Voici une liste des commandes les plus couramment utilisées :
L'utilisation de plusieurs fichiers Docker Compose vous permet de personnaliser et de modifier votre application pour différents
environnements, tels que le développement, la pré-production et la production, ainsi que pour exécuter des tâches d'administration
ou des tests sur votre application.
Par défaut, Docker Compose lit deux fichiers: docker-compose.yml et docker-compose.override.yml. Le fichier docker-
compose.override.yml est facultatif et peut être utilisé pour stocker des remplacements de services existants ou définir de
nouveaux services.
Pour utiliser plusieurs fichiers de remplacement ou un fichier avec un nom différent, vous pouvez utiliser l'option -f avec la commande
docker-compose up. Le fichier Compose de base doit être spécifié en premier avec l'option -f.
Lorsque vous utilisez plusieurs fichiers de configuration, assurez-vous que les chemins d'accès sont relatifs au fichier Compose de base
spécifié en premier avec l'option -f.
Lorsque vous utilisez plusieurs valeurs pour des options telles que ports, expose, DNS et tmpfs, Docker Compose concatène les
valeurs au lieu de les remplacer, comme illustré dans l'exemple suivant:
La fonctionnalité est fournie avec Docker et comprend tout ce dont vous avez besoin pour déployer des applications sur plusieurs
nœuds. Le mode Essaim dispose d’un modèle de mise à l’échelle déclaratif dans lequel vous indiquez le nombre de réplicas dont vous
avez besoin. Le gestionnaire d’essaim prend des mesures pour faire correspondre le nombre réel de réplicas à votre demande, en
créant et en détruisant des conteneurs si nécessaire.
Pour créer votre propre essaim avec Docker Swarm, suivez ces étapes détaillées :
1. Prérequis : Assurez-vous d'avoir installé Docker sur toutes les machines que vous souhaitez inclure dans votre essaim.
Vous devez avoir le package Docker CE complet.
2. Désignation d'un gestionnaire d'essaim : Choisissez l'une de vos machines pour agir en tant que gestionnaire de
l'essaim. Ce nœud sera responsable de l'orchestration du cluster en émettant des demandes de planification de conteneurs
aux autres nœuds.
• Exécutez la commande docker swarm init sur le gestionnaire pour démarrer le processus de configuration
du cluster.
• Utilisez l'option --advertise-addr pour spécifier l'adresse IP réelle de votre nœud de gestionnaire. Par
exemple : docker swarm init --advertise-addr 192.168.0.1.
• Cette commande générera une commande que vous devrez exécuter sur vos nœuds secondaires pour qu'ils
rejoignent l'essaim.
En suivant ces étapes, vous pouvez créer votre propre essaim Docker Swarm, composé de plusieurs nœuds, prêt à héberger et à
gérer des conteneurs de manière distribuée.
1. Création d'un service : Utilisez la commande docker service create pour créer un nouveau service. Vous spécifiez
le nombre de réplicas que vous souhaitez créer à partir de l'image Docker spécifiée.
--rep
Cette commande crée un service nommé "apache" avec 3 réplicas, utilisant l'image Docker du serveur Web Apache
(httpd:latest).
En résumé, avec Docker Swarm, vous pouvez déployer des services composés de plusieurs réplicas de conteneurs, assurant ainsi une
haute disponibilité et une tolérance aux pannes pour vos applications distribuées.
Pour mettre à l'échelle les services dans Docker Swarm, vous avez deux options principales :
1. Utiliser la commande docker service scale : Avec cette commande, vous pouvez spécifier directement le nombre
de réplicas que vous souhaitez pour un service donné.
apache=5
Cette commande mettra à l'échelle le service "apache" pour avoir 5 réplicas. Docker ajoutera deux nouvelles instances de
conteneur pour que le nombre total de réplicas atteigne 5. Les nouvelles instances seront planifiées sur des nœuds
disposant de capacité disponible.
2. Utiliser la commande docker service update : Avec cette commande, vous pouvez mettre à jour divers aspects d'un
service, y compris le nombre de réplicas.
--replicas=5
Cette commande mettra également à l'échelle le service "apache" pour avoir 5 réplicas. Cependant, contrairement à la
commande docker service scale, vous pouvez annuler cette modification en utilisant une commande de rollback
dédiée.
En résumé, que vous utilisiez la commande docker service scale ou docker service update, vous pouvez facilement
ajuster le nombre de réplicas de vos services dans Docker Swarm pour répondre aux besoins de votre application. De plus, la
possibilité de rollback avec docker service rollback offre une flexibilité supplémentaire lors de la gestion des mises à l'échelle
des services.
Pour activer les mises à jour propagées, vous pouvez utiliser l'indicateur --update-delay, spécifiant le délai entre chaque
déploiement sur les nœuds de l'essaim. Ce délai est exprimé en heures, minutes et secondes. De plus, vous pouvez ajuster le nombre
de tâches mises à jour en une seule opération avec l'indicateur --update-parallelism.
Voici un exemple illustrant comment mettre à l'échelle un service à 10 réplicas, en mettant à jour trois conteneurs à la fois avec un
délai de cinq minutes entre chaque lot :
Cette commande mettra à l'échelle le service "apache" pour avoir 10 réplicas. Elle introduira également un délai de 5 minutes entre
chaque lot de mise à jour, et trois conteneurs seront mis à jour simultanément. Cela permet de contrôler le rythme des mises à jour
et de limiter l'impact en cas de problèmes rencontrés avec la nouvelle version déployée.
• docker service inspect [NOM_DU_SERVICE]: Cette commande permet d'inspecter les données techniques d'un
service spécifique dans l'essaim. Elle fournit des détails sur la configuration du service, les réplicas en cours d'exécution, etc.
• docker service logs [NOM_DU_SERVICE]: Utilisée pour afficher la sortie du journal associée à un service spécifique.
Cela peut être utile pour diagnostiquer les problèmes ou surveiller l'état d'un service.
• docker service ls: Cette commande répertorie tous les services en cours d'exécution dans l'essaim, en fournissant des
informations telles que le nom du service, le nombre de réplicas en cours d'exécution, etc.
• docker service ps [NOM_DU_SERVICE]: Affiche les instances de conteneur individuelles encapsulées par un service
spécifique. Elle fournit des détails sur chaque réplica du service, tels que son ID, son état, etc.
• docker service rm [NOM_DU_SERVICE]: Supprime un service avec tous ses réplicas de l'essaim. Notez qu'il n'y a pas
d'invite de confirmation, donc cette opération est irréversible.
En plus de ces commandes de base, les services disposent d'un ensemble complet d'options de configuration qui peuvent être
appliquées lors de la création du service ou ultérieurement avec la commande docker service update. Ces options incluent la
configuration des variables d'environnement, les commandes de vérification de l'état, les paramètres DNS, les étiquettes et les
conditions de redémarrage. Les instances de conteneur en cours d'exécution ne sont généralement pas détruites lors de la mise à
jour des options du service, sauf si certaines configurations nécessitent une récréation pour prendre effet
L'exposition des ports réseau dans Docker Swarm permet de rendre les services accessibles depuis l'extérieur de l'essaim. Voici
comment cela fonctionne :
1. Exposition des ports avec --publish : Lors de la création d'un service avec docker service create, vous pouvez
utiliser l'option --publish pour exposer un port du conteneur sur un port public spécifique du nœud hôte. Par exemple :
docker service create --name apache --replicas 5 publish published=8080,target=80 nginx:latest :latest
Cette commande expose le port 80 du conteneur NGINX sur le port 8080 de chaque nœud hôte. Ainsi, vous pouvez
accéder à l'instance du service NGINX en utilisant le port 8080 sur n'importe lequel des nœuds de travail de l'essaim.
2. Mode host pour publier des ports sur les nœuds individuels : En ajoutant l'option mode=host, vous pouvez publier
des ports de conteneur sur les nœuds individuels où les tâches sont en cours d'exécution. Cela signifie que le service ne
sera exposé que sur les nœuds qui hébergent réellement les instances du service. Ceci est utile lorsque vous souhaitez
vous connecter à une instance spécifique du service. Par exemple :
docker service create --name apache --replicas 5 --publish mode=host,target=80 nginx:latest
Cette commande expose le port 80 du conteneur NGINX sur le port 80 de chaque nœud individuel qui héberge une
instance du service NGINX.
3. Réseaux superposés : Docker Swarm prend en charge les réseaux superposés, qui fonctionnent de manière similaire aux
réseaux Docker ordinaires. L'ajout d'un service à un réseau superposé permet à ses conteneurs de communiquer avec tous
les autres services du même réseau. Par exemple :