Docker

1. Introduction : Le lien entre LXC et Docker

1.1. Rappel des principes généraux de la conteneurisation

1.2. LXC vs Docker : différence de philosophie

En somme, Docker ne remplace pas LXC.
Docker s'est appuyé à l'origine sur LXC pour l'isolation de base (les mêmes briques du noyau Linux : namespaces, cgroups), mais propose une couche supplémentaire (Docker Engine, API, CLI, registry, système de build d'images, etc.) pour faciliter la création, le partage et le déploiement d'applications conteneurisées.


2. Qu'est-ce que Docker ?

2.1. Définition

Docker est une plateforme de conteneurisation qui permet de :

2.2. Bénéfices clés


3. Architecture de Docker

3.1. Les composants principaux

3.2. Cycle de vie basique


4. Installation de Docker (sur Linux, Windows, Mac)

4.1. Sur Linux

La méthode d'installation diffère selon la distribution (Debian, Ubuntu, CentOS, etc.). Généralement, on utilise les dépôts officiels Docker :

# Exemple pour Ubuntu
sudo apt-get update
sudo apt-get install \
    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

# Ajouter le dépôt Docker
echo \
  "deb [arch=$(dpkg --print-architecture) 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
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

Ensuite, vérifier avec :

sudo systemctl status docker
docker version
docker info

4.2. Sur Windows / Mac

4.3. Permissions et configuration

sudo usermod -aG docker $USER

5. Premiers pas avec Docker

5.1. Commandes de base

5.2. Exemple rapide

# Récupérer l'image 'hello-world'
docker pull hello-world

# Lancer un conteneur à partir de l'image
docker run hello-world

La commande docker run hello-world :


6. Images Docker et Dockerfile

6.1. Création d'images via un Dockerfile

Le Dockerfile est un fichier texte décrivant la manière de construire votre image. Ex. :

# Choix de l'image de base
FROM ubuntu:20.04

# Variables d'environnement
ENV DEBIAN_FRONTEND=noninteractive

# Installation de paquets
RUN apt-get update && apt-get install -y \
    python3 \
    python3-pip

# Copie du code source
COPY app/ /app/

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

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

# Définition du port d'écoute
EXPOSE 5000

# Commande de lancement par défaut
CMD ["python3", "app.py"]

6.2. Construction de l'image

# Dans le répertoire où se trouve le Dockerfile
docker build -t monimage:1.0 .

6.3. Inspection des images


7. Gestion des conteneurs

7.1. Lancement et gestion du cycle de vie

7.2. Networking de base


8. Volumes Docker

8.1. Pourquoi utiliser des volumes ?

8.2. Création et utilisation

8.3. Types de volumes


9. Docker Compose

9.1. Définition

Docker Compose est un outil qui permet de définir et d'exécuter des applications multi-conteneurs via un fichier docker-compose.yml. Il facilite :

9.2. Exemple de fichier docker-compose.yml

version: '3'
services:
  web:
    build: ./web
    ports:
      - "8080:80"
    depends_on:
      - db
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: mydb
    volumes:
      - db_data:/var/lib/mysql

volumes:
  db_data:

10. Orchestration (Docker Swarm / Kubernetes)

10.1. Pourquoi l'orchestration ?

Quand on doit gérer plusieurs hôtes Docker, potentiellement distribués, il devient nécessaire de :

10.2. Docker Swarm

10.3. Kubernetes


11. Intégration CI/CD

11.1. Pipeline typique

11.2. Avantages


12. Bonnes pratiques et sécurité

12.1. Bonnes pratiques de construction d'images

12.2. Sécurité

12.3. Logging & Monitoring


13. Cas d'usage sur votre infrastructure (Proxmox, Ceph, Hyper-V)

13.1. Docker sur Proxmox

13.2. Docker sur Hyper-V

13.3. Avantages d'une approche conteneurisée


14. Conclusion

Docker et LXC partagent les mêmes fondations (namespaces, cgroups) mais n'adressent pas le même usage. LXC se prête à l'exécution d'environnements "système" complets (un OS en mode conteneur), tandis que Docker est davantage centré sur les applications et les microservices.

Pour vous qui avez déjà découvert LXC, Docker est un complément incontournable pour :

Docker est un standard de facto dans le monde DevOps et le développement d'applications modernes.
Il leur offre une agilité et une portabilité remarquables, que ce soit en environnement de développement, de test ou de production.


Ressources complémentaires

N'hésitez pas à faire réaliser aux stagiaires des TP pratiques pour :


⬆️ Retour en haut de la page