Credit : Illustration backtotheweb.fr
Docker pour debutants : conteneuriser une app Node.js
Docker pour debutants : conteneuriser une app Node.js
Docker permet d'empaqueter une application avec toutes ses dependances dans un conteneur isole et reproductible. Voyons comment conteneuriser une application Node.js Express sur un serveur IONOS.
Installation de Docker
Sur Debian 12 :
apt update
apt install ca-certificates curl gnupg -y
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(. /etc/os-release && echo $VERSION_CODENAME) stable" > /etc/apt/sources.list.d/docker.list
apt update
apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y
Verifiez :
docker --version
docker compose version
L'application Node.js
Creons une application Express simple. Fichier package.json :
{
"name": "mon-app",
"version": "1.0.0",
"scripts": {
"start": "node server.js"
},
"dependencies": {
"express": "^4.18.2"
}
}
Fichier server.js :
const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;
app.get('/', (req, res) => {
res.json({ message: 'Bienvenue sur mon API', timestamp: new Date() });
});
app.get('/health', (req, res) => {
res.json({ status: 'ok' });
});
app.listen(PORT, () => {
console.log(`Serveur demarre sur le port ${PORT}`);
});
Creer le Dockerfile
# Utiliser une image Node.js Alpine (legere)
FROM node:20-alpine
# Creer le repertoire de travail
WORKDIR /app
# Copier les fichiers de dependances d'abord (cache Docker)
COPY package*.json ./
# Installer les dependances en mode production
RUN npm ci --only=production
# Copier le reste du code source
COPY . .
# Creer un utilisateur non-root
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
# Exposer le port
EXPOSE 3000
# Commande de demarrage
CMD ["node", "server.js"]
Ajoutez un fichier .dockerignore :
node_modules
npm-debug.log
.git
.env
Construire et lancer le conteneur
docker build -t mon-app:1.0 .
docker run -d --name mon-app -p 3000:3000 mon-app:1.0
Note perso : sur nos serveurs IONOS, cette config tourne nickel depuis des mois.
Testez avec curl http://localhost:3000.
Docker Compose pour multi-conteneurs
La plupart des applications ont besoin de plusieurs services. Creons un fichier docker-compose.yml avec Node.js et MongoDB :
services:
app:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- MONGO_URI=mongodb://mongo:27017/monapp
depends_on:
- mongo
restart: unless-stopped
networks:
- app-network
mongo:
image: mongo:7
volumes:
- mongo-data:/data/db
networks:
- app-network
restart: unless-stopped
volumes:
mongo-data:
networks:
app-network:
driver: bridge
Lancez l'ensemble :
docker compose up -d
docker compose ps
docker compose logs -f app
Comprendre les volumes
Les volumes persistent les donnees au-dela du cycle de vie d'un conteneur :
# Lister les volumes
docker volume ls
# Inspecter un volume
docker volume inspect mongo-data
Comprendre le networking
Dans le reseau app-network, les conteneurs se resolvent par leur nom de service. L'application accede a MongoDB via mongo:27017 et non localhost.
# Lister les reseaux
docker network ls
# Inspecter le reseau
docker network inspect mon-app_app-network
Commandes utiles
docker compose down # Arreter tous les conteneurs
docker compose up -d --build # Reconstruire et relancer
docker exec -it mon-app sh # Entrer dans un conteneur
docker system prune -a # Nettoyer les images inutilisees
Docker simplifie enormement le deploiement et garantit que votre application fonctionnera de la meme maniere en developpement et en production sur votre serveur IONOS.