RousselTMLEARNING

Article · Docker: From Discovery to Expertise

Course Overview

This article is available in French.

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 →

My progress

  • ⏱ Estimated time : ≈ 10 min

Sign in to track your progress and take notes. Sign in

💬 Ask a question

Course Glossary

DevOps

A culture, movement, and set of practices designed to unify software development (Dev) and IT operations (Ops).

API Gateway

A gateway that acts as a single entry point for all requests to a microservices architecture. It handles routing, security, and rate limiting.

Architecture

The overall structural design of an IT system, defining its various components, their relationships, and the principles guiding its evolution.

Artifact

The final outcome of a software compilation or build process, such as a .jar file, a zip archive, or a Docker image, ready for deployment.

Repository

A centralized storage location. This can refer to a source code repository (e.g., Git) or an artifact and binary repository (e.g., Harbor, Nexus, Arti...

Docker

An open-source platform designed to make it easier to create, deploy, and run applications by isolating them into portable, lightweight software conta...

Recommended Articles

L'API de Traefik : inspecter la configuration et sécuriser le tableau de bord

Utiliser l'API REST de Traefik pour inspecter routeurs, services, middlewares et entrypoints, l'e...

Conteneurs, Kubernetes et cloud native dans une démarche DevOps

Le rôle des conteneurs et de Kubernetes dans le DevOps : images reproductibles, Dockerfile multi-...

Installer Bindplane : serveur, BDOT Collector et connexion OpAMP

Installer le serveur Bindplane (Docker Compose, Linux, Kubernetes), connecter des collecteurs BDO...

Installer Zabbix et superviser son premier hôte

Installer Zabbix avec Docker Compose (serveur, PostgreSQL, interface web), installer l'agent 2 su...

Thanos Sidecar : accoler Thanos à Prometheus et téléverser vers le stockage objet

Mettre en place Thanos Sidecar : réglages Prometheus (external labels, blocs de 2 h), configurati...

CaaS état de l'art et bonnes pratiques

Le Container as a Service (CaaS) est un modèle de cloud computing qui permet aux entreprises de g...

Traefik : les providers (Docker, Kubernetes, Nomad, Consul, fichiers, clés-valeurs)

Les providers alimentent la configuration dynamique de Traefik : découverte des services Docker, ...

Thanos Ruler : règles et alertes sur la vue globale

Évaluer des règles d'enregistrement et d'alerte sur l'ensemble des clusters avec Thanos Ruler : c...

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

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

Support us

♥ SUPPORT US

Support RousselTM Learning

Courses, articles, labs and certificates stay free with no intrusive ads. A voluntary contribution, of any amount you choose, pays for hosting, lab environments and new content.

Contribute with PayPal Any amount · card or PayPal accountLearn more
QR code PayPal
Or scan this QR code with your phone

Thank you, every contribution counts!