Skip to main content

Command Palette

Search for a command to run...

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

Updated
5 min readView as Markdown
Docker : Construire, Déployer et Exécuter des Applications Partout
V

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 :

  1. Lit le Dockerfile

  2. Télécharge l'image node:18

  3. Crée plusieurs couches (layers)

  4. Installe les dépendances

  5. Ajoute le code de l'application

  6. 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.