Formation Docker Rapide - De Débutant à Avancé

1. Introduction à Docker

Docker est une plateforme de conteneurisation qui permet de développer, déployer et exécuter des applications dans des environnements isolés appelés conteneurs. Cette technologie facilite la gestion des dépendances et assure la cohérence entre les environnements de développement et de production.
# Aucun code pour cette étape

Pratique :

Familiarisez-vous avec les concepts de base de Docker et son importance dans le développement et le déploiement d'applications modernes.

2. Installation de Docker

L'installation de Docker varie selon votre système d'exploitation. Voici les instructions pour les principaux systèmes :
  • Sous Linux: ``bash sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io ``
  • Sous macOS: Téléchargez Docker Desktop pour Mac depuis le site officiel de Docker et suivez les instructions d'installation.
  • Sous Windows: Téléchargez Docker Desktop pour Windows depuis le site officiel de Docker et suivez les instructions d'installation.
# Vérifiez l'installation avec:
docker --version

Pratique :

Installez Docker sur votre système en suivant les instructions correspondant à votre OS. Vérifiez ensuite que l'installation a réussi en exécutant 'docker --version' dans votre terminal.

3. Concepts de base de Docker

Avant de commencer à utiliser Docker, il est crucial de comprendre ses concepts fondamentaux. Voici les principaux éléments de Docker :
  • Image: Un modèle en lecture seule contenant un ensemble d'instructions pour créer un conteneur Docker.
      Contient le code de l'application, les runtimes, les dépendances, et autres objets de fichiers nécessaires pour exécuter l'application.Peut être créée à partir d'un Dockerfile ou téléchargée depuis un registre Docker.
  • Conteneur: Une instance exécutable d'une image.
      Encapsule l'application et son environnement.Peut être démarré, arrêté, déplacé ou supprimé.Isolé des autres conteneurs et du système hôte.
  • Dockerfile: Un fichier texte contenant une liste d'instructions pour construire une image Docker.
      Définit l'environnement à l'intérieur du conteneur.Spécifie les commandes à exécuter, les fichiers à ajouter, et les ports à exposer.
  • Volume: Un mécanisme pour persister les données générées et utilisées par les conteneurs Docker.
      Permet le partage de données entre conteneurs.Persiste les données même après la suppression du conteneur.
# Télécharger une image
docker pull nginx

# Lancer un conteneur
docker run -d -p 80:80 nginx

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

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

Pratique :

Pour chaque concept (image, conteneur, Dockerfile, volume), essayez d'expliquer son rôle dans vos propres mots. Ensuite, utilisez la commande 'docker pull' pour télécharger une image, comme nginx, et lancez un conteneur basé sur cette image.

4. Création et gestion de conteneurs

Apprendre à créer et gérer des conteneurs est fondamental pour travailler avec Docker.
# Lancer un conteneur en mode détaché
docker run -d --name mon-nginx -p 8080:80 nginx

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

# Arrêter un conteneur
docker stop mon-nginx

# Supprimer un conteneur
docker rm mon-nginx

Pratique :

Lancez un conteneur nginx, vérifiez qu'il est en cours d'exécution, puis arrêtez-le et supprimez-le. Utilisez les commandes docker ps, docker stop, et docker rm.

5. Construction d'images personnalisées

La création d'images Docker personnalisées vous permet d'empaqueter vos applications avec leurs dépendances.
# Exemple de Dockerfile
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]

# Construire l'image
docker build -t mon-app:v1 .

Pratique :

Créez un simple Dockerfile pour une application Node.js, construisez l'image, puis lancez un conteneur basé sur cette image.

6. Gestion des volumes

Les volumes Docker permettent de persister et partager des données entre conteneurs.
# Créer un volume
docker volume create mon-volume

# Lancer un conteneur avec un volume monté
docker run -d --name mon-app -v mon-volume:/app/data mon-app:v1

Pratique :

Créez un volume Docker, puis lancez un conteneur en montant ce volume. Ajoutez des données dans le volume et vérifiez qu'elles persistent après le redémarrage du conteneur.

7. Réseaux Docker

Les réseaux Docker permettent aux conteneurs de communiquer entre eux et avec le monde extérieur.
# Créer un réseau
docker network create mon-reseau

# Lancer des conteneurs sur le réseau
docker run -d --name app1 --network mon-reseau mon-app:v1
docker run -d --name app2 --network mon-reseau mon-app:v1

Pratique :

Créez un réseau Docker, lancez deux conteneurs sur ce réseau, puis vérifiez qu'ils peuvent communiquer entre eux en utilisant leurs noms comme noms d'hôte.

8. Docker Compose

Docker Compose est un outil pour définir et gérer des applications multi-conteneurs.
# Exemple de docker-compose.yml
version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"

# Lancer l'application
docker-compose up -d

Pratique :

Créez un fichier docker-compose.yml pour une application web simple avec une base de données. Utilisez docker-compose pour lancer l'application et vérifiez que les services communiquent correctement.

9. Optimisation des images Docker

Optimiser vos images Docker peut améliorer les performances et réduire la taille des images.
# Exemple de Dockerfile multi-stage
FROM node:14 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html

Pratique :

Créez un Dockerfile multi-stage pour une application frontend, construisez l'image, et comparez sa taille avec une version non optimisée.

10. Déploiement avec Docker Swarm

Docker Swarm est un outil d'orchestration natif de Docker pour gérer un cluster de nœuds Docker.
# Initialiser un swarm
docker swarm init

# Déployer un service
docker service create --replicas 3 --name mon-service mon-app:v1

Pratique :

Initialisez un swarm Docker sur votre machine locale, déployez un service avec plusieurs réplicas, puis vérifiez l'état du service et des réplicas.

11. Sécurité Docker

La sécurité est cruciale lors de l'utilisation de Docker en production.
# Analyser une image pour les vulnérabilités
docker scan mon-app:v1

# Utiliser des secrets Docker
echo "mon_secret" | docker secret create app_secret -
docker service create --name mon-service --secret app_secret mon-app:v1

Pratique :

Effectuez une analyse de sécurité sur une de vos images Docker. Créez et utilisez un secret Docker dans un service.

12. Surveillance et logging

La surveillance et la gestion des logs sont essentielles pour maintenir des applications Docker en production.
# Voir les logs d'un conteneur
docker logs mon-conteneur

# Voir les statistiques d'utilisation des ressources
docker stats

Pratique :

Lancez un conteneur qui génère des logs, puis utilisez les commandes Docker pour visualiser ces logs et les statistiques d'utilisation des ressources du conteneur.

13. Cas pratique : Déploiement d'une application web complète

Dans ce cas pratique, vous allez déployer une application web complète avec Docker, comprenant un frontend, un backend, et une base de données.
# Structure du projet
./
├── frontend/
│   ├── Dockerfile
│   └── ...
├── backend/
│   ├── Dockerfile
│   └── ...
├── docker-compose.yml

# Contenu du docker-compose.yml
version: '3'
services:
  frontend:
    build: ./frontend
    ports:
      - "80:80"
    depends_on:
      - backend
  backend:
    build: ./backend
    environment:
      - DB_HOST=db
    depends_on:
      - db
  db:
    image: postgres:13
    volumes:
      - db-data:/var/lib/postgresql/data

volumes:
  db-data:

# Déployer l'application
docker-compose up -d

# Vérifier le statut
docker-compose ps

# Voir les logs
docker-compose logs

# Mettre à jour un service
docker-compose up -d --no-deps --build backend

# Arrêter l'application
docker-compose down

Pratique :

Suivez les étapes du code exemple pour déployer une application web complète avec Docker Compose. Créez les Dockerfiles nécessaires pour le frontend et le backend, puis utilisez le fichier docker-compose.yml fourni pour orchestrer le déploiement. Testez l'application, vérifiez les logs, et essayez de mettre à jour l'un des services. Réfléchissez à la façon dont Docker facilite le déploiement et la gestion d'une application multi-services.