Docker : Construire, Déployer et Exécuter des Applications Partout

Why Collaborate with Me?
~ Infrastructure as Code (IaC): Skilled in automating infrastructure provisioning with Terraform and Ansible, ensuring consistency, scalability, and repeatability. ~ Containerization & Orchestration: Expert in building, managing, and scaling containerized applications using Docker and Kubernetes clusters. ~ CI/CD Expertise: Proficient in designing and optimizing Jenkins pipelines for seamless code integration, testing, and deployment workflows. ~ Linux Systems Mastery: Strong background in Linux system administration, scripting, performance tuning, and server management. ~ Automation Enthusiast: Adept at automating repetitive tasks and complex workflows with Ansible, shell scripting, and YAML-driven configurations. ~ Problem Solver: Quick to learn emerging technologies, troubleshoot complex issues, and optimize systems for maximum reliability and efficiency. ~ Detail-Oriented: Committed to delivering clean, secure, and high-quality solutions that meet both business and technical goals.
Core Competencies
~ DevOps Tools: Jenkins, Docker, Kubernetes, Ansible, Terraform, Git, Bitbucket, YAML ~ Infrastructure as Code: Terraform, Ansible ~ Containerization and Orchestration: Docker, Kubernetes ~ Continuous Integration/Continuous Deployment: Jenkins Pipelines, GitOps workflows ~ Operating Systems: Linux (Ubuntu, CentOS) ~ Scripting: Shell scripting, YAML ~ Monitoring & Logging: (Optional, if you know Prometheus, Grafana, or similar tools.) ~ Project Management: Jira, Slack, Agile Methodologies
Introduction
Docker permet de regrouper une application et toutes ses dépendances dans une unité portable appelée conteneur.
Dans cet article, nous allons découvrir :
Qu'est-ce qu'un Dockerfile ?
Comment construire une image Docker ?
Comment exécuter un conteneur ?
Ce qui se passe en arrière-plan
Un exemple complet avec Node.js
Étape 1 : Créer une application Node.js simple
app.js
const express = require("express");
const app = express();
app.get("/", (req, res) => {
res.send("Bonjour depuis un conteneur Docker !");
});
app.listen(3000, () => {
console.log("Application démarrée sur le port 3000");
});
package.json
{
"name": "node-app",
"version": "1.0.0",
"dependencies": {
"express": "^4.18.2"
}
}
Étape 2 : Créer le Dockerfile
Dockerfile
FROM node:18
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
Comprendre chaque instruction
FROM
FROM node:18
Télécharge l'image de base Node.js depuis Docker Hub.
WORKDIR
WORKDIR /app
Crée et définit le répertoire de travail à l'intérieur du conteneur.
COPY
COPY package*.json ./
Copie les fichiers de dépendances dans le conteneur.
RUN
RUN npm install
Installe les dépendances Node.js pendant la construction de l'image.
Copier le reste de l'application
COPY . .
Copie l'ensemble du code source dans le conteneur.
EXPOSE
EXPOSE 3000
Indique que l'application écoute sur le port 3000.
CMD
CMD ["node", "app.js"]
Démarre l'application lorsque le conteneur est lancé.
Étape 3 : Construire l'image Docker
docker build -t node-app:v1 .
Que se passe-t-il ?
Docker :
Lit le Dockerfile
Télécharge l'image
node:18Crée plusieurs couches (layers)
Installe les dépendances
Ajoute le code de l'application
Génère l'image finale
Vérifier les images
docker images
Résultat :
REPOSITORY TAG
node-app v1
À ce stade :
✅ L'image existe
❌ Aucun conteneur n'est encore en cours d'exécution
Étape 4 : Exécuter un conteneur
docker run -d -p 3000:3000 --name node-container node-app:v1
Explication des options
-d
-d
Exécute le conteneur en arrière-plan (mode détaché).
-p
-p 3000:3000
Effectue le mappage des ports.
Port de la machine hôte ---> Port du conteneur
3000 ---> 3000
--name
--name node-container
Attribue un nom au conteneur.
Que se passe-t-il lorsque cette commande est exécutée ?
Docker :
Crée une couche d'écriture pour le conteneur
Configure le réseau du conteneur
Alloue les ressources nécessaires
Lance le processus Node.js
Effectue le mappage des ports
Rend l'application accessible
Flux d'exécution
Image Docker
|
v
Conteneur Docker
|
v
Application Node.js en cours d'exécution
Vérifier le conteneur
docker ps
Résultat :
CONTAINER ID IMAGE
abc123 node-app:v1
Accéder à l'application
Ouvrez votre navigateur :
http://localhost:3000
Résultat :
Bonjour depuis un conteneur Docker !
Différence entre une image et un conteneur
Image Docker
Une image est un modèle ou un plan de construction.
Image = Modèle
Exemple :
docker build -t node-app:v1 .
Cette commande crée une image.
Conteneur Docker
Un conteneur est une instance en cours d'exécution d'une image.
Conteneur = Application en fonctionnement
Exemple :
docker run node-app:v1
Cette commande crée et démarre un conteneur.
Analogie du monde réel
Image
La recette d'un gâteau.
Conteneur
Le gâteau préparé à partir de cette recette.
Recette ---> Gâteau
Image ---> Conteneur
Commandes Docker utiles
Lister les images
docker images
Lister les conteneurs actifs
docker ps
Arrêter un conteneur
docker stop node-container
Démarrer un conteneur
docker start node-container
Afficher les journaux
docker logs node-container
Supprimer un conteneur
docker rm node-container
Supprimer une image
docker rmi node-app:v1
Conclusion
Un Dockerfile définit la manière dont une image est construite.
Une image Docker représente le modèle de l'application, tandis qu'un conteneur Docker est l'instance en cours d'exécution de cette image.
Le flux de travail est le suivant :
Code de l'application
↓
Dockerfile
↓
Image Docker
↓
Conteneur Docker
↓
Application en cours d'exécution
Comprendre ce cycle de vie est essentiel pour maîtriser Docker, Kubernetes, les pipelines CI/CD et les pratiques DevOps modernes.
Docker constitue aujourd'hui l'une des technologies fondamentales du cloud native et permet aux équipes de développer, tester et déployer des applications de manière fiable et cohérente sur n'importe quel environnement.


