0%
Les Fondamentaux de Docker: Guide Complet pour les Développeurs

Les Fondamentaux de Docker: Guide Complet pour les Développeurs

Découvrez les concepts essentiels de Docker, comment créer et gérer des conteneurs, et les meilleures pratiques pour l'intégration continue et le déploiement.

I

InSkillCoach

· min

Les Fondamentaux de Docker: Guide Complet pour les Développeurs

Docker a révolutionné la façon dont nous développons, déployons et exécutons des applications. Ce guide vous présente les concepts fondamentaux de Docker et comment l’utiliser efficacement dans votre workflow de développement.

Qu’est-ce que Docker?

Docker est une plateforme de conteneurisation qui permet d’empaqueter une application et ses dépendances dans un “conteneur” isolé, qui pourra être exécuté sur n’importe quel serveur. Contrairement aux machines virtuelles, les conteneurs ne nécessitent pas d’hyperviseur et s’exécutent directement sur le noyau de la machine hôte.

Avantages de Docker

  • Cohérence d’environnement: “Ça marche sur ma machine” devient “Ça marche partout”
  • Isolation: Les applications s’exécutent de manière isolée sans interférer entre elles
  • Efficacité des ressources: Plus léger que les VM traditionnelles
  • Déploiement rapide: Démarrage rapide des conteneurs
  • Mise à l’échelle facile: Réplication simple des conteneurs

Architecture de Docker

L’architecture Docker comprend plusieurs composants clés:

  • Docker Daemon (dockerd): Le service qui gère les conteneurs
  • Docker Client: L’interface en ligne de commande
  • Docker Registry: Le dépôt où sont stockées les images (par exemple, Docker Hub)
  • Docker Images: Templates en lecture seule utilisés pour créer des conteneurs
  • Docker Containers: Instances en cours d’exécution des images

Installation de Docker

Windows

# Installer Docker Desktop pour Windows
# Télécharger depuis https://www.docker.com/products/docker-desktop
# Suivre les instructions d'installation

Linux (Ubuntu)

# Mettre à jour la liste des packages
sudo apt-get update

# Installer les prérequis
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release

# Ajouter la clé GPG officielle Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# Configurer le repository stable
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Installer Docker Engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

# Ajouter votre utilisateur au groupe docker
sudo usermod -aG docker $USER

macOS

# Installer Docker Desktop pour Mac
# Télécharger depuis https://www.docker.com/products/docker-desktop
# Suivre les instructions d'installation

Commandes Docker Essentielles

Gestion des Images

# Télécharger une image
docker pull ubuntu:latest

# Lister les images
docker images

# Construire une image à partir d'un Dockerfile
docker build -t mon-app:1.0 .

# Supprimer une image
docker rmi ubuntu:latest

Gestion des Conteneurs

# Créer et démarrer un conteneur
docker run -d -p 8080:80 --name mon-conteneur nginx

# Lister les conteneurs en cours d'exécution
docker ps

# Lister tous les conteneurs (y compris ceux arrêtés)
docker ps -a

# Arrêter un conteneur
docker stop mon-conteneur

# Démarrer un conteneur existant
docker start mon-conteneur

# Supprimer un conteneur
docker rm mon-conteneur

Interaction avec les Conteneurs

# Exécuter une commande dans un conteneur en cours d'exécution
docker exec -it mon-conteneur bash

# Afficher les logs d'un conteneur
docker logs mon-conteneur

# Copier des fichiers vers/depuis un conteneur
docker cp mon-fichier.txt mon-conteneur:/chemin/destination
docker cp mon-conteneur:/chemin/source/fichier.txt .

Création de Dockerfile

Un Dockerfile est un fichier texte qui contient toutes les commandes pour assembler une image Docker.

# Utiliser une image de base
FROM node:14-alpine

# Définir le répertoire de travail
WORKDIR /app

# Copier les fichiers de dépendances
COPY package*.json ./

# Installer les dépendances
RUN npm install

# Copier le reste des fichiers
COPY . .

# Exposer un port
EXPOSE 3000

# Définir la commande à exécuter lors du démarrage du conteneur
CMD ["npm", "start"]

Meilleures Pratiques pour les Dockerfiles

  1. Utiliser des images de base légères comme Alpine Linux
  2. Combiner les commandes RUN pour réduire le nombre de couches
  3. Nettoyer les caches après installation des packages
  4. Utiliser .dockerignore pour exclure les fichiers inutiles
  5. Spécifier des versions précises pour les dépendances
  6. Utiliser des utilisateurs non-root pour exécuter l’application

Docker Compose

Docker Compose est un outil pour définir et exécuter des applications multi-conteneurs.

Exemple de docker-compose.yml

version: '3'
services:
  web:
    build: .
    ports:
      - "8000:8000"
    volumes:
      - ./app:/app
    depends_on:
      - db
    environment:
      - DATABASE_URL=postgres://postgres:password@db:5432/app

  db:
    image: postgres:13
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=password
      - POSTGRES_USER=postgres
      - POSTGRES_DB=app

volumes:
  postgres_data:

Commandes Docker Compose

# Démarrer tous les services définis dans docker-compose.yml
docker-compose up -d

# Arrêter tous les services
docker-compose down

# Voir les logs de tous les services
docker-compose logs

# Reconstruire les images et démarrer
docker-compose up -d --build

Réseaux Docker

Docker crée par défaut plusieurs réseaux:

  • bridge: Réseau par défaut pour les conteneurs
  • host: Supprime l’isolation réseau entre le conteneur et l’hôte
  • none: Désactive le réseau

Création et Gestion des Réseaux

# Créer un réseau
docker network create mon-reseau

# Lister les réseaux
docker network ls

# Connecter un conteneur à un réseau
docker network connect mon-reseau mon-conteneur

# Inspecter un réseau
docker network inspect mon-reseau

Volumes Docker

Les volumes permettent de persister les données en dehors des conteneurs.

Types de Volumes

  1. Volume nommé: Géré par Docker
  2. Volume lié: Lié à un chemin spécifique sur l’hôte
  3. Volume tmpfs: Stocké en mémoire (non persistant)

Commandes de Gestion des Volumes

# Créer un volume nommé
docker volume create mon-volume

# Lister les volumes
docker volume ls

# Utiliser un volume lors du démarrage d'un conteneur
docker run -d -v mon-volume:/data --name mon-conteneur ubuntu

# Associer un répertoire hôte à un conteneur
docker run -d -v /chemin/hote:/data --name mon-conteneur ubuntu

# Supprimer un volume
docker volume rm mon-volume

Docker Registry

Un registry est un service de stockage et de distribution d’images Docker.

Interaction avec Docker Hub

# Se connecter à Docker Hub
docker login

# Tagger une image
docker tag mon-app:1.0 utilisateur/mon-app:1.0

# Pousser une image vers Docker Hub
docker push utilisateur/mon-app:1.0

# Récupérer une image depuis Docker Hub
docker pull utilisateur/mon-app:1.0

Déployer un Registry Privé

# Démarrer un registry local
docker run -d -p 5000:5000 --name registry registry:2

# Tagger une image pour le registry local
docker tag mon-app:1.0 localhost:5000/mon-app:1.0

# Pousser vers le registry local
docker push localhost:5000/mon-app:1.0

Sécurité Docker

Bonnes Pratiques

  1. Maintenir Docker à jour pour bénéficier des correctifs de sécurité
  2. Scanner les images pour détecter les vulnérabilités (avec Docker Scout ou Trivy)
  3. Limiter les capacités des conteneurs
  4. Utiliser des utilisateurs non-root dans les conteneurs
  5. Signer les images avec Docker Content Trust
  6. Restreindre les ressources (CPU, mémoire) des conteneurs

Configuration Sécurisée

# Exécuter un conteneur avec des restrictions de ressources
docker run -d --name mon-conteneur --memory="512m" --cpus="0.5" nginx

# Exécuter un conteneur avec un utilisateur spécifique
docker run -d --user 1000:1000 --name mon-conteneur nginx

# Exécuter un conteneur en mode lecture seule
docker run -d --read-only --name mon-conteneur nginx

Cas d’Utilisation Courants

Applications Web

# Exécuter une application web Node.js
docker run -d -p 3000:3000 --name node-app node-app:1.0

# Exécuter un serveur Nginx comme proxy inverse
docker run -d -p 80:80 --name nginx -v ./nginx.conf:/etc/nginx/nginx.conf nginx

Bases de Données

# Démarrer une base de données MySQL
docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=password -v mysql_data:/var/lib/mysql mysql:8.0

# Démarrer une base de données PostgreSQL
docker run -d --name postgres -e POSTGRES_PASSWORD=password -v postgres_data:/var/lib/postgresql/data postgres:13

CI/CD

# Exécuter des tests dans un conteneur
docker run --rm -v $(pwd):/app -w /app node:14 npm test

# Construire une application dans un conteneur
docker run --rm -v $(pwd):/app -w /app maven:3.8-openjdk-11 mvn package

Intégration avec Kubernetes

Docker fonctionne très bien avec Kubernetes, orchestrateur de conteneurs:

  1. Créer des images Docker pour votre application
  2. Pousser les images vers un registry accessible
  3. Définir des manifestes Kubernetes pour déployer les conteneurs
  4. Utiliser kubectl pour gérer les déploiements

Conclusion

Docker a transformé le développement logiciel en rendant les applications plus portables, plus faciles à déployer et à mettre à l’échelle. Maîtriser Docker est devenu une compétence essentielle pour les développeurs et les professionnels DevOps.

En suivant ce guide, vous avez acquis les connaissances fondamentales pour:

  • Comprendre les concepts clés de Docker
  • Créer et gérer des conteneurs
  • Travailler avec des images et des volumes
  • Utiliser Docker Compose pour des applications multi-conteneurs
  • Suivre les meilleures pratiques de sécurité

Pour aller plus loin, explorez l’orchestration de conteneurs avec Kubernetes, les pipelines CI/CD basés sur Docker, et l’architecture microservices.

InSkillCoach

À propos de InSkillCoach

Expert en formation et technologies

Coach spécialisé dans les technologies avancées et l'IA, porté par GNeurone Inc.

Certifications:

  • AWS Certified Solutions Architect – Professional
  • Certifications Google Cloud
  • Microsoft Certified: DevOps Engineer Expert
  • Certified Kubernetes Administrator (CKA)
  • CompTIA Security+
1.3k
159

Commentaires

Les commentaires sont alimentés par GitHub Discussions

Connectez-vous avec GitHub pour participer à la discussion

Lien copié !