L'essentiel en une minute
Ce tutoriel Docker pour débutants vous mène de l'installation à une API Node.js conteneurisée, lancée avec Docker Compose à côté d'une base PostgreSQL. Docker empaquette une application et ses dépendances dans une image, puis l'exécute dans un conteneur isolé, identique sur votre poste et sur le serveur.
Commandes et versions viennent de la documentation officielle de Docker, consultée le 25 octobre 2026. Le code n'a pas été exécuté pour cet article.
Points clés
- Au 25 octobre 2026, Docker Desktop en est à la 4.96.3 (22 octobre) et Docker Engine à la 29.9.2 (20 octobre), selon les notes de version.
- Docker Desktop est gratuit pour un usage personnel et pour les entreprises de moins de 250 salariés et de moins de 10 millions de dollars de chiffre d'affaires annuel. Au-delà, il est payant.
- Un bon Dockerfile en 2026 utilise plusieurs étapes, une image de base à version fixée, un utilisateur non root et un fichier
.dockerignore.- Avec Docker Compose, la clé
versionest obsolète, la commande s'écritdocker composesans tiret, et l'API doit attendre que la base soit prête.- Depuis PostgreSQL 18, le volume de l'image officielle se monte sur
/var/lib/postgresql, et non plus sur le sous-dossierdata.
Conteneur ou machine virtuelle : ce que fait Docker
Un conteneur n'est pas une petite machine virtuelle : c'est un processus isolé qui partage le noyau du système hôte. La documentation de Docker le résume ainsi : un conteneur est « simplement un processus isolé avec tous les fichiers dont il a besoin pour fonctionner », alors qu'une machine virtuelle est « un système d'exploitation complet avec son propre noyau » (notre traduction, documentation de Docker sur les conteneurs, consultée le 25 octobre 2026).
Une image Docker est un modèle en lecture seule qui contient les instructions pour créer un conteneur, et un conteneur est une instance exécutable de cette image (présentation de Docker).
| Critère | Conteneur Docker | Machine virtuelle |
|---|---|---|
| Noyau | Partagé avec l'hôte | Propre à chaque machine |
| Contenu | L'application et ses dépendances | Un système d'exploitation complet |
| Usage typique | Une application ou un service par conteneur | Isoler un système entier |
| Isoler une seule application | Un processus isolé suffit | « Beaucoup de surcoût », selon Docker |
Ce tableau est notre synthèse ; la citation de la dernière ligne vient de la même page (notre traduction). La commande docker pilote un démon, dockerd, qui télécharge les images depuis un registre, Docker Hub par défaut (présentation de Docker).
Pourquoi apprendre Docker en 2026
Dans l'enquête Stack Overflow 2026, Docker arrive en tête de la rubrique « Cloud development », qui mêle plateformes cloud, conteneurs et gestionnaires de paquets. 59,1 % des 10 889 répondants à cette question déclarent avoir travaillé avec Docker ou Docker Compose au cours de l'année écoulée, devant npm (54,6 %), pip (42,1 %) et AWS (41,8 %), et loin devant Kubernetes (26,0 %) et Podman (13,0 %) (Stack Overflow Developer Survey 2026, consulté le 25 octobre 2026).
58,9 % des utilisateurs de Docker souhaitent le garder. L'édition 2025 donnait 71,1 % d'usage sur 24 473 réponses, mais la liste d'options a changé entre les deux éditions : ne lisez pas l'écart comme une baisse (Stack Overflow Developer Survey 2025, consulté le 25 octobre 2026).
En 2025, 52,5 % des 1 558 personnes en apprentissage utilisaient déjà Docker, contre 73,8 % des 20 070 développeurs professionnels.
Étape 1 : installer Docker sur Windows, macOS ou Linux
Sur Windows et macOS, on installe Docker Desktop, qui embarque le moteur, la ligne de commande et Docker Compose ; sur Linux, Docker Engine. La version 4.96.3 de Docker Desktop est sortie le 22 octobre 2026, et la 4.96.2 du même jour embarque Docker Compose v5.6.1 (notes de version de Docker Desktop, consultées le 25 octobre 2026). Docker Engine en est à la 29.9.2, publiée le 20 octobre (notes de version de Docker Engine).
La licence de Docker Desktop
Selon sa page de licence, Docker Desktop est gratuit pour les petites entreprises (moins de 250 salariés et moins de 10 millions de dollars de chiffre d'affaires annuel), l'usage personnel, l'enseignement et les projets open source non commerciaux. Il est payant pour l'usage professionnel dans les organisations plus grandes et pour les administrations (licence de Docker Desktop, consultée le 25 octobre 2026).
| Offre | Prix affiché, facturation annuelle | Prix affiché, facturation mensuelle |
|---|---|---|
| Docker Personal | 0 $ | 0 $ |
| Docker Pro | 9 $ par utilisateur et par mois | 11 $ par utilisateur et par mois |
| Docker Team | 15 $ par utilisateur et par mois | 16 $ par utilisateur et par mois |
| Docker Business | 24 $ par utilisateur et par mois | 24 $ par utilisateur et par mois |
Prix en dollars par utilisateur, relevés le 25 octobre 2026 sur la page de tarifs de Docker. Docker Engine, lui, est open source sous licence Apache 2.0 (présentation de Docker Engine).
Windows : Docker Desktop avec WSL 2
Sur Windows, Docker Desktop s'appuie sur WSL 2, le sous-système Linux de Windows. Pour ce mode, la page d'installation liste Windows 10 64 bits « Enterprise, Pro, or Education version 22H2 (build 19045) » et Windows 11 64 bits dans les mêmes éditions, version 23H2 (build 22631) ou plus récente. Elle demande WSL 2.1.5 au minimum, un processeur 64 bits avec SLAT, 8 Go de mémoire vive (« 8GB system RAM ») et la virtualisation activée dans le BIOS ou l'UEFI (installation sur Windows, consultée le 25 octobre 2026).
Docker n'y prend en charge que les versions de Windows encore maintenues par Microsoft, et précise que les éditions Famille et Éducation ne lancent que des conteneurs Linux, ce qui suffit ici.
Dans PowerShell, installez ou mettez à jour WSL :
wsl --install
wsl --update
Lancez ensuite Docker Desktop Installer.exe, choisissez WSL 2 plutôt que Hyper-V quand l'assistant le demande, puis démarrez Docker Desktop.
macOS : Docker Desktop
Sur Mac, Docker Desktop est pris en charge sur la version actuelle de macOS et les deux précédentes, avec au moins 4 Go de mémoire vive. Téléchargez l'installateur adapté à votre puce (Apple ou Intel), ouvrez Docker.dmg et glissez Docker dans Applications (installation sur Mac, consultée le 25 octobre 2026).
Linux : Docker Engine sur Ubuntu
Sur Linux, installez Docker Engine depuis le dépôt officiel. La page pour Ubuntu liste les versions 26.10, 26.04 LTS, 24.04 LTS et 22.04 LTS. Retirez d'abord les paquets non officiels, puis ajoutez le dépôt (installation sur Ubuntu, consultée le 25 octobre 2026) :
sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc docker-buildx podman-docker containerd runc | cut -f1)
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo docker run hello-world
Le script rapide get.docker.com, que citait la première version de cet article, n'est pas recommandé par Docker pour la production.
Pour utiliser Docker sans sudo, ajoutez votre compte au groupe docker, en sachant que ce groupe donne des privilèges équivalents à root selon la documentation (étapes après installation) :
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
Si groupadd répond que le groupe existe déjà, ce n'est pas une erreur. newgrp n'agit que sur le terminal ouvert : déconnectez-vous puis reconnectez-vous, comme le conseille la documentation.
Sur Windows et macOS, vérifiez l'installation avec docker run hello-world.
Étape 2 : lancer vos premiers conteneurs
Sept commandes suffisent pour faire vivre un conteneur : run, ps, images, logs, exec, stop et rm. Cet exemple lance le serveur web Nginx en version stable 1.30, la ligne affichée comme stable sur sa page Docker Hub le 25 octobre 2026 :
# Télécharger l'image et démarrer un conteneur en arrière-plan
docker run -d --name mon-nginx -p 127.0.0.1:8080:80 nginx:1.30
# Lister les conteneurs actifs, puis tous les conteneurs
docker ps
docker ps -a
# Lister les images présentes sur la machine
docker images
# Suivre les journaux du conteneur (Ctrl+C pour quitter)
docker logs -f mon-nginx
# Ouvrir un shell dans le conteneur, puis taper exit pour sortir
docker exec -it mon-nginx sh
# Arrêter puis supprimer le conteneur
docker stop mon-nginx
docker rm mon-nginx
Ouvrez http://127.0.0.1:8080 pendant que le conteneur tourne : la page d'accueil de Nginx s'affiche. D'après la référence de docker run, -d lance le conteneur en arrière-plan, --name lui donne un nom et -it ouvre un terminal interactif. -p 127.0.0.1:8080:80 publie le port 80 du conteneur sur le port 8080 de votre machine : toujours le port de l'hôte d'abord.
Pourquoi 127.0.0.1 devant le port ? La documentation de Docker prévient que publier un port est « non sécurisé par défaut » : le port devient accessible depuis l'extérieur (notre traduction, publication des ports). L'adresse locale réserve l'accès à votre poste. Sur Ubuntu, la page d'installation ajoute que les ports publiés contournent les règles des pare-feu ufw et firewalld.
Supprimer un conteneur ne supprime pas l'image : docker rmi nginx:1.30 s'en charge.
Étape 3 : écrire un Dockerfile pour une petite application
Un Dockerfile décrit comment construire une image Docker. Notre exemple conteneurise l'API de tâches de notre tutoriel pour créer une API REST avec Node.js et Express : un dossier api-taches avec package.json, package-lock.json et le code dans src/. src/server.js écoute le port 3000 et refuse de démarrer sans JWT_SECRET d'au moins 32 octets ; la base SQLite est le fichier désigné par DB_PATH.
# syntax=docker/dockerfile:1
# Étape 1 : installer les dépendances de production
FROM node:24-alpine AS deps
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci --omit=dev
# Étape 2 : image finale
FROM node:24-alpine
ENV NODE_ENV=production
ENV DB_PATH=/app/data/data.db
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY package.json ./
COPY src ./src
RUN mkdir -p /app/data && chown node:node /app/data
USER node
EXPOSE 3000
CMD ["node", "src/server.js"]
Chaque choix de ce Dockerfile suit une recommandation officielle :
-
Plusieurs étapes. Chaque
FROMouvre une étape, etCOPY --from=depsne reprend que le dossiernode_modules(builds multi-étapes). Une compilation TypeScript irait, elle aussi, dans une étape séparée. -
Une version fixée.
node:24-alpinevise la ligne 24, signalée comme LTS sur la page Docker Hub de Node.js le 25 octobre 2026, la version qu'exige l'API. Docker conseille même d'épingler l'image par son empreinte (digest) (bonnes pratiques de build). -
Un utilisateur non root. Les bonnes pratiques de Docker demandent d'utiliser
USERquand un service peut tourner sans privilèges. Les images Node.js fournissent pour cela l'utilisateurnode, d'identifiant 1000 (bonnes pratiques de l'image Node.js). Comme/appappartient à root,/app/dataest confié ànodeavantUSER, pour que SQLite puisse y écrire. -
L'ordre des couches. Copier
package.jsonavant le code réutilise le cache :npm cin'est relancé que si les dépendances changent.
Le CMD lance node src/server.js plutôt que npm start, dont le script lit un .env : en conteneur, Docker passe les variables.
Le fichier .dockerignore
Le fichier .dockerignore, à la racine du contexte de build, exclut des fichiers avant leur envoi au moteur (contexte de build) : ici node_modules, la base locale et surtout le .env et ses secrets.
node_modules
.env
.git
data.db*
test
*.log
Exportez d'abord un secret de 32 octets : -e JWT_SECRET, sans valeur, reprend la variable exportée, selon la référence de docker run. --init ajoute un processus qui transmet les signaux à Node.js, qui n'est pas conçu pour tourner comme premier processus, selon la documentation de l'image. Ce bloc vise un terminal bash (Linux, macOS, WSL ou Git Bash) :
export JWT_SECRET=$(node -e "console.log(require('node:crypto').randomBytes(32).toString('hex'))")
docker build -t api-taches:1.0 .
docker run -d --name api-taches --init \
-p 127.0.0.1:3000:3000 \
-e JWT_SECRET \
-v api-data:/app/data \
api-taches:1.0
curl http://127.0.0.1:3000/health
Sous PowerShell, export et les retours à la ligne par \ ne fonctionnent pas ; la même séquence s'écrit ainsi :
$env:JWT_SECRET = node -e "console.log(require('node:crypto').randomBytes(32).toString('hex'))"
docker build -t api-taches:1.0 .
docker run -d --name api-taches --init -p 127.0.0.1:3000:3000 -e JWT_SECRET -v api-data:/app/data api-taches:1.0
curl.exe http://127.0.0.1:3000/health
Le volume api-data garde le fichier SQLite quand le conteneur est supprimé ; vide, il reçoit au premier montage le contenu du dossier de l'image (documentation des volumes). Ne passez pas le .env du projet avec --env-file : son DB_PATH=data.db pointe hors du volume, là où node ne peut pas écrire. La route /health doit répondre {"statut":"ok"} ; si la connexion est refusée, attendez une seconde que Node.js démarre. Supprimez ce conteneur (docker rm -f api-taches) avant l'étape 4, qui publie le même port. Compose préfixe les volumes du nom du projet : la base SQLite de cette étape ne sera donc pas reprise à l'étape 4.
docker init génère un Dockerfile, un compose.yaml, un .dockerignore et un README.Docker.md pour votre projet ; sa référence le présente comme fourni par Docker Desktop, donc absent d'un Docker Engine seul (référence de docker init). Relisez le résultat.
Étape 4 : une API et une base PostgreSQL avec Docker Compose
Docker Compose décrit plusieurs services dans un fichier et les lance ensemble. Le nom recommandé est compose.yaml ; docker-compose.yml reste accepté pour compatibilité (modèle d'application Compose, consulté le 25 octobre 2026). Placez ce fichier dans le dossier api-taches, à côté du Dockerfile de l'étape 3 :
services:
api:
build: .
ports:
- "127.0.0.1:3000:3000"
environment:
JWT_SECRET: ${JWT_SECRET:?definir JWT_SECRET dans .env}
DB_PATH: /app/data/data.db
DATABASE_URL: postgres://app:${POSTGRES_PASSWORD:?definir POSTGRES_PASSWORD dans .env}@db:5432/app
volumes:
- api-data:/app/data
depends_on:
db:
condition: service_healthy
init: true
db:
image: postgres:18-alpine
environment:
POSTGRES_USER: app
POSTGRES_DB: app
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?definir POSTGRES_PASSWORD dans .env}
volumes:
- db-data:/var/lib/postgresql
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
volumes:
api-data:
db-data:
Précision importante : l'API du tutoriel lié stocke ses données dans SQLite (DB_PATH, volume api-data). Le service db est un exemple générique, prêt pour le passage à PostgreSQL que ce tutoriel recommande en production : il faudra alors adapter src/db.js pour lire DATABASE_URL.
Compose lit le .env du dossier pour remplacer les variables : JWT_SECRET y est déjà, ajoutez POSTGRES_PASSWORD= suivi d'un mot de passe sans caractères spéciaux, puisqu'il entre dans une URL. Seules les variables listées sous environment arrivent dans le conteneur : le DB_PATH du .env n'y entre pas. ${VAR:?message} arrête Compose si la variable est vide ou absente (interpolation des variables).
Ce fichier évite quatre pièges des tutoriels plus anciens :
-
Pas de clé
version. La spécification Compose la garde pour compatibilité, mais elle est « seulement informative » et déclenche un avertissement d'obsolescence (notre traduction, spécification Compose). -
Une base vraiment prête. Compose n'attend pas qu'un conteneur soit prêt, seulement qu'il soit lancé. Le couple
healthchecketcondition: service_healthyfait attendre l'API jusqu'à ce quepg_isreadyréponde (ordre de démarrage). Le$$laisse la variable au shell du conteneur. -
Le bon chemin de volume. Depuis PostgreSQL 18, l'image officielle déclare son volume sur
/var/lib/postgresql, et ses données vont dans un sous-dossier propre à la version,/var/lib/postgresql/18/docker(page Docker Hub de PostgreSQL, consultée le 25 octobre 2026). Le montage sur/var/lib/postgresql/datavient des versions antérieures. -
Un init pour Node.js.
init: trueest l'équivalent de--init: il lance un processus qui transmet les signaux (services Compose).
Dans DATABASE_URL, l'hôte s'appelle db, le nom du service : chaque service est joignable par son nom. Les commandes du quotidien :
docker compose up -d --build # construire et démarrer en arrière-plan
docker compose ps # état des services
docker compose logs -f api # journaux de l'API
docker compose exec db psql -U app -d app # console SQL
docker compose down # arrêter, garder les données
docker compose down supprime les conteneurs et les réseaux, mais garde les volumes. Avec -v, il supprime aussi les volumes nommés déclarés dans le fichier, donc vos deux bases (référence de docker compose down).
Étape 5 : corriger les erreurs courantes
Ces erreurs, tirées de la documentation et des guides concurrents, tiennent surtout à six causes : démon arrêté, droit manquant, port pris, mauvaise adresse d'écoute, tutoriel daté ou configuration de l'API.
| Symptôme | Cause probable | Correction |
|---|---|---|
Cannot connect to the Docker daemon |
Docker Desktop fermé, ou service arrêté sur Linux | Lancer Docker Desktop, ou sudo systemctl start docker
|
permission denied sur /var/run/docker.sock
|
Compte Linux hors du groupe docker
|
Utiliser sudo, ou rejoindre le groupe docker en connaissant le risque |
port is already allocated |
Un autre programme utilise le port de l'hôte | Changer le premier nombre : -p 127.0.0.1:8081:80
|
| La page ne s'affiche pas, le conteneur tourne | L'application écoute 127.0.0.1 dans le conteneur |
La faire écouter sur 0.0.0.0 ; vérifier l'ordre hôte:conteneur |
docker-compose: command not found |
Compose v1, retiré | Taper docker compose, sans tiret |
Avertissement sur l'attribut version
|
Fichier Compose ancien | Supprimer la ligne version
|
JWT_SECRET doit contenir au moins 32 octets |
Secret absent ou trop court | L'exporter, ou l'ajouter au .env lu par Compose |
unable to open database file |
DB_PATH hors de /app/data
|
Garder DB_PATH=/app/data/data.db
|
| L'API plante au démarrage, base injoignable (API reliée à PostgreSQL) | La base n'est pas prête |
healthcheck et condition: service_healthy
|
| Données PostgreSQL perdues |
down -v, ou volume mal monté avec PostgreSQL 18 |
Ne pas ajouter -v ; monter /var/lib/postgresql
|
| Build lent, image énorme | Pas de .dockerignore, code copié avant les dépendances |
Ajouter .dockerignore ; copier package.json en premier |
Selon la page des produits retirés de Docker, docker-compose (Compose v1, en Python) a été remplacé par docker compose, intégré à la ligne de commande, et n'est plus maintenu (produits retirés de Docker, consulté le 25 octobre 2026).
Quant à latest, le 25 octobre 2026, nginx:latest pointait vers la ligne 1.31, dite « mainline », et non vers la ligne stable 1.30 (page Docker Hub de Nginx). Elle change sans prévenir : fixez la version.
Dernière règle de ce guide Docker pour débutants : un fichier modifié dans un conteneur disparaît avec lui ; seuls les volumes et l'image survivent.
Aide-mémoire : les commandes Docker pour débutants
Les commandes de ce tutoriel, à garder sous la main. Toutes figurent dans la référence de la ligne de commande de Docker.
| Commande | Ce qu'elle fait |
|---|---|
docker run -d --name mon-nginx -p 127.0.0.1:8080:80 nginx:1.30 |
Crée et démarre un conteneur en arrière-plan |
docker ps / docker ps -a
|
Liste les conteneurs actifs / tous les conteneurs |
docker images |
Liste les images locales |
docker logs -f mon-nginx |
Suit les journaux d'un conteneur |
docker exec -it mon-nginx sh |
Ouvre un shell dans un conteneur actif |
docker stop mon-nginx / docker rm mon-nginx
|
Arrête / supprime un conteneur |
docker rmi nginx:1.30 |
Supprime une image inutilisée |
docker build -t api-taches:1.0 . |
Construit une image depuis le Dockerfile du dossier |
docker volume ls |
Liste les volumes |
docker compose up -d --build |
Construit et démarre tous les services |
docker compose logs -f |
Suit les journaux de tous les services |
docker compose down / down -v
|
Arrête les services / et supprime les volumes |
docker init |
Génère Dockerfile, compose.yaml et .dockerignore (Docker Desktop) |
Et après Docker ?
Docker Compose suffit tant que tout tient sur un serveur. Ensuite, trois suites logiques :
- Automatiser les builds. Pour construire l'image et lancer les tests à chaque modification, notre guide pour automatiser ses déploiements en CI/CD montre la marche à suivre avec GitHub Actions et GitLab CI.
- Passer à plusieurs machines. Quand un serveur ne suffit plus, notre guide Kubernetes pour débutants part des notions vues ici.
- Héberger le résultat. Notre comparatif de l'hébergement cloud pour développeurs aide à choisir, et notre duel AWS, Azure et Google Cloud compare les trois grands.
Côté matériel, gardez en tête les 8 Go de mémoire vive demandés sur Windows : notre guide du laptop pour développeur en tient compte.
Ce que nous n'avons pas pu vérifier
Les points suivants sont absents ou signalés comme incertains :
- L'exécution du code. Aucune commande, aucun Dockerfile et aucun fichier Compose de cet article n'a été exécuté pour sa rédaction.
- Windows Famille. La liste des systèmes requis cite les éditions Entreprise, Pro et Éducation ; la même page indique seulement que l'édition Famille se limite aux conteneurs Linux, sans dire explicitement si elle est prise en charge.
-
Les droits du volume SQLite. La documentation dit qu'un volume vide reçoit le contenu du dossier de l'image ; la page lue ne précise pas que le propriétaire
nodedu dossier est conservé. - La mémoire consommée par Docker Desktop. Le chiffre de 2 à 4 Go de la première version n'a pas de source officielle : il est retiré.
- La version de Docker Engine embarquée dans Docker Desktop 4.96.3, que les notes de version ne mentionnent pas.
- Les prix en euros de Docker Pro, Team et Business, la page de tarifs consultée affichant des dollars.
- Une tendance entre les enquêtes 2025 et 2026 de Stack Overflow, dont les options et les échantillons diffèrent.
Questions fréquentes
Docker est-il gratuit ?
Docker Engine, le moteur utilisé sur Linux, est open source sous licence Apache 2.0, selon sa page officielle. Docker Desktop est gratuit pour l'usage personnel, l'enseignement, l'open source non commercial et les entreprises de moins de 250 salariés et de moins de 10 millions de dollars de chiffre d'affaires annuel, selon la licence de Docker Desktop. Au-delà, il faut un abonnement Pro, Team ou Business.
Quelle différence entre une image et un conteneur ?
Une image Docker est un modèle en lecture seule, un conteneur est une instance qui s'exécute à partir de cette image, selon la présentation de Docker. Supprimer un conteneur ne supprime pas son image.
Faut-il écrire docker-compose ou docker compose ?
docker compose, sans tiret. L'ancien outil docker-compose (Compose v1) a été remplacé par Compose v2 et n'est plus maintenu, selon la page des produits retirés de Docker.
Docker pour débutants : par où commencer ?
Installez Docker Desktop ou Docker Engine, lancez docker run hello-world, puis suivez ce guide dans l'ordre : un conteneur Nginx, un Dockerfile pour votre application, puis un fichier Compose avec une base.
À propos de l'auteur
Abdelilah Ourti est ingénieur IA et architecte logiciel. Il conçoit et déploie des applications web et des systèmes d'IA, et publie sur NeurauTech des guides et des comparatifs destinés aux développeurs francophones. Ses autres articles sont réunis sur sa page auteur.
Méthode. Synthèse documentaire fondée exclusivement sur des sources publiques consultées le 25 octobre 2026 : documentation officielle de Docker (installation, notes de version, licence, build, Compose, volumes, réseau, ligne de commande), spécification Compose, page de tarifs de Docker, pages Docker Hub des images Node.js, PostgreSQL et Nginx, bonnes pratiques de l'image Node.js, enquêtes Stack Overflow 2025 et 2026. Les commandes n'ont pas été exécutées pour cet article. Les citations issues de sources en anglais sont traduites par nos soins. Aucun lien n'est affilié et aucune relation commerciale ne lie l'auteur aux éditeurs mentionnés.
Une erreur ou une version périmée ? Écrivez à [email protected] : l'article sera corrigé et la date de mise à jour modifiée.
Dernière mise à jour : 25 octobre 2026.
Image d'en-tête : İsmail Enes Ayhan (Unsplash License). Graphiques : NeurauTech, d'après Stack Overflow.


Top comments (0)