table des matières
Qu’est ce que Docker ?
Wikipedia Docker est une plateforme permettant de lancer certaines applications dans des conteneurs logiciels lancé en 2013.
Docker est un outil qui peut empaqueter une application et ses dépendances dans un conteneur isolé, qui pourra être exécuté sur n’importe quel serveur. Il ne s’agit pas de virtualisation, mais de conteneurisation, une forme plus légère qui s’appuie sur certaines parties de la machine hôte pour son fonctionnement. Cette approche permet d’accroître la flexibilité et la portabilité d’exécution d’une application, laquelle va pouvoir tourner de façon fiable et prévisible sur une grande variété de machines hôtes, que ce soit sur la machine locale, un cloud privé ou public ou une machine nue.
Pourquoi Docker ?
Docker est donc un système de containérisation d’applications. Même si ce n’est pas le seul et qu’il existe des alternatives (LXC, LXD, OpenVZ, Linux-VServer), c’est aujourd’hui un outil majeur dans ce domaine.
Qu’est ce que la containerisation ?
La containérisation est une virtualisation plus légère. Comme indiqué sur la figure ci-dessus, contrairement à une VM, les containers partagent également le même OS.
Les avantages sont multiples :
- Portabilité : Les containers se déplacent facilement d’un environnement à un autre, il suffit d’avoir Docker d’installé
- Multi-plateformes : Docker existe et est installable facilement sur toutes les plates formes du marché (Windows, MAC, Linux, …)
- Rapidité : Un container est (beaucoup) plus léger qu’une VM, il démarre et s’arrête très rapidement.
Avantages supplémentaires:
- Les containers sont par design isolés des autres containers du systèmes d’exploitation. Cela garantit un niveau de sécurité accru.
- de part la légèreté des containers, le développement applicatif utilisant les containers répond à la logique de micro-service (un service, un container). Avec les micro-services, les applications évoluent plus facilement grâce à leur indépendance.
- On déploie de plus en plus de containers dans le Cloud directement par l’intermédiaire de chaînes CI/CD. Les containers sont stockés dans des dépôts comme le
Docker Hub
, sur lecontainer Registry
de Gitlab ou encoreAmazon Elastic Container Registry
pour AWS.
Points d’attentions lorsque l’on utilise Docker
Image, container et R/W
- Il faut bien distinguer l’image du container.
- L’image est figée et est en lecture seule. Elle ne peut pas être modifiée.
- Le container est une image en cours d’exécution. Le container peut avoir une couche en lecture/écriture, à préciser avec l’option
--volume
Le réseau et Docker
Le système de réseau de Docker utilise des drivers. Plusieurs drivers existent et fournissent des fonctionnalités différentes.
Par défaut, les conteneurs s’exécutent dans le réseau bridge
. Ce type de réseau isole les conteneurs. Les conteneurs qui utilisent ce réseau ne peuvent pas communiquer entre eux et ne sont pas accessibles depuis l’extérieur.
Il faut donc prêter une attention particulière à la configuration réseau si vous voulez que votre container soit accessible depuis l’extérieur.
Comme souvent dans une logique de micro-services, vous avez plusieurs containers qui s’exécutent (exemple, un serveur Web et une base de donnée) la compréhension de la configuration réseau est Réellement Indispensable.
Attention : Du point de vue du container, même votre PC de développement EST à l’extérieur !!!
L’article ci-après détaille les différents réseaux Docker et leur configuration.
Manipulation réseau sous Docker
docker run, DockerFile, docker compose, et orchestration.
Docker existe depuis 2013 et est massivement utilisé aujourd’hui. Sur le net, un nombre incalculable de ressources est proposé en utilisant des commandes docker.
Il convient de trier celles-ci afin d’exploiter la ressource adaptée.
De manière générale, si vous avez un seul container à exécuter, le tutoriel va vous orienter vers la commande docker run
Dans l’exemple donnée, le QuickStart fait référence à la commande suivante :
docker run -it -p 1880:1880 -v node_red_data:/data --name mynodered nodered/node-red
qui effectivement est suffisante dans un premier temps.
- Il y a un mappage de port. Je vais pouvoir accéder à mon Container depuis mon PC
- Un volume est précisé. Je vais pouvoir sauvegarder et modifier des fichiers depuis mon PC.
- Mon container à un nom pour y faire référence.
Ceci dit, si la commande est suffisante pour une utilisation immédiate, malheureusement elle est rapidement limitée.
- Quel est le réseau utilisé ?
- Où est situé le répertoire
node_red_data
sur mon PC ? - Puis-je créer une nouvelle image de ce container et la sauvegarder ?
- Et si j’ai besoin de créer un second container et qu’ils interagissent ensemble ? (Un container
influxDb
par exemple) - Comment publier mon travail en production ?
Ces interrogations seront détaillées dans des ressources dédiées et sont des considérations à prendre en compte. Bien sur le premier réflexe quand vous suivez un tutoriel est de parcourir l’ensemble de celui-ci avant d’exécuter des commandes que vous ne comprenez pas ;O
Quelques conseils
- Ne pas utiliser
docker run
, préférerdocker compose
(Explications ici - Pour créer une nouvelle image et la publier, vous avez besoin d’un
DockerFile
- Lorsque plusieurs conteneurs doivent interagir,
docker compose
s’avère indispensable - La publication est un vaste sujet. Manuellement, vous pouvez reproduire vos commandes sur le serveur en production. Automatiquement, un monde merveilleux s’ouvre à vous (Kubernetes par exemple)