Écrire un Dockerfile pour créer une image Nginx personnalisée, la construire avec
docker build et la lancer avec docker run.
On crée le dossier et on l'ouvre dans VS Code. Tout sera au même endroit.
# mkdir -p : crée le dossier (et ses parents) sans erreur s'il existe déjà
mkdir -p ~/mon-nginx
# cd : se déplacer dans le dossier du projet
cd ~/mon-nginx
# code . : ouvre le dossier courant dans VS Code
code .
Créez un fichier index.html dans VS Code (clic droit → New File) :
Contenu :
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Mon Nginx Custom</title>
<style>
body {
font-family: Arial, sans-serif;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
background: #1a1a2e;
color: #eee;
margin: 0;
}
.box {
text-align: center;
background: #16213e;
padding: 40px 60px;
border-radius: 12px;
}
h1 { color: #7ecfff; }
</style>
</head>
<body>
<div class="box">
<h1>Mon Image Docker Nginx</h1>
<p>Cette page est servie par une image Docker personnalisée.</p>
</div>
</body>
</html>
Créez un fichier Dockerfile (sans extension) dans VS Code, à la racine du projet. Ce fichier contient les instructions pour construire notre image :
# FROM = l'image de base sur laquelle on construit
# nginx:alpine = Nginx version légère (Alpine Linux fait ~5Mo au lieu de ~100Mo)
# C'est comme dire "je pars d'un serveur Nginx déjà installé"
FROM nginx:alpine
# RUN = exécute une commande pendant la construction de l'image
# Ici on supprime la page d'accueil par défaut de Nginx
# pour la remplacer par la nôtre à l'étape suivante
RUN rm -rf /usr/share/nginx/html/*
# COPY = copie un fichier depuis votre ordinateur vers l'image
# On copie notre index.html dans le dossier où Nginx cherche les pages web
COPY index.html /usr/share/nginx/html/index.html
# EXPOSE = documente que cette image utilise le port 80
# C'est informatif : ça ne fait pas réellement de redirection de port
# (ça se fait avec -p au moment du docker run)
EXPOSE 80
# CMD = la commande qui sera lancée au démarrage du container
# L'image Nginx inclut déjà cette commande par défaut, donc pas besoin de la spécifier
# CMD ["nginx", "-g", "daemon off;"]
| Instruction | Description |
|---|---|
FROM nginx:alpine |
Utilise l'image Nginx légère (Alpine Linux) comme base |
RUN rm -rf ... |
Supprime les fichiers par défaut de Nginx |
COPY |
Copie notre fichier dans le container |
EXPOSE 80 |
Documente le port utilisé |
# Construit l'image Docker à partir du Dockerfile
# -t mon-nginx:1.0 = donne un nom ("mon-nginx") et un tag/version ("1.0") à l'image
# . = le point dit à Docker "cherche le Dockerfile dans le dossier courant"
docker build -t mon-nginx:1.0 .
-t mon-nginx:1.0 — Nom et tag de l'image. — Context de build (répertoire courant contenant le Dockerfile)# Liste les images Docker et filtre pour ne voir que la nôtre
docker images | grep mon-nginx
Vous devez voir :
mon-nginx 1.0 abc123def456 10 seconds ago 43MB
# Lance un container à partir de notre image personnalisée
# -d = mode détaché (tourne en arrière-plan)
# --name = donne un nom au container (plus facile que l'ID aléatoire)
# -p 8080:80 = redirige le port 8080 de votre PC vers le port 80 du container
# mon-nginx:1.0 = l'image qu'on vient de construire
docker run -d --name mon-nginx-container -p 8080:80 mon-nginx:1.0
# Vérifie que le container tourne (State = Up)
docker ps
# Teste si Nginx répond en envoyant une requête HTTP
# Vous devez voir le HTML de votre page index.html
curl http://localhost:8080
Ouvrez http://localhost:8080 dans votre navigateur — vous devez voir votre page personnalisée.
http://localhost:8080. Depuis un autre poste, remplacez par l'IP de votre machine Windows.
mon-nginx/
├── Dockerfile
└── index.html
# Affiche les logs du container (les requêtes reçues par Nginx, les erreurs, etc.)
docker logs mon-nginx-container
# Ouvre un shell interactif DANS le container
# -it = mode interactif + terminal
# sh = le shell utilisé (Alpine n'a pas bash, on utilise sh)
# Pour sortir : tapez "exit"
docker exec -it mon-nginx-container sh
# Arrête le container (il existe encore mais ne tourne plus)
docker stop mon-nginx-container
# Supprime le container (libère les ressources)
docker rm mon-nginx-container
# Supprime l'image (le "modèle" du container)
docker rmi mon-nginx:1.0
# Après avoir modifié le Dockerfile ou index.html :
# Reconstruisez avec un nouveau tag (version 2.0)
docker build -t mon-nginx:2.0 .
docker run -d --name mon-nginx-v2 -p 8080:80 mon-nginx:2.0
docker build et lancé un container avec docker run. Tout le projet est dans un seul dossier, visible dans VS Code.