Projet · Phase 3.5

Docker (5/9) — Premier vrai service : Nginx

Assez de conteneurs jetables. On met en ligne un vrai serveur web, accessible depuis le réseau, servant tes propres fichiers — la première brique de « SORIA Web ».

⏱ ~1 hNiveau débutantPrérequis : Docker (4/9)Pratique · TP
L’idée reçue

« Pour tester un serveur web, il faut d’abord l’installer et le configurer pendant des heures. »

Avec Docker, un serveur web fonctionnel démarre en une commande. On va mettre en ligne Nginx, le rendre accessible depuis ton navigateur, puis lui faire servir tes propres pages. C’est le début de l’application fil rouge du projet : SORIA Web.

À la fin de ce module, tu sauras…

  • Lancer un service web conteneurisé et l’exposer sur un port
  • Comprendre la publication de ports (hôte ↔ conteneur)
  • Servir tes propres fichiers via un montage
  • Lire les journaux d’un service en direct

01Nginx en une commande

Expérience 1

Lancer, et échouer utilement

Manipule
docker run -d --name web nginx

Le conteneur tourne. Essaie de le joindre depuis la VM hôte :

Manipule
curl http://localhost:80
Observe
curl: (7) Failed to connect to localhost port 80: Connection refused
Nginx tourne bien dans le conteneur, mais il est injoignable depuis l’hôte. Le port n’est pas ouvert vers l’extérieur.
Comprends le réseau du conteneur est isolé

Par défaut, un conteneur a son propre réseau isolé. Nginx écoute sur le port 80 à l’intérieur du conteneur, mais rien ne relie ce port à l’hôte. Il faut publier le port explicitement.

02Publier le port

Expérience 2

Relier un port de l’hôte au conteneur

Manipule
docker rm -f web
docker run -d --name web -p 8080:80 nginx
curl -I http://localhost:8080
Observe
HTTP/1.1 200 OK
Server: nginx
Cette fois, ça répond. Depuis debian-gui, ouvre http://<ip-du-serveur>:8080 : la page d’accueil de Nginx s’affiche dans le navigateur.
Comprends -p hôte:conteneur

-p 8080:80 relie le port 8080 de l’hôte au port 80 du conteneur. Le trafic qui arrive sur 8080 est transmis à Nginx. La règle : à gauche l’hôte, à droite le conteneur. C’est ainsi qu’un service conteneurisé devient accessible depuis le réseau.

03Servir tes propres pages (SORIA Web)

Expérience 3

Monter ton site dans le conteneur

Manipule
mkdir -p ~/soria-web
echo "&lt;h1&gt;SORIA Web — ma première mise en ligne&lt;/h1&gt;" > ~/soria-web/index.html
docker rm -f web
docker run -d --name web -p 8080:80 -v ~/soria-web:/usr/share/nginx/html:ro nginx
curl http://localhost:8080
Observe
&lt;h1&gt;SORIA Web — ma première mise en ligne&lt;/h1&gt;
Nginx sert désormais ta page, pas la sienne. Modifie index.html côté hôte, recharge : le changement est immédiat, sans reconstruire le conteneur.
Comprends le montage en lecture seule

On monte ton dossier sur /usr/share/nginx/html, l’emplacement où Nginx cherche les pages. Le suffixe :ro (read-only) empêche le conteneur de modifier tes fichiers — bonne pratique de sécurité quand le conteneur n’a besoin que de lire.

04Regarder le service vivre (logs)

Expérience 4

Suivre les journaux en direct

Manipule
docker logs -f web

Laisse tourner, et depuis un autre terminal (ou le navigateur) fais quelques requêtes sur http://localhost:8080.

Observe
172.17.0.1 - - [.. ] "GET / HTTP/1.1" 200
172.17.0.1 - - [.. ] "GET /favicon.ico HTTP/1.1" 404
Chaque requête apparaît en direct. Ctrl+C arrête le suivi (pas le conteneur). C’est ta première fenêtre d’observabilité.
Comprends où vont les logs, et pourquoi

Un conteneur bien conçu écrit ses journaux sur la sortie standard, et Docker les capture (docker logs). C’est un principe clé : le conteneur ne gère pas ses fichiers de log lui-même ; il « parle », et la plateforme écoute. On s’appuiera là-dessus au module observabilité.

Ce que tu retiens

Tu as mis en ligne un vrai service : publication de port (-p hôte:conteneur) pour le rendre accessible, montage pour servir tes propres fichiers, logs pour l’observer. « SORIA Web » existe maintenant — servi par un conteneur.

Mini-projet

Mets SORIA Web en ligne

À faire

  1. Crée une vraie page d’accueil dans ~/soria-web/index.html (titre, quelques paragraphes).
  2. Sers-la avec Nginx sur le port 8080, en montage lecture seule.
  3. Ouvre-la depuis debian-gui dans le navigateur.
  4. Suis les logs et repère tes propres requêtes.
  5. Explique en 2 lignes la différence entre le port de l’hôte et celui du conteneur.
Fil rouge — Ta page est servie… mais elle dépend d’un dossier monté à la main. Et si on voulait emballer le site et son serveur dans une seule image, prête à déployer n’importe où ? C’est exactement le rôle du Dockerfile, au module suivant.

?Auto-évaluation

1. Que fait -p 8080:80 ?

Il relie le port 8080 de l’hôte au port 80 du conteneur : le trafic arrivant sur 8080 est transmis à Nginx.

2. Pourquoi curl localhost:80 échouait au premier essai ?

Le port du conteneur n’était pas publié vers l’hôte : le réseau du conteneur est isolé par défaut.

3. À quoi sert le suffixe :ro dans un montage ?

Il monte le dossier en lecture seule : le conteneur peut lire mais pas modifier les fichiers de l’hôte.

Connecte-toi pour enregistrer ta progression.

Suite → Docker (6/9) — Construire son image : Dockerfile