You are currently viewing Docker : Mon premier container pas à pas pour votre domotique

Docker : Mon premier container pas à pas pour votre domotique

Docker domotique

1. Définition du mot “container”

Bien le bonjour, suite à la publication de l’article https://youdom.net/docker-installer/, nous allons voir ensemble pour le déploiement d’un container.
Dans le monde de l’informatique moderne, le terme “conteneur” est devenu omniprésent et a révolutionné la manière dont nous développons, déployons et gérons des applications. Un conteneur peut être comparé à une boîte magique qui renferme tout ce dont une application a besoin pour fonctionner, qu’il s’agisse de son code, de ses dépendances logicielles, de sa configuration, voire de son système d’exploitation, le tout emballé en un seul ensemble isolé et portable.

1.1 Les concepts “clés”

1.1.1 Isolation

Les conteneurs fournissent un niveau élevé d’isolation. Chaque conteneur fonctionne de manière autonome et ne peut pas interférer avec les autres conteneurs sur le même système. Cette isolation garantit que les applications peuvent être exécutées en toute sécurité sans craindre des conflits ou des problèmes de compatibilité.

1.1.2 Portabilité

Les conteneurs sont indépendants de l’infrastructure sous-jacente. Ils peuvent être exécutés de manière cohérente sur n’importe quel système qui prend en charge la plateforme de conteneurisation, qu’il s’agisse d’un ordinateur local, d’un serveur distant ou d’un environnement cloud. Cela simplifie grandement le processus de déploiement d’applications sur différents environnements.

1.1.3 Rapidité

Les conteneurs sont légers et démarrent rapidement. Contrairement aux machines virtuelles traditionnelles, ils partagent le même noyau du système d’exploitation de l’hôte, ce qui les rend beaucoup plus efficaces en termes de ressources et de temps de démarrage.

1.1.4 Facilité de gestion

Les conteneurs sont gérables à l’aide d’outils de gestion automatisée, tels que Docker, Kubernetes, et d’autres. Cela permet d’automatiser des tâches telles que le déploiement, la mise à l’échelle, la surveillance et la mise à jour des conteneurs.

1.1.5 Ecosysteme riche

Les conteneurs bénéficient d’un écosystème florissant de logiciels, d’images prêtes à l’emploi et de services qui simplifient considérablement le développement et l’exploitation des applications.

Les conteneurs ont révolutionné le développement logiciel en accélérant le processus de développement, en améliorant la portabilité des applications et en rationalisant la gestion des infrastructures. Ils sont utilisés dans une grande variété de scénarios, que ce soit pour des applications web, des microservices, des analyses de données ou des tests de logiciels. Grâce à leur flexibilité et à leur efficacité, les conteneurs continueront à jouer un rôle clé dans l’évolution de l’informatique moderne.

2. VM vs Docker

Une petite explication pour faire la différence est je pense pour moi le meilleur des moyens de comprendre :

Les VMs créent des machines virtuelles complètes, chacune avec son propre système d’exploitation, ce qui assure une isolation stricte, mais demande plus de ressources.

Comprendre les machines virtuelles

Docker utilise des conteneurs qui partagent le même noyau du système d’exploitation, offrant une isolation au niveau du processus et une efficacité des ressources supérieure.

comprendre le system docker

Les conteneurs Docker démarrent plus rapidement, sont plus légers et sont plus portables, tandis que les VMs offrent une isolation complète, mais avec une surcharge en ressources. Le choix dépend des besoins spécifiques de l’application et de l’infrastructure.

3. Comment konfé ?

Il existe “pour moi” 2 façons de déployer un container sur Docker, la première et la deuxième 🙂
Voilà xD

3.1 La commande Run

Le déploiement de conteneurs Docker avec la commande Docker run est l’une des méthodes les plus courantes pour exécuter des applications dans un environnement conteneurisé. Voici un guide étape par étape pour expliquer comment utiliser la commande docker run pour déployer un conteneur Docker : (Avant de commencer, assurez-vous que Docker est installé sur votre système.)

L’exemple sera fait avec l’image Portainer (https://hub.docker.com/r/portainer/portainer)

Recherche d’une image : Tout d’abord, vous devez trouver l’image Docker appropriée pour l’application que vous souhaitez exécuter. Vous pouvez rechercher des images sur Docker Hub (https://hub.docker.com)

Téléchargement de l’image : Si l’image n’est pas déjà présente sur votre système, vous pouvez la télécharger en utilisant la commande docker pull, par exemple : docker pull nom_de_l'image, donc pour notre exemple:

Docker pull portainer/portainer

Une fois que l’image est téléchargée, je peux exécuter un conteneur basé sur cette image en utilisant la commande docker run. Par exemple, j’exécute le conteneur Portainer en utilisant la commande :

docker run -d -p 9000:9000 portainer/portainer. 

Cela démarrera un conteneur Portainer en mode détaché, et il sera accessible via le port 9000 de ma machine.

La séquence complète serait donc :

# Téléchargez l'image Portainer depuis Docker Hub
docker pull portainer/portainer

# Exécutez un conteneur Portainer
docker run -d -p 9000:9000 portainer/portainer

Après avoir exécuté la commande docker run, le conteneur Portainer sera en cours d’exécution, et je pourrais accéder à l’interface Web de Portainer en utilisant un navigateur à l’adresse http://ipdevotremachine:9000

La commande docker pull est utilisée pour préparer l’image Docker, tandis que docker run est utilisée pour exécuter un conteneur basé sur cette image.

3.2 Le Docker Compose

La solution pour moi la plus simple. Pourquoi ? Parce que je fais ce que je peux et veux (quand madame est pas là, on le sait tous….)
Je choisis de prendre cette solution dans mes déploiements de containers car il est plus simple de “voir” les paramètres et surtout imbriqués plusieurs image/containers dans une stack.

3.2.1 Stack

Ho bordel, il rajoute des mots “STACK”: en Docker, le terme “stack” fait référence à une collection de services définis dans un fichier Docker Compose (habituellement au format YAML) qui sont destinés à fonctionner ensemble pour déployer une application complète.

3.2.2 Docker Compose

Encore un, mais il fait exprès !!!! Docker Compose : les fichiers Docker Compose décrivent la configuration des services, leurs dépendances, les réseaux, les volumes et d’autres paramètres nécessaires au déploiement de l’application.

Dans notre exemple pour l’image portainer, le docker compose serais par exemple:

version: '3.9'


services:
  portainer:
    image: portainer/portainer-ce:latest
    container_name: portainer
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    ports:
      - 9000:9000
    volumes:
      - ./etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /portainer-data:/data

Un peu d’explication ?
version: ‘3.9’: Cela indique la version du format Docker Compose utilisée. Dans ce cas, c’est la version 3.9, qui est la dernière version disponible au moment de la rédaction.

image: portainer/portainer-ce:latest : Cela spécifie l’image Docker à utiliser pour ce service, dans ce cas, il s’agit de l’image Portainer Community Edition (CE) avec la version la plus récente (latest).

container_name: portainer : Cela donne un nom explicite au conteneur, en l’occurrence, “portainer”.

restart: unless-stopped : Cette option indique que le conteneur doit redémarrer automatiquement sauf s’il est explicitement arrêté. Cela garantit que le conteneur Portainer reste actif en cas de redémarrage du système hôte.

security_opt: – no-new-privileges:true : Cela désactive la création de nouveaux privilèges pour le conteneur. Ceci renforce la sécurité en limitant ses capacités.

ports: – 9000:9000 : Cela mappe le port 9000 de l’hôte sur le port 9000 du conteneur, ce qui permet d’accéder à l’interface web de Portainer via le port 9000 de l’hôte.

volumes:

./etc/localtime:/etc/localtime:ro : Ceci synchronise le fuseau horaire de l’hôte avec le conteneur pour assurer l’heure correcte.
/var/run/docker.sock:/var/run/docker.sock:ro : Cela permet au conteneur Portainer d’interagir avec le démon Docker de l’hôte pour gérer d’autres conteneurs.
/portainer-data:/data : Cela crée un volume nommé “portainer-data” pour stocker les données de configuration et d’état de Portainer de manière persistante.

4. Let’s go voir Patrick, heu la pratique !

Aller, on passe à la pratique !

Je vais donc repartir sur la machine virtuelle que j’avais pris pour la découverte de docker et son installation.
Par habitude, je crée en premier lieux un nouveau réseau, donc en SSH sur ma machine, un reseau en mode bridge

#Docker network create lenomdemonreseau
Docker network create dockernet 
Création du réseau

Ensuite, je vais créer un dossier pour rassembler les services

#mkdir -p nomdemondossier
mkdir -p management
Création du dossier pour docker

Je me déplace dans ce dossier pour faire mon Docker Compose

#Déplacement dans le dossier management
cd management
#Création du docker compose l'extension yml peut aussi être yaml mais le fichier dois être nommer docker-compose
sudo nano docker-compose.yml

Je renseigne ce dont on a besoin pour ce compose

version: '3.9'
#Ajout du réseau docker
networks:
  default:
    name: dockernet
    external: true
#Onglet concernant le service
services:
  portainer:
    image: portainer/portainer-ce:latest
    container_name: portainer
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    ports:
      - 9000:9000
    volumes:
      - ./etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /portainer-data:/data
Fichier docker compose

Sous nano, j’enregistre en faisant Ctrl + X et Yes

Et en avant pour le lancement

#Lancement du container avec l'option -d pour éviter d'être dans le shell du container
docker compose up -d
lancement du container

je peux voir que docker “pull” l’image car il ne la pas dans son catalogue local et lance le container

lancement du container

J’ouvre un navigateur, sur l’ip de ma machine et avec le port 9000, je tombe sur l’interface web de portainer

Interface web portainer

Et voila mon premier container et en place ! Je vais vérifier directement depuis notre console SSH

docker ps -a

J’ai bien les informations sur le container ID, l’image, depuis quand elle est créer, depuis combien de temps il est up et les ports

Interface de mgmt portainer

5. Portainer

J’en profite d’avoir déployer ce container pour vous faire une brève description des fonctionnalités possible avec Portainer

Portainer est un outil de gestion de conteneurs Docker qui offre une variété de fonctionnalités pour simplifier le déploiement, la surveillance et la gestion des applications dans des environnements conteneurisés. Voici une brève description des fonctionnalités possibles avec Portainer: Interface web conviviale, gestion des Conteneurs, déploiement facile, surveillance en temps réel, gestion des stacks, facilité de mise à jour, etc.

Portainer
Portainer
Portainer

6. Un container ok, mais lequel ?

Maintenant que vous savez mettre en place un container, vous pouvez mettre en place tellement de chose !
Votre propre siteweb, un DNS interne type adguard, un gestionnaire de mot de passe local

Et voila !
Voici comment je mets en place mes containers sur mon environnement local.

Have fun !
La suite aux prochains épisodes !
Jonathan

Jonathan

Administrateur dans un service informatique et passionné, moniteur canin et avec un intérêt marqué pour l'airsoft et le tir. J'aime savoir ce que je fais et je suis toujours en quête d'amélioration.