RousselTMLEARNING

Article · Docker : de la découverte à l'expertise

Vue d'ensemble de la formation

1. Conteneurs et machines virtuelles #

Isoler sans virtualiser un système entier.

Le principe #

Un conteneur est un processus isolé grâce aux namespaces (vue propre des processus, du réseau, des fichiers) et limité par les cgroups (CPU, mémoire). Il démarre en quelques secondes, pèse quelques dizaines de Mo et garantit que « ça marche chez moi » signifie « ça marche partout ».

Conteneurs et machines virtuelles
Les conteneurs partagent le noyau de l'hôte.
CritèreMachine virtuelleConteneur
DémarrageMinutesSecondes
TailleGoMo
IsolationForte (hyperviseur)Processus (noyau partagé)
DensitéDizaines par hôteCentaines par hôte

2. L'architecture de Docker #

Images, conteneurs, registres.

Les briques #

Architecture de Docker
Le CLI parle au daemon par une API REST (socket Unix).
  • Image : modèle en lecture seule, construit en couches empilées.
  • Conteneur : instance en cours d'exécution d'une image (avec une couche en écriture).
  • Registry : dépôt d'images (Docker Hub, GHCR, registre privé).
  • Volume : stockage persistant hors du cycle de vie du conteneur.
docker version && docker info | head -20
docker run hello-world                              # télécharge et exécute une image de test
docker images && docker ps -a

3. Les commandes essentielles #

Cycle de vie d'un conteneur.

Lancer et gérer #

Exécution d'un conteneur nginx
Le port 8080 de l'hôte est redirigé vers le port 80 du conteneur.
docker run -d --name web -p 8080:80 -e TZ=Europe/Paris --restart unless-stopped nginx:1.27
docker run -it --rm alpine sh                          # shell jetable
docker ps / docker ps -a                               # conteneurs en cours / tous
docker logs -f --tail 50 web
docker exec -it web sh
docker stop web && docker start web && docker restart web
docker rm -f web                                       # supprimer un conteneur
docker stats --no-stream                               # consommation CPU/mémoire
docker inspect web | jq '.[0].NetworkSettings.IPAddress'
docker cp web:/etc/nginx/nginx.conf ./nginx.conf

docker pull nginx:1.27 && docker images
docker image prune -a && docker system prune --volumes   # nettoyer (attention !)
docker system df                                         # espace utilisé

4. Construire ses images et orchestrer en local #

Dockerfile, volumes, réseaux, Compose.

Dockerfile #

# Dockerfile (application Python)
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
USER 10001
EXPOSE 8000
HEALTHCHECK CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"
CMD ["gunicorn", "-b", "0.0.0.0:8000", "app:app"]
docker build -t mon-app:1.0 .
docker run -d -p 8000:8000 mon-app:1.0
docker tag mon-app:1.0 registre.exemple.fr/equipe/mon-app:1.0 && docker push registre.exemple.fr/equipe/mon-app:1.0
docker history mon-app:1.0                        # couches et tailles
Bonne Pratique : Ordonnez les instructions du moins changeant au plus changeant (dépendances avant le code) pour profiter du cache de couches ; utilisez des builds multi-étapes pour des images finales minuscules.

Volumes, réseaux et Compose #

docker volume create pgdata
docker network create backend
docker run -d --name db --network backend -v pgdata:/var/lib/postgresql/data -e POSTGRES_PASSWORD=secret postgres:16
docker run -d --name api --network backend -p 8000:8000 -e DB_HOST=db mon-app:1.0     # "db" résolu par DNS
# compose.yaml
services:
  api:
    build: .
    ports: ["8000:8000"]
    environment: { DB_HOST: db }
    depends_on: { db: { condition: service_healthy } }
  db:
    image: postgres:16
    environment: { POSTGRES_PASSWORD: secret }
    volumes: [pgdata:/var/lib/postgresql/data]
    healthcheck: { test: ["CMD-SHELL", "pg_isready -U postgres"], interval: 5s, retries: 10 }
volumes: { pgdata: {} }
docker compose up -d --build
docker compose ps && docker compose logs -f api
docker compose down -v

📄 Docker : vue d'ensemble, architecture et premiers pas →

Mon suivi

  • ⏱ Durée estimée : ≈ 10 min

Connectez-vous pour suivre votre progression et prendre des notes. Se connecter

✉️ Poser une question

Glossaire de la formation

Micro-services

Architecture où une application est divisée en plusieurs petits services indépendants, souvent déployés dans le Cloud.

Docker

Outil permettant de virtualiser et packager des applications à l'intérieur de conteneurs légers pour un déploiement optimal.Exemple de déploiement d'u...

Prometheus

Système open source de surveillance et d'alerte, particulièrement adapté pour la collecte de métriques dans des environnements dynamiques (comme Kuber...

Kubernetes

Plateforme open source d'orchestration de conteneurs permettant d'automatiser le déploiement, la mise à l'échelle et la gestion des applications conte...

CI/CD

Intégration Continue et Déploiement Continu. Pratiques DevOps visant à automatiser les tests et le déploiement des applications pour livrer plus rapid...

Terraform

Outil d'Infrastructure as Code (IaC) permettant de définir et de provisionner des ressources d'infrastructure cloud et on-premise via des fichiers de ...

Métriques

Mesures numériques collectées à intervalles réguliers (ex: CPU, RAM, temps de réponse) utilisées pour évaluer l'état de santé global d'un système au f...

DevOps

Culture, mouvement et pratiques visant à unifier le développement logiciel (Dev) et l'administration des infrastructures informatiques (Ops).Découvrir...

API Gateway

Passerelle servant de point d'entrée unique pour l'ensemble des requêtes vers des architectures micro-services. Elle gère le routage, la sécurité et l...

Architecture

Conception globale et structurelle d'un système informatique, définissant ses différents composants, leurs relations et les principes guidant son évol...

Artefact (Artifact)

Résultat final d'un processus de compilation ou de construction logicielle (build), tel qu'un fichier .jar, une archive zip ou une image Docker, prêt ...

Repository

Dépôt de stockage centralisé. Peut désigner un dépôt de code source (ex: Git) ou un dépôt d'artefacts et binaires (ex: Harbor, Nexus, Artifactory).

Ansible

Outil open source d'automatisation informatique (IaC) permettant la gestion des configurations, le déploiement d'applications et l'orchestration, fonc...

Articles recommandés

Aide-mémoire Docker : Les commandes essentielles

Un guide pratique regroupant toutes les commandes indispensables pour manipuler les images, les c...

Kubernetes : architecture et composants (control plane, nœuds, objets)

Comprendre l'architecture de Kubernetes : API server, etcd, scheduler, controller manager, kubele...

Aide-mémoire kubectl : les commandes essentielles

Toutes les commandes kubectl utiles au quotidien : contextes, ressources, logs, exec, port-forwar...

Kubernetes : Pods, ReplicaSets et Deployments (déployer et mettre à jour)

Maîtriser les workloads Kubernetes : anatomie d'un pod, ReplicaSet, Deployment, stratégies Rollin...

Kubernetes : exposer ses applications (Services, Ingress et Gateway API)

Exposer des applications dans Kubernetes : Services ClusterIP/NodePort/LoadBalancer, Ingress, Ing...

Kubernetes : sécuriser son cluster (RBAC, ServiceAccounts, NetworkPolicies, Pod Security)

Sécuriser Kubernetes : RBAC (Role, ClusterRole, bindings), ServiceAccounts, NetworkPolicies, Pod ...

Kubernetes : fiabilité et mise à l'échelle (probes, ressources, HPA, PDB)

Rendre une application résiliente dans Kubernetes : liveness, readiness et startup probes, reques...

Bonnes pratiques Docker : images, exécution, sécurité et exploitation

Les bonnes pratiques Docker : Dockerfile et builds multi-étapes, images minimales et reproductibl...