Qu’est ce que Docker ?
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.
451 Research
Pour exécuter une application avec Docker, il vous suffit de télécharger l’image docker de cette application depuis un registry (https://hub.docker.com/).
Une image Docker représente un système de fichier contenant les éléments suivants:
- Le livrable (un binaire, une archive JAR, le code python …) d’une application
- Les dépendances de l’application (modules Python, librairies système …)
- (Selon les cas) L’outil permettant l’exécution de ce livrable : Python, Java, le serveur d’application …
Cette image générique permettra la création d’un container qui exécutera votre application de manière isolée par rapport au reste du système d’exploitation.
Contrairement à la virtualisation, la containérisation se base sur le système hôte pour son fonctionnement. Ceci à pour but de la rendre plus légère. En effet seul le ou les processus de l’application seront exécutés au sein du container. Même si l’application est exécutée sur le kernel de la machine host, elle n’aura la visibilité que sur son environnement d’exécution (système de fichier, processus …).
Avantages
- On peut exécuter une application sur différents systèmes très facilement
- Chaque application gère elle-même ses dépendances, ce qui facilite grandement son déploiement et limite les problèmes
- Le système hôte reste propre (une application peut être complètement supprimé avec une seule commande: pas de fichier de configuration restant dans un coin par exemple)
- On peut facilement exécuter plusieurs instances d’un même logiciel (plusieurs serveurs Nginx par exemple) sur un même système.
- Même si la société Docker vend ses services à des entreprises, Docker est un logiciel libre
Inconvénients
- L’application reste dépendante du système et de l’architecture sur laquelle elle est exécutée (contrairement à la virtualisation). Un binaire compilé pour x86 ne pourra être exécuté dans un système ARM. De même qu’un bug kernel pourra empêcher une application de fonctionner correctement.
- Tous les logiciels ne possèdent pas d’image Docker, mais il est très facile d’en créer une
Bref, si vous ne l’avez pas encore compris, Docker vous permet de lancer un grand nombre de logiciel et d’application web en un temps éclair et sans difficulté.
Installation de Docker
Rien de bien sorcier, il suffit de suivre la documentation de Docker https://docs.docker.com/engine/install/debian/#install-using-the-convenience-script :
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
Si vous souhaitez pouvoir utiliser docker sans être root, il suffit d’exécuter la commande suivante (pensez à changer l’utilisateur si vous n’utilisez pas pi) :
sudo usermod -aG docker pi
Pensez à vous déconnecter / reconnecter pour que ce changement prenne effet.
Et voila …
On peut tester rapidement que tout fonctionne bien. D’abord via la commande suivante qui retourne la version de Docker :
docker version
Ensuite nous allons lancer un serveur Nginx :
docker run -d -p 80:80 --name nginx nginx
Et tada ! Un serveur Nginx doit être maintenant disponible à l’adresse suivante : http://rasberrypi_ip
Pour visualiser le container crée, lancez la commande suivante :
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3c37a96f5b26 nginx "nginx -g 'daemon of…" 6 seconds ago Up 5 seconds 0.0.0.0:80->80/tcp nginx
On peut maintenant stopper et supprimer le container
docker stop nginx
docker rm nginx
Passons à Docker Compose
Docker a aujourd’hui énormément révolutionné la façon dont nous déployons les applications sur nos serveurs. Néanmoins il a un grand défaut, tout se fait via la CLI. Pour lancer un container de test de manière isolé ça ne pose pas réellement de soucis.
Par contre lorsqu’il s’agit de déployer, mettre à jour et maintenir une multitude de containers, cela commence clairement à devenir compliqué (il faut démarrer les containers dans le bonne ordre, il est difficile de garder un état de nos déploiement et de pouvoir le rejouer sur plusieurs machines).
Afin de résoudre cette limitation, un outil nommé Docker Compose fut créé.
Docker Compose est un outil permettant la création et l’exécution d’applications multi containers. Il repose sur un fichier YAML contenant un ensemble de containers à déployer. Docker Compose est basé sur un modèle déclaratif où il suffit d’appliquer le fichier docker-compose.yml afin d’obtenir l’état désiré.
Installation de Docker Compose
Sur Raspberry Pi, nous allons l’installer via Pip. La procédure est la suivante:
sudo apt update
sudo apt install python3-pip
pip3 install docker-compose
Reprenons notre container nginx et déployons le via Docker Compose cette fois-ci.
Créons un fichier nommé docker-compose.yml:
version: '3.3'
services:
nginx:
ports:
- '80:80'
container_name: nginx
image: nginx
Maintenant il suffit d’exécuter la commande:
docker-compose up -d
Et voila, le serveur Nginx est de nouveau disponible. Pour supprimer le container utiliser les commandes ci dessous :
docker-compose stop
docker-compose rm
Nous avons terminé l’installation. Pour le moment nous avons juste effleuré les possibilité offertes par la containérisation d’application. Je vous laisse donc vous documenter sur des sujets tels que : VOLUME, NETWORK et SERVICE, qui seront indispensables à la bonne maîtrise des ces outils.
Salut merci pour le partage, je me forme sur docker et j’ai voulu tester. Alors j’ai essayé sur raspbian RPi4 8Go. J’ai docker bien installé Docker version 19.03.13, build 4484c46 mais pour docker compose quand je veux voir la version j’ai ça : standard_init_linux.go:211: exec user process caused « exec format error »
j’ai cru comprendre que c’est un problème d’architecture mais ça m’avance pas.
(j’ai portainer fonctionnel aussi)
Comme je pourrai le fixer ?
Bonjour,
Docker-compose a été installé comment ? Via pip3 comme dans le tuto ? Ou en utilisant la commande curl sur le site Docker ?
Si via pip, quel est le résultat de la commande suivante:
pip3 list