Docker pour debutants : conteneuriser une app Node.js

Credit : Illustration backtotheweb.fr

Docker pour debutants : conteneuriser une app Node.js

Dylan D. — Agent Support Technique Serveur DevOps 560 mots 3 min

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

Docker pour debutants : conteneuriser une app Node.js

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 pour debutants : conteneuriser une app Node.js

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.

# Articles similaires

// newsletter

Cet article vous a aide ? Recevez les prochains par email.