0Pricing
Docker & Kubernetes for Developers · Leçon

Conteneuriser une application web

Suivez les étapes de conteneurisation avec Docker d’une application web classique, y compris ses composants front-end, back-end et base de données.

Conteneuriser une application web est une leçon Docker & Kubernetes for Developers gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Docker & Kubernetes for Developers, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Docker & Kubernetes for Developers comprend 4 leçons au total.

Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.

Containerizing Web Apps

Welcome to containerizing a web application! In this lesson, we'll walk through how to package a complete web application, including its frontend, backend, and database, into Docker containers.

This is a crucial step for modern development, enabling consistency across environments and simplifying deployment.

Web App Architecture

A typical web application usually consists of several components working together. For our example, we'll focus on a common three-tier architecture:

  • Frontend: The user interface (e.g., React, Vue, Angular) that runs in the browser.
  • Backend: The server-side logic (e.g., Node.js, Python Flask, Java Spring) that handles business logic and API requests.
  • Database: Stores and manages application data (e.g., PostgreSQL, MySQL, MongoDB).

Backend: Node.js API

First, let's create a Dockerfile for a simple Node.js backend API. This file tells Docker how to build an image for our backend service.

We'll start with a base Node.js image, copy our application code, install dependencies, and define the command to run the server.

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

Frontend: React & Nginx

For our frontend, we'll use a multi-stage Dockerfile. This is a best practice for frontend applications, allowing us to build the app in one stage and then serve the static assets using a lightweight web server like Nginx in a separate, smaller stage.

This results in a much smaller final image.

FROM node:18-alpine as builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

FROM nginx:stable-alpine
COPY --from=builder /app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

Database: PostgreSQL Service

For the database, we don't need to write a Dockerfile. Instead, we can use an official image from Docker Hub, like PostgreSQL.

It's crucial to use a Docker volume to ensure our database data persists even if the container is removed or recreated. We'll define this when we use Docker Compose.

Orchestration with Compose

Now that we have Dockerfiles for our frontend and backend, and know we'll use an official image for our database, we need a way to define and run all these services together.

This is where Docker Compose comes in. It uses a YAML file (docker-compose.yml) to configure all our services, networks, and volumes.

version: '3.8'
services:
  # Define your application services here

volumes:
  # Define named volumes for data persistence

networks:
  # Define custom networks for inter-service communication

Compose: Backend Service

Let's add our backend service to the docker-compose.yml file. We'll specify its build context (where its Dockerfile is), map ports, define environment variables for database connection, and set up a dependency on the database.

version: '3.8'
services:
  backend:
    build: ./backend # Path to backend Dockerfile
    ports:
      - "3000:3000"
    environment:
      DATABASE_URL: postgres://user:password@db:5432/mydb
    depends_on:
      - db # Ensure db starts before backend
    networks:
      - app-network

networks:
  app-network:
    driver: bridge # Custom network for app services

Compose: Frontend Service

Next, we add the frontend service definition. This service will also be built from its Dockerfile, expose port 80, and depend on the backend service to ensure it's available for API calls.

version: '3.8'
services:
  # ... backend service definition ...
  frontend:
    build: ./frontend # Path to frontend Dockerfile
    ports:
      - "80:80"
    depends_on:
      - backend # Frontend needs backend to be ready
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

Compose: Database Service

Finally, we define the database service. We'll use the official postgres image, set crucial environment variables for database setup, and most importantly, attach a named volume for data persistence.

version: '3.8'
services:
  # ... backend and frontend definitions ...
  db:
    image: postgres:13-alpine # Use an official PostgreSQL image
    environment:
      POSTGRES_DB: mydb
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    volumes:
      - db_data:/var/lib/postgresql/data # Mount named volume
    networks:
      - app-network

volumes:
  db_data: # Define the named volume
networks:
  app-network:
    driver: bridge

Launching the App Stack

With our docker-compose.yml file complete, launching the entire application stack is incredibly simple. Navigate to the directory containing your docker-compose.yml file and run a single command:

  • docker compose up -d: Builds images (if needed), creates containers, networks, and volumes, and starts all services in detached mode (-d).
  • docker compose down: Stops and removes all services, networks, and volumes defined in the file.
docker compose up -d

Compose Configuration Check

Consider the following docker-compose.yml snippet for a simple web application:

version: '3.8'
services:
  web:
    build: .
    ports:
      - "8000:8000"
    depends_on:
      - db
  db:
    image: postgres:latest
    environment:
      POSTGRES_DB: appdb
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
    volumes:
      - db_data:/var/lib/postgresql/data
volumes:
  db_data:

Which of the following statements about this configuration are TRUE?

Lesson Summary

In this lesson, we learned how to containerize a full web application stack using Docker. We covered creating Dockerfiles for frontend and backend services, using official images for databases, and orchestrating everything with Docker Compose. This approach simplifies development, deployment, and scaling of complex applications.

  • Defined Dockerfiles for a multi-stage frontend and a backend service.
  • Integrated a database using an official Docker image and a named volume.
  • Orchestrated all services using a docker-compose.yml file.
  • Learned to launch the entire application stack with a single command.

Questions Fréquemment Posées

La leçon « Conteneuriser une application web » est-elle gratuite ?

Oui — le texte complet de « Conteneuriser une application web » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Docker & Kubernetes for Developers, passe à CoddyKit PRO. Le cours Docker & Kubernetes for Developers comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Conteneuriser une application web » ?

Suivez les étapes de conteneurisation avec Docker d’une application web classique, y compris ses composants front-end, back-end et base de données. Tu pratiques Docker & Kubernetes for Developers avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Docker & Kubernetes for Developers ?

Aucune expérience préalable n'est requise. Docker & Kubernetes for Developers sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Conteneuriser une application web » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Docker & Kubernetes for Developers ?

Oui. Chaque leçon Docker & Kubernetes for Developers inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Conteneuriser une application web
  2. Optimiser les images Docker
  3. Sécurité et bonnes pratiques de production
  4. Compilations en plusieurs étapes pour des images de production légères
← Retour à Docker & Kubernetes for Developers