Comment déployer un serveur web avec Docker

DockerBeginner
Pratiquer maintenant

Introduction

Docker est une plateforme de conteneurisation largement adoptée qui simplifie le déploiement et la gestion des applications. Dans ce tutoriel, vous apprendrez à déployer un serveur web à l'aide de Docker, en explorant les avantages de la conteneurisation et en configurant un environnement de développement Docker.

Comprendre Docker

Qu'est-ce que Docker ?

Docker est une plateforme open-source qui permet aux développeurs de créer, déployer et exécuter des applications dans un environnement conteneurisé. Les conteneurs sont des paquets légers, autonomes et exécutables qui incluent tout ce dont une application a besoin pour fonctionner, y compris le code, l'environnement d'exécution, les outils système et les bibliothèques. Docker fournit un moyen cohérent et fiable d'emballer et de distribuer des applications, ce qui facilite le développement, les tests et le déploiement de logiciels.

Avantages de l'utilisation de Docker

  1. Environnements cohérents : Les conteneurs Docker garantissent que les applications fonctionnent de la même manière, quel que soit l'infrastructure sous-jacente, fournissant un environnement de développement et de déploiement cohérent et fiable.
  2. Efficacité accrue : Les conteneurs Docker sont légers et peuvent être démarrés et arrêtés rapidement, permettant une utilisation plus efficace des ressources système par rapport aux machines virtuelles traditionnelles.
  3. Scalabilité améliorée : Docker facilite le dimensionnement des applications vers le haut ou vers le bas, selon les besoins, en créant et en gérant plusieurs conteneurs.
  4. Portabilité améliorée : Les conteneurs Docker peuvent être facilement partagés et déployés sur différentes plateformes et environnements, ce qui facilite le déplacement des applications entre le développement, les tests et la production.

Architecture Docker

L'architecture Docker se compose des composants clés suivants :

  1. Client Docker : L'interface utilisateur qui vous permet d'interagir avec le démon Docker.
  2. Démon Docker : Le processus en arrière-plan qui gère les objets Docker, tels que les images, les conteneurs, les réseaux et les volumes.
  3. Images Docker : Des fichiers immuables qui contiennent le code, l'environnement d'exécution, les outils système, les bibliothèques et les dépendances nécessaires à l'exécution d'une application.
  4. Conteneurs Docker : Des instances exécutables d'images Docker, qui sont isolées et possèdent leur propre système de fichiers, réseau et espace de processus.
  5. Registre Docker : Un référentiel pour stocker et distribuer les images Docker.
graph TD A[Client Docker] --> B[Démon Docker] B --> C[Images Docker] B --> D[Conteneurs Docker] B --> E[Registre Docker]

Démarrer avec Docker

Pour commencer avec Docker, vous devez installer le moteur Docker sur votre système. Le processus d'installation varie en fonction de votre système d'exploitation, mais vous pouvez généralement trouver les instructions sur le site Web officiel de Docker.

Une fois Docker installé, vous pouvez commencer à l'utiliser pour créer et exécuter vos applications. Voici un exemple simple d'exécution d'un serveur web Nginx avec Docker :

## Extraire l'image Nginx du registre Docker
docker pull nginx

## Exécuter le conteneur Nginx
docker run -d -p 80:80 --name my-nginx nginx

Cette commande extrait l'image Nginx du registre Docker, puis exécute un nouveau conteneur basé sur cette image, exposant le port 80 de l'hôte au port 80 dans le conteneur.

Configuration d'un environnement de développement Docker

Installation de Docker

Pour configurer un environnement de développement Docker, vous devez d'abord installer le moteur Docker sur votre système. Voici comment procéder sous Ubuntu 22.04 :

## Mettre à jour l'index des paquets
sudo apt-get update

## Installer les paquets nécessaires pour permettre à apt d'utiliser un dépôt HTTPS
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

## Ajouter la clé GPG officielle de Docker
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

## Configurer le dépôt Docker
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

## Installer le moteur Docker, containerd et Docker Compose
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Configuration de Docker pour le développement

Après l'installation de Docker, vous pouvez le configurer pour votre environnement de développement. Voici quelques configurations courantes :

  1. Montage de volumes : Montez des répertoires de votre système hôte dans le conteneur Docker pour partager des fichiers et des données.
  2. Réseau : Configurez les réseaux Docker pour permettre aux conteneurs de communiquer entre eux et avec le système hôte.
  3. Variables d'environnement : Transmettez des variables d'environnement au conteneur Docker pour configurer l'application.
  4. Arguments de construction : Transmettez des arguments au moment de la construction à la procédure de construction Docker pour personnaliser l'image.

Voici un exemple de fichier Docker Compose qui illustre ces configurations :

version: "3"
services:
  web:
    build:
      context: .
      args:
        - ENV=development
    ports:
      - 8080:80
    volumes:
      - ./app:/var/www/html
    environment:
      - DB_HOST=database
  database:
    image: mysql:5.7
    volumes:
      - db-data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=secret
volumes:
  db-data:

Ce fichier Docker Compose configure un service web et un service de base de données avec les configurations suivantes :

  • Le service web est construit à partir d'un Dockerfile local, avec un argument de construction ENV=development.
  • Le service web monte le répertoire ./app de l'hôte vers le répertoire /var/www/html dans le conteneur, vous permettant de modifier le code de l'application directement sur l'hôte.
  • Le service web et le service de base de données sont connectés via un réseau, et le service web peut accéder à la base de données en utilisant la variable d'environnement DB_HOST.
  • Le service de base de données utilise un volume nommé db-data pour persister les données de la base de données.

Gestion des conteneurs Docker

Une fois votre environnement de développement configuré, vous pouvez utiliser les commandes Docker pour gérer vos conteneurs. Voici quelques commandes courantes :

  • docker run : Démarrer un nouveau conteneur
  • docker stop : Arrêter un conteneur en cours d'exécution
  • docker rm : Supprimer un conteneur
  • docker logs : Afficher les journaux d'un conteneur
  • docker exec : Exécuter une commande à l'intérieur d'un conteneur en cours d'exécution

Par exemple, pour démarrer le service web du fichier Docker Compose ci-dessus, vous pouvez exécuter :

docker-compose up -d web

Cela démarrera le service web en mode détaché, vous permettant de continuer à utiliser le terminal.

Déploiement d'un serveur web avec Docker

Création d'un Dockerfile

Pour déployer un serveur web à l'aide de Docker, vous devez d'abord créer un Dockerfile. Un Dockerfile est un fichier texte contenant les instructions pour construire une image Docker. Voici un exemple de Dockerfile pour un serveur web Nginx simple :

## Utiliser l'image Nginx officielle comme image de base
FROM nginx:latest

## Copier le fichier de configuration Nginx par défaut
COPY default.conf /etc/nginx/conf.d/default.conf

## Copier le code de l'application web dans le conteneur
COPY app/ /usr/share/nginx/html/

## Exposer le port 80 pour le trafic HTTP
EXPOSE 80

## Démarrer le serveur Nginx
CMD ["nginx", "-g", "daemon off;"]

Ce Dockerfile :

  1. Utilise l'image Nginx officielle comme image de base.
  2. Copie le fichier de configuration Nginx par défaut dans le conteneur.
  3. Copie le code de l'application web dans le répertoire racine web du conteneur.
  4. Expose le port 80 pour le trafic HTTP.
  5. Démarre le serveur Nginx.

Construction et exécution de l'image Docker

Une fois que vous avez le Dockerfile, vous pouvez construire l'image Docker à l'aide de la commande docker build :

## Construire l'image Docker
docker build -t my-nginx-server .

Cette commande construit l'image Docker avec l'étiquette my-nginx-server en utilisant le Dockerfile dans le répertoire courant.

Après la construction de l'image, vous pouvez exécuter un conteneur basé sur l'image à l'aide de la commande docker run :

## Exécuter le conteneur Docker
docker run -d -p 80:80 --name my-nginx-server my-nginx-server

Cette commande :

  1. Exécute le conteneur en mode détaché (-d).
  2. Mappe le port 80 de l'hôte au port 80 dans le conteneur (-p 80:80).
  3. Attribue le nom my-nginx-server au conteneur.
  4. Utilise l'image my-nginx-server pour créer le conteneur.

Mise à l'échelle et équilibre de charge

Pour mettre à l'échelle votre serveur web, vous pouvez exécuter plusieurs instances du conteneur Docker et utiliser un équilibreur de charge pour distribuer le trafic entre les instances. Voici un exemple de la façon dont vous pouvez le faire à l'aide de Docker Compose :

version: "3"
services:
  web:
    build: .
    ports:
      - 80:80
    deploy:
      replicas: 3
  load-balancer:
    image: nginx:latest
    ports:
      - 8080:80
    depends_on:
      - web
    configs:
      - source: nginx-config
        target: /etc/nginx/conf.d/default.conf
configs:
  nginx-config:
    file: ./nginx.conf

Ce fichier Docker Compose :

  1. Construit le service web en utilisant le Dockerfile dans le répertoire courant.
  2. Déploie trois répliques du service web.
  3. Exécute un service d'équilibreur de charge Nginx qui écoute sur le port 8080 et redirige le trafic vers les instances du service web.
  4. Monte un fichier de configuration Nginx personnalisé dans le conteneur d'équilibreur de charge.

En utilisant Docker Compose et l'équilibrage de charge, vous pouvez facilement mettre à l'échelle votre serveur web et garantir une haute disponibilité et une tolérance aux pannes.

Résumé

À la fin de ce tutoriel, vous aurez une compréhension solide de Docker et de la manière de l'utiliser pour déployer un serveur web. Vous apprendrez à configurer un environnement de développement Docker, à créer un conteneur Docker pour votre serveur web et à gérer le processus de déploiement. Ces connaissances vous permettront de tirer parti de la puissance de Docker pour vos besoins de développement et de déploiement d'applications web.