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
This commit is contained in:
+214
-13
@@ -10,6 +10,35 @@ title: Docker Guide
|
||||
|
||||
# Docker Guide
|
||||
|
||||
## Installation de Docker
|
||||
|
||||
### Sur Linux (Debian/Ubuntu)
|
||||
```bash
|
||||
# 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
|
||||
- Télécharger [Docker Desktop](https://www.docker.com/products/docker-desktop/) et suivre les instructions.
|
||||
|
||||
---
|
||||
|
||||
## Commandes essentielles
|
||||
|
||||
```bash
|
||||
@@ -20,36 +49,208 @@ docker ps -a
|
||||
docker build -t myapp:latest .
|
||||
|
||||
# Lancer un conteneur
|
||||
docker run -d -p 8080:80 myapp:latest
|
||||
docker run -d -p 8080:80 --name my_container myapp:latest
|
||||
|
||||
# Voir les logs
|
||||
docker logs -f container_name
|
||||
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
|
||||
```
|
||||
|
||||
## Docker Compose
|
||||
---
|
||||
|
||||
```yaml
|
||||
version: "3.9"
|
||||
services:
|
||||
web:
|
||||
image: nginx:alpine
|
||||
ports:
|
||||
- "80:80"
|
||||
## 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é**
|
||||
```bash
|
||||
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
|
||||
```bash
|
||||
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
|
||||
```bash
|
||||
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**
|
||||
```bash
|
||||
# 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) :
|
||||
|
||||
```dockerfile
|
||||
# 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`** :
|
||||
```bash
|
||||
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** :
|
||||
```bash
|
||||
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
|
||||
- [ ] Multi-stage builds
|
||||
- [x] Utiliser des images Alpine ou `slim`
|
||||
- [x] Multi-stage builds pour les applications compilées
|
||||
- [x] Fichier `.dockerignore`
|
||||
- [x] Un processus par conteneur
|
||||
- [x] Un processus par conteneur
|
||||
- [x] Limiter les ressources (CPU/mémoire) avec `--memory` et `--cpus`
|
||||
- [x] Utiliser des secrets pour les variables sensibles (ex: `--env-file` ou `docker secret`)
|
||||
|
||||
---
|
||||
|
||||
## Ressources utiles
|
||||
- [Documentation officielle Docker](https://docs.docker.com/)
|
||||
- [Docker Curriculum](https://docker-curriculum.com/)
|
||||
- [Awesome Docker](https://github.com/veggiemonk/awesome-docker)
|
||||
- [Tutoriel Docker Compose](https://docs.docker.com/compose/)
|
||||
|
||||
Voir aussi : [[Proxmox Setup]]
|
||||
Reference in New Issue
Block a user