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](https://youdom.net/wp-content/uploads/2023/10/Environnement-VM.png)
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](https://youdom.net/wp-content/uploads/2023/10/Environnement-Docker.png)
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](https://youdom.net/wp-content/uploads/2023/10/youdom-Docker-Network.png)
Ensuite, je vais créer un dossier pour rassembler les services
#mkdir -p nomdemondossier
mkdir -p management
![Création du dossier pour docker](https://youdom.net/wp-content/uploads/2023/10/youdom-Docker-Folder.png)
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
![](https://youdom.net/wp-content/uploads/2023/10/youdom-Docker-CreaDockerCompose.png)
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](https://youdom.net/wp-content/uploads/2023/10/youdom-Docker-DockerCompose.png)
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](https://youdom.net/wp-content/uploads/2023/10/youdom-Docker-PullUp.png)
je peux voir que docker « pull » l’image car il ne la pas dans son catalogue local et lance le container
![lancement du container](https://youdom.net/wp-content/uploads/2023/10/youdom-Docker-Up.png)
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](https://youdom.net/wp-content/uploads/2023/10/youdom-Docker-Portainer.png)
Et voila mon premier container et en place ! Je vais vérifier directement depuis notre console SSH
docker ps -a
![](https://youdom.net/wp-content/uploads/2023/10/youdom-Docker-Ps.png)
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](https://youdom.net/wp-content/uploads/2023/10/youdom-Docker-PortainerDash.png)
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](https://youdom.net/wp-content/uploads/2023/10/youdom-Docker-PortainerContainer.png)
![Portainer](https://youdom.net/wp-content/uploads/2023/10/youdom-Docker-PortainerImages.png)
![Portainer](https://youdom.net/wp-content/uploads/2023/10/youdom-Docker-PortainerNetwork.png)
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