Nouveau : Datasets open source gratuits disponibles !Decouvrir →
Intermediaire 25 min Next.js

Deployer Next.js avec Docker

Pourquoi Déployer Next.js avec Docker ?

Le déploiement d'applications Web avec Docker offre un niveau élevé de portabilité, de sécurité et de gestion des ressources. En particulier pour les applications basées sur Next.js, qui est une solution React optimisée pour le développement server-side rendering (SSR), Docker permet une expérience utilisateur fluide tout en assurant une performance élevée.

Un cas concret de l'utilisation du déploiement Docker avec Next.js est lorsqu'une application a besoin d'être déployée sur plusieurs environnements différents, tels que production, pré-production et développement. Avec Docker, vous pouvez créer des images standardisées qui s'exécutent de manière cohérente sur n'importe quel système compatible.

Prerequis

Pour suivre ce tutoriel, vous aurez besoin des éléments suivants :

  • Node.js : v14.0.0 ou supérieur
  • npm : v6.0.0 ou supérieur
  • Docker : v20.10.7 ou supérieur
  • Editor de code (ex: Visual Studio Code)

Concepts fondamentaux

Dockerfile

Le Dockerfile est un fichier texte contenant des instructions qui définissent comment créer une image Docker.

## Définit l'image de base
FROM node:14

## Copie le package.json et yarn.lock dans le répertoire /app
COPY package*.json ./

## Installe les dépendances du projet
RUN npm install

## Copie tous les fichiers du répertoire actuel vers /app/ à l'intérieur de l'image
COPY . .

## Expose le port 3000
EXPOSE 3000

## Démarre l'application Next.js
CMD ["npm", "start"]

Docker Compose

docker-compose.yml permet de définir et gérer des applications multi-conteneurs.

version: '3.8'
services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production

Images Docker

Une image Docker est une seule couche de données qui contient tout ce dont un conteneur doit être exécuté, y compris le système d'exploitation et les applications.

## Construit l'image Docker
docker build -t my-next-app .

## Exécute le conteneur
docker run -p 3000:3000 my-next-app

Mise en pratique : Projet fil rouge

Nous allons créer une application simple d'un gestionnaire de tâches.

Étape 1 : Initialiser un nouveau projet Next.js

## Crée un nouveau projet Next.js
npx create-next-app@latest task-manager

## Changez de répertoire
cd task-manager

Étape 2 : Configurer le Dockerfile

Créez un fichier Dockerfile à la racine du projet avec le contenu suivant :

FROM node:14

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 3000

CMD ["npm", "start"]

Étape 3 : Configurer docker-compose.yml

Créez un fichier docker-compose.yml à la racine du projet avec le contenu suivant :

version: '3.8'
services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production

Étape 4 : Ajouter une fonctionnalité simple

Ajoutez un simple composant TaskList dans le fichier pages/index.js :

// pages/index.js
import React, { useState } from 'react';

const TaskList = () => {
  const [tasks, setTasks] = useState([]);
  const [newTask, setNewTask] = useState('');

  const handleAddTask = () => {
    if (newTask.trim() !== '') {
      setTasks([...tasks, newTask]);
      setNewTask('');
    }
  };

  return (
    <div>
      <h1>Task Manager</h1>
      <input
        type="text"
        value={newTask}
        onChange={(e) => setNewTask(e.target.value)}
        placeholder="Add a task"
      />
      <button onClick={handleAddTask}>Add Task</button>
      <ul>
        {tasks.map((task, index) => (
          <li key={index}>{task}</li>
        ))}
      </ul>
    </div>
  );
};

export default TaskList;

Étape 5 : Construire et exécuter l'application

## Construit l'image Docker
docker build -t task-manager .

## Exécute le conteneur
docker run -p 3000:3000 task-manager

Erreurs fréquentes et debugging

Erreur 1 : Error: listen EACCES: permission denied 0.0.0.0:3000

Code incorrect :

docker run -p 3000:3000 my-next-app

Correction :

Assurez-vous que le port 3000 n'est pas déjà utilisé sur votre machine.

Erreur 2 : Error: Cannot find module 'next'

Code incorrect :

FROM node:14

COPY package*.json ./
RUN npm install
COPY . .
CMD ["node", "server.js"]

Correction :

Utilisez npm start pour exécuter l'application Next.js.

Erreur 3 : Error: cannot open database connection

Code incorrect :

import { useState, useEffect } from 'react';
import db from './db';

const TaskList = () => {
  const [tasks, setTasks] = useState([]);

  useEffect(() => {
    db.query('SELECT * FROM tasks', (err, results) => {
      if (err) throw err;
      setTasks(results);
    });
  }, []);

  // ...
};

export default TaskList;

Correction :

Assurez-vous que la base de données est correctement configurée et accessible.

Pour aller plus loin

Piste 1 : Utiliser Docker Swarm pour un déploiement multi-nœuds

Piste 2 : Intégrer un service Redis avec Next.js

Piste 3 : Utiliser AWS Elastic Beanstalk pour le déploiement

Défi pratique

Créez une application Next.js simple qui permet de gérer des notes. L'application devrait avoir les fonctionnalités suivantes :

  • Ajouter une note
  • Supprimer une note
  • Mettre à jour une note
  • Afficher toutes les notes

Partagez votre code et faites un suivi de vos étapes dans un fichier README.md.

Besoin d'aide sur Next.js ?

Besoin d'aide sur un projet technique ? Decrivez-le pour des conseils personnalises.

Recevoir des conseils

Questions frequentes

Quelle est l'importance de Docker dans le déploiement de Next.js?
Docker permet d'encapsuler votre application et ses dépendances dans un conteneur standardisé, ce qui assure que la même environnement sera utilisé pour le développement, le test et le déploiement, réduisant les erreurs liées aux différences entre les environnements.
Comment configurer Dockerfile pour une application Next.js?
Pour une application Next.js, votre Dockerfile pourrait ressembler à ceci : FROM node:14 as builder WORKDIR /app COPY package*.json . RUN npm install COPY . . RUN next build CMD ['npm', 'start']
Quelle est la commande pour construire et exécuter l'image Docker?
Pour construire une image Docker, utilisez la commande `docker build -t mon-next-app .`, puis pour l'exécuter utilisez `docker run -p 3000:3000 mon-next-app`.

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.