Files
ObsiGate/test_vault/IT/Docker Guide.md
T
bruno 6f0a6f7fd8
CI / lint (push) Successful in 1m55s
CI / security (push) Successful in 1m20s
CI / test (push) Successful in 3m43s
CI / build (push) Successful in 1m16s
CI / e2e (push) Successful in 11m44s
chore(fixtures): enrichit les vaults de test (frontmatter complet, types fichiers pour vues/aper/us, dossiers avec accents+espaces, scripts dupliques, images/logs) + purge residus e2e-diagram
2026-09-22 13:42:49 -04:00

5.5 KiB

date, favoris, tags, title
date favoris tags title
2025-03-01 true
docker
devops
conteneur
Docker Guide

Docker Guide

Installation de Docker

Sur Linux (Debian/Ubuntu)

# Mettre à jour les paquets
sudo apt update

# Installer les dépendances
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release

# Ajouter la clé GPG officielle de 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 Engine
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

# Vérifier l'installation
sudo docker run hello-world

Sur macOS/Windows


Commandes essentielles

# Lister les conteneurs
docker ps -a

# Build une image
docker build -t myapp:latest .

# Lancer un conteneur
docker run -d -p 8080:80 --name my_container myapp:latest

# Voir les logs
docker logs -f my_container

# Arrêter un conteneur
docker stop my_container

# Supprimer un conteneur
docker rm my_container

# Supprimer une image
docker rmi myapp:latest

Réseaux Docker

Docker propose plusieurs types de réseaux pour isoler ou connecter vos conteneurs :

Type Description Exemple d'utilisation
bridge Réseau par défaut pour les conteneurs docker run -p 8080:80 myapp
host Conteneur utilise l'IP de l'hôte docker run --network host myapp
overlay Pour les swarms multi-hôtes Utilisé avec docker stack deploy

Exemple : Créer un réseau personnalisé

docker network create my_network
docker run -d --network my_network --name db redis

Volumes

Les volumes permettent de persister les données :

  • Named volumes : gérés par Docker

docker volume create my_volume docker run -v my_volume:/data myapp


- **Bind mounts** : montage direct depuis l'hôte
  ```bash
docker run -v /chemin/absolu:/data myapp
  • tmpfs : stockage en mémoire

docker run --tmpfs /data myapp


Voir aussi : [[Proxmox Setup]]

---

## Docker Compose

Exemple de fichier `docker-compose.yml` avec variables d'environnement et dépendances :

```yaml
version: "3.9"

services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    environment:
      - NGINX_ENV=production
    depends_on:
      - redis
    networks:
      - frontend

  redis:
    image: redis:alpine
    volumes:
      - redis_data:/data
    networks:
      - frontend

volumes:
  redis_data:

networks:
  frontend:
    driver: bridge

Commandes utiles

# Démarrer les services
docker-compose up -d

# Arrêter les services
docker-compose down

# Voir les logs
docker-compose logs -f

Dockerfile : Exemple commenté

Voici un exemple de Dockerfile pour une application Python (FastAPI) :

# Utiliser une image officielle Python comme base
FROM python:3.9-slim

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

# Copier les fichiers de dépendances
COPY requirements.txt .

# Installer les dépendances
RUN pip install --no-cache-dir -r requirements.txt

# Copier le reste du code source
COPY . .

# Exposer le port 8000
EXPOSE 8000

# Commande pour lancer l'application
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

Bonnes pratiques pour un Dockerfile :

  • Utiliser des images slim ou alpine pour réduire la taille.
  • Multi-stage builds pour les applications compilées (Go, Rust, etc.).
  • Toujours inclure un fichier .dockerignore.

Sécurité

Bonnes pratiques

  • Éviter de lancer des conteneurs en tant que root :

docker run --user 1000:1000 myapp


- **Rendre le système de fichiers en lecture seule** :
  ```bash
docker run --read-only myapp
  • Limiter les capacités du conteneur :

docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE myapp


- **Scanner les images pour des vulnérabilités** :
  Utiliser des outils comme [Trivy](https://github.com/aquasecurity/trivy) ou [Clair](https://github.com/quay/clair).

---

## Nettoyage des ressources

Pour libérer de l'espace, supprimez les ressources inutilisées :

```bash
# Supprimer les conteneurs arrêtés
docker container prune

# Supprimer les images inutilisées
docker image prune -a

# Supprimer les volumes inutilisés
docker volume prune

# Supprimer les réseaux inutilisés
docker network prune

# Nettoyer TOUT (attention, irréversible !)
docker system prune -a --volumes

Bonnes pratiques

  • Utiliser des images Alpine ou slim
  • Multi-stage builds pour les applications compilées
  • Fichier .dockerignore
  • Un processus par conteneur
  • Limiter les ressources (CPU/mémoire) avec --memory et --cpus
  • Utiliser des secrets pour les variables sensibles (ex: --env-file ou docker secret)

Ressources utiles

Voir aussi : Proxmox Setup