9 juin 2024

Initiation à docker

Cette formation est là pour vous initier à docker, d’autre formation seront disponible pour approfondir le sujet.

 

Avant d’entrer dans le vif du sujet, il est important de comprendre la notion de conteneur ou container en anglais. Un conteneur est donc un environnement permettant d’isoler des applications et leurs dépendances respectives afin d’éviter que celles-ci ne créent des interférences entre elles. Il s’agit d’une alternative aux machines virtuelles utilisées auparavant qui, elles, vont simuler un système entier. Les conteneurs, quant à eux, vont seulement puiser les ressources nécessaires à l’exécution de l’application dans le Kernel de l’OS principal de la machine physique. Cela permet donc de simuler plusieurs systèmes sur le même OS. Un conteneur peut être relié à d’autres conteneurs grâce à des systèmes de réseaux virtuels. Les ressources dédiées à chaque conteneur peuvent être augmentées selon le besoin de l’application. Et le conteneur peut être stoppé dès qu’aucun processus n’est en cours d’exécution. Tout cela fait que les conteneurs sont plus performants, plus flexibles, plus rapides, plus légers et plus simples à mettre en place et à utiliser. 

 

1# Docker c’est quoi ? 

Maintenant que l’on sait ce qu’est un conteneur, découvrons Docker. Alors, Docker est la plateforme de conteneurisation la plus populaire et la plus utilisée de nos jours. Il reprend toute la notion de conteneur, c’est-à-dire qu’il sépare des applications et leurs dépendances dans des conteneurs. On peut créer, tester, déployer et exécuter des applications sur n’importe quel environnement à l’aide de Docker. Cela évite les éventuels conflits au niveau de chaque composant et donc de résoudre les soucis de version, d’incompatibilité ou encore d’exécution qui surviennent souvent lorsque l’on développe une solution. 
 

Il offre un réel avantage aux systèmes distribués, car ces derniers peuvent être exécutés individuellement sur un ordinateur physique ou sur une instance de nœud. Cela offre une énorme flexibilité en matière de ressources allouées à chaque nœud de cluster. 
 

En plus de tout cela, il permet également de travailler avec de nombreux langages, framework et technologies tels que Node.js, ASP.Net, Ruby, PHP, Java, WordPress, PostgreSQL, etc. 

 

2# Pourquoi docker et pas un autre ?

Docker possède d’autres points forts, mais en résumé, voici les raisons pour lesquelles on l’utilise : 

• On peut exécuter plusieurs applications en utilisant différents OS sur une même machine hôte, sans avoir à créer les systèmes en entier 

• Les conteneurs peuvent être migrés n’importe où en générant leurs images une seule fois 

• Docker est multiplateforme, on peut l’exécuter sur Windows, MacOS et Linux, bien sûr ;

• Les langages les plus populaires et les plus utilisés sont pris en charge par lui 

• Il est léger, rapide, performant, facile à utiliser et moins gourmand en ressources 

• Les applications conteneurisées sont faciles à déployer, à exécuter, à maintenir et à partager

• La gestion des ressources utilisées par les applications est moins fastidieuse 

• Grâce à la superposition des couches des images de conteneurs Docker, on peut facilement gérer les versions d’une application et par conséquent revenir à une version antérieure lors d’un éventuel dysfonctionnement. 
 

3# Installation de docker sur windows

Docker fournis une installation pour tous les systèmes d’exploitation, nous utiliserons docker desktop pour windows, car nous simulerons des applications web toujours en local. 

 

Pour ça rendez-vous sur le site officiel docker : https://www.docker.com/products/docker-desktop/
Dès que l’installation est terminée, ouvrez un éditeur de texte comme Visual Studio Code et ouvrez un terminal. Entrer la commande docker -v pour voir si votre docker est bien installé, si c’est le cas, une ligne retournant la version sera affiché :
Docker version 24.0.7, build afdd53b 

 

Faisons un listing des différentes commandes docker pour gérer nos images et conteneurs (toutes ses commandes sont à faire dans un terminal de commande) :

 

Lancer un conteneur : 

docker run -d -p 80:80 pseudo/nom_du_conteneur 

 

Lister tous les conteneurs : 

docker ps -a 

 

Afficher les images créées :

 docker images 

 

Arrêter un conteneur en cours :

 docker stop ID_du_conteneur

 

Créer une image à partir d’un dockerfile :

 docker build .

 

Supprimer un conteneur :

 docker rm ID_du_conteneur 

 

Supprimer une image : 

docker rmi ID_de_l_image 

 

Supprimer toutes les images non utilisées :

 docker image prune

 

Supprimer tous les conteneurs non utilisés : 

docker container prune

 

Créons notre première image avec la commande : 

docker run -d -p 80:80 docker/getting-started 


 

Il existe une multitude d’image déjà créée par la communauté, pour installer l’une d’elles, il faudra se rendre sur le docker HUB : https://hub.docker.com/

 

Prenons l’exemple avec autre image déjà créé rendez-vous dans : https://hub.docker.com/_/hello-world


 

Copier/coller la commande qui est fournie sur docker hub dans votre terminal : 

docker pull hello-world

 

On peut voir que l’on a téléchargé l’image hello-world dans nos images vérifions avec la commande : docker image

 

4# Créer son image depuis un dockerfile

Dans la racine de votre projet web, créer un fichier que l’on nomme « dockerfile » sans aucune extension.

 

Dans ce fichier, entrez ceci : 

 

FROM node:14-alpine RUN apk update && apk add --no-cache python3 g++ make

WORKDIR /app

COPY . .

RUN yarn install --production CMD ["node", "src/index.js"]

EXPOSE 3000

 

Retournons dans notre terminal, allez dans le dossier de votre projet ou votre dockerfile est présent puis entrer la commande : 

docker build -t nom_de_mon_image . 
 

Le processus peut prendre plus ou moins de temps en fonction du nombre de composants que l’on a mis dans notre dockerfile ou si votre projet est lourd. Dans ce cas-là, un fichier « .dockerignore » 

pourrait s’avérer être utile pour ne pas installer certains composant de votre projet et les compiler seulement depuis notre conteneur docker.

 

Maintenant, testons notre application avec la commande : 

docker run -dp 3000:3000 nom_de_mon_image 

 

Rendez-vous sur le lien suivant pour voir votre projet conteneurisé et en ligne en local : 

http://localhost:3000 

 

Stoppez votre conteneur, vous pouvez le supprimer depuis l’interface desktop ou depuis les lignes de commande vu plus haut.

 

Il existe également un autre moyen pour créer un conteneur en important une image disponible sur le docker HUB ou en compilant une image depuis votre dockerfile.
 

Pour cela, il faut créer un fichier toujours à la racine de votre projet web que l’on nommera :

docker-compose.yaml

 

— Avec un dockerfile — 

version: '3.8' 

services

    web

        build: . #ici on build notre image grâce au dockerfile

        container_name: nom_du_conteneur 

        restart: always #On redémarre le conteneur si une erreur survient

        port

            - 80:80 #on définie le port par défaut du conteneur on y aura accès depuis http://localhost</span>

— 

— Avec une image — 

version: '3.8' 

services

    web

        image: hello-world/hello-world 

        container_name: nom_du_conteneur 

        restart: always #On redémarre le conteneur si une erreur survient

        port

            - 80:80 #on définie le port par défaut du conteneur on y aura accès depuis http://localhost</span>

— 

 

Il est très important d’avoir une indentation correcte, docker est très capricieux sur ça ! Faite donc un copier / coller de mon exemple. 

 

Ensuite dans la racine de notre dossier lancer la commande : 

docker compose up -d

 

Cette commande permet de créer une image avec notre dockerfile puis de conteneuriser le tout, le -d met le conteneur en arrière-plan ce qui le garde allumé. 
 

J’espère que cette formation d’initiation à docker vous a été utile !  

Mots clés:

intro docker

Cours Du Dev

Recevez les dernières formations disponibles en vous inscrivant à la newsletter

Créé par arkunis