Création de conteneurs Docker à l'aide d'un Dockerfile personnalisé

DockerBeginner
Pratiquer maintenant

Introduction

Ce tutoriel vous guidera dans la création d'une image Docker personnalisée à l'aide d'un Dockerfile, le déploiement et la gestion d'applications Docker. Vous apprendrez la commande pour construire une image Docker à partir d'un Dockerfile personnalisé, ce qui vous permettra d'optimiser votre flux de travail de conteneurisation et de déployer des applications plus efficacement.

Introduction aux conteneurs Docker

Docker est une plateforme open-source populaire qui permet aux développeurs de construire, déployer et exécuter des applications dans un environnement conteneurisé. Les conteneurs sont des paquets logiciels 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.

Qu'est-ce que Docker ?

Docker est un outil conçu pour simplifier la création, le déploiement et l'exécution d'applications à l'aide de conteneurs. Les conteneurs permettent à un développeur d'emballer une application avec toutes les parties nécessaires, telles que les bibliothèques et autres dépendances, et de les distribuer en un seul paquet.

Avantages des conteneurs Docker

  1. Portabilité : Les conteneurs Docker peuvent fonctionner de manière cohérente sur n'importe quel environnement, d'un ordinateur local du développeur aux serveurs de production, garantissant que l'application se comportera de la même manière quel que soit l'infrastructure sous-jacente.
  2. Scalabilité : Docker facilite le dimensionnement des applications vers le haut ou vers le bas selon les besoins, en ajoutant ou en supprimant des conteneurs.
  3. Efficacité : Les conteneurs Docker sont légers et partagent le noyau du système d'exploitation hôte, ce qui les rend plus efficaces que les machines virtuelles traditionnelles.
  4. Cohérence : Docker garantit que l'application fonctionnera de la même manière, du développement à la production, éliminant ainsi le problème « ça marche sur ma machine ».

Architecture Docker

Docker utilise une architecture client-serveur, où le client Docker communique avec le démon Docker, responsable de la construction, de l'exécution et de la distribution des conteneurs Docker.

graph LD
    subgraph Architecture Docker
        client[Client Docker]
        daemon[Démon Docker]
        client -- API --> daemon
        daemon -- Images --> registry[Registry Docker]
    end

Conteneurs Docker vs. Machines virtuelles

Bien que les conteneurs et les machines virtuelles (VM) servent tous deux à exécuter des applications dans des environnements isolés, il existe des différences clés :

Caractéristique Conteneurs Docker Machines virtuelles
Isolation Les conteneurs partagent le noyau du système d'exploitation hôte, offrant une isolation plus légère. Les machines virtuelles ont leur propre système d'exploitation complet, offrant une isolation plus forte.
Utilisation des ressources Les conteneurs sont plus efficaces, car ils partagent les ressources de l'hôte et n'ont pas besoin d'exécuter un système d'exploitation complet. Les machines virtuelles nécessitent plus de ressources, car chaque machine virtuelle possède son propre système d'exploitation.
Temps de démarrage Les conteneurs peuvent démarrer en quelques secondes, car ils n'ont pas besoin de démarrer un système d'exploitation complet. Les machines virtuelles peuvent prendre plusieurs minutes à démarrer, car elles doivent démarrer l'intégralité du système d'exploitation.

Démarrer avec Docker

Pour commencer avec Docker, vous devez installer le moteur Docker sur votre système. Vous pouvez télécharger et installer Docker sur le site Web officiel Docker (https://www.docker.com/get-started). Une fois installé, vous pouvez commencer à utiliser Docker pour construire, déployer et exécuter vos applications.

Création d'une image Docker personnalisée

La création d'une image Docker personnalisée consiste à construire une nouvelle image à partir d'une image de base existante, puis à ajouter vos propres personnalisations, telles que le code de l'application, les dépendances et les configurations.

Dockerfile

Un Dockerfile est un fichier texte contenant toutes les instructions nécessaires à la construction d'une image Docker. Il spécifie l'image de base, les étapes à exécuter pendant le processus de construction et la configuration finale de l'image.

Voici un exemple de Dockerfile :

## Utilisation de l'image de base Ubuntu 22.04 officielle
FROM ubuntu:22.04

## Mise à jour de l'index des paquets et installation des paquets nécessaires
RUN apt-get update && apt-get install -y \
  git \
  python3 \
  python3-pip \
  && rm -rf /var/lib/apt/lists/*

## Définition du répertoire de travail
WORKDIR /app

## Copie du code de l'application
COPY . /app

## Installation des dépendances Python
RUN pip3 install --no-cache-dir -r requirements.txt

## Exposition du port sur lequel l'application fonctionnera
EXPOSE 8080

## Définition de la commande pour exécuter l'application
CMD ["python3", "app.py"]

Construction d'une image personnalisée

Pour construire une image Docker personnalisée à l'aide du Dockerfile, suivez ces étapes :

  1. Créez un Dockerfile dans le répertoire de votre projet.

  2. Ouvrez un terminal et accédez au répertoire du projet.

  3. Exécutez la commande suivante pour construire l'image :

    docker build -t my-custom-image .
    

    Cette commande construira une nouvelle image Docker nommée "my-custom-image" en utilisant les instructions du Dockerfile.

Publication de l'image dans un registre

Une fois que vous avez construit votre image Docker personnalisée, vous pouvez la publier dans un registre Docker, tel que Docker Hub ou un registre privé, afin qu'elle puisse être partagée et déployée sur d'autres systèmes.

  1. Connectez-vous au registre Docker :

    docker login
    
  2. Marquez l'image avec l'URL du registre et votre nom d'utilisateur :

    docker tag my-custom-image username/my-custom-image:latest
    
  3. Publiez l'image dans le registre :

    docker push username/my-custom-image:latest
    

Votre image Docker personnalisée est maintenant disponible dans le registre et peut être extraite et utilisée par d'autres développeurs ou déployée en environnement de production.

Déploiement et gestion des applications Docker

Une fois que vous avez créé votre image Docker personnalisée, vous pouvez déployer et gérer vos applications basées sur Docker. Cette section couvrira les concepts et les étapes clés impliqués dans le déploiement et la gestion des applications Docker.

Déploiement des conteneurs Docker

Pour déployer un conteneur Docker, vous pouvez utiliser la commande docker run. Cette commande démarre un nouveau conteneur basé sur une image spécifiée et vous permet de configurer diverses options, telles que le mappage de ports, les variables d'environnement et les montages de volumes.

Voici un exemple d'exécution d'un conteneur basé sur l'image "my-custom-image" :

docker run -d -p 8080:8080 -e DB_HOST=192.168.1.100 -v /data:/app/data my-custom-image

Cette commande :

  • Exécute le conteneur en mode détaché (-d)
  • Mappe le port 8080 du conteneur au port 8080 de l'hôte (-p 8080:8080)
  • Définit une variable d'environnement DB_HOST avec la valeur 192.168.1.100 (-e DB_HOST=192.168.1.100)
  • Monte un répertoire hôte /data vers le répertoire /app/data du conteneur (-v /data:/app/data)
  • Utilise l'image "my-custom-image" pour démarrer le conteneur.

Gestion des conteneurs Docker

Docker fournit plusieurs commandes pour gérer les conteneurs en cours d'exécution :

  • docker ps : Liste tous les conteneurs en cours d'exécution
  • docker stop <container_id> : Arrête un conteneur en cours d'exécution
  • docker start <container_id> : Démarre un conteneur arrêté
  • docker logs <container_id> : Affiche les journaux d'un conteneur
  • docker exec -it <container_id> /bin/bash : Accède au shell d'un conteneur en cours d'exécution

Docker Compose

Docker Compose est un outil qui vous permet de définir et de gérer des applications Docker multi-conteneurs. Il utilise un fichier YAML pour configurer les services, les réseaux et les volumes de votre application.

Voici un exemple de fichier docker-compose.yml :

version: "3"
services:
  web:
    build: .
    ports:
      - "8080:8080"
    environment:
      - DB_HOST=database
    depends_on:
      - database
  database:
    image: mysql:5.7
    environment:
      - MYSQL_DATABASE=myapp
      - MYSQL_ROOT_PASSWORD=secret
    volumes:
      - db-data:/var/lib/mysql

volumes:
  db-data:

Ce fichier Compose définit deux services : un service web et un service de base de données. Le service web est construit à partir du répertoire courant, tandis que le service de base de données utilise l'image MySQL 5.7 officielle. Les services sont connectés via un réseau, et les données du service de base de données sont persistées dans un volume nommé.

Pour déployer cette application, vous pouvez exécuter docker-compose up -d dans le même répertoire que le fichier docker-compose.yml.

Mise à l'échelle des applications Docker

Docker facilite la mise à l'échelle de vos applications en ajoutant ou en supprimant des conteneurs. Vous pouvez utiliser Docker Compose pour mettre à l'échelle vos services :

docker-compose up -d --scale web=3

Cette commande démarrera trois instances du service "web".

Surveillance et journalisation

Docker fournit des outils intégrés pour la surveillance et la journalisation de vos conteneurs. Vous pouvez utiliser la commande docker stats pour afficher l'utilisation des ressources en temps réel et la commande docker logs pour accéder aux journaux d'un conteneur.

De plus, vous pouvez intégrer vos applications Docker à des outils de surveillance et de journalisation externes, tels que Prometheus, Grafana et Elasticsearch, pour obtenir des informations et des capacités plus avancées.

Résumé

Dans ce tutoriel, vous avez appris à créer une image Docker personnalisée à l'aide d'un Dockerfile, à déployer et à gérer des applications Docker. Vous connaissez maintenant la commande pour construire une image Docker à partir d'un Dockerfile personnalisé, ce qui vous permet d'optimiser votre processus de conteneurisation et de déployer des applications plus efficacement.