:::: MENU ::::

Docker et Docker-Compose sur Raspberry Pi

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.

A propos de l'auteur :

C’est l’histoire d’un développeur pleine pile un peu touche à tout, qui découvre l'infrastructure et le nuage. Son plat préféré, c’est le hachi-corp sauce K8S. Détestant faire deux fois la même chose, féru d’automatisation, il s’est dévoué à la cause de l’infrastructure comme code, de la containérisation et du déploiement continu. Blogueur sur un site de Framboise, il a eu le malheur d’acheter une imprimante 3D, et cherche encore à comprendre pourquoi il est un fan ardu de Formule 1.


2 Comments

  • Répondre fabien |

    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 ?

    • Répondre Benoit |

      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

Laissez un commentaire