Volumes et réseaux
Objectifs du chapitre
- Créer et gérer des volumes
- Parcourir les fichiers des volumes
- Configurer des réseaux
- Comprendre la connectivité des conteneurs
1 - Gestion des volumes
Liste des volumes
┌─────────────────────────────────────────────────────────────────┐
│ 📁 Volumes [+ Add volume] │
├─────────────────────────────────────────────────────────────────┤
│ □ Name Driver Mount point Used │
│ ──────────────────────────────────────────────────────────────│
│ □ postgres_data local /var/lib/docker... ✅ │
│ □ portainer_data local /var/lib/docker... ✅ │
│ □ nginx_config local /var/lib/docker... ✅ │
│ □ unused_volume local /var/lib/docker... ❌ │
│ │
│ Total: 4 volumes | Unused: 1 volume │
│ │
└─────────────────────────────────────────────────────────────────┘
Créer un volume
┌─────────────────────────────────────────────────────────────────┐
│ + Add Volume │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Name: [my-data ] │
│ │
│ Driver: [local ▼] │
│ │
│ Driver options: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ [type ] = [nfs ] [+ Add] │ │
│ │ [o ] = [addr=192... ] │ │
│ │ [device ] = [:/share ] │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Access control: │
│ ( ) Unrestricted │
│ (•) Restricted to teams/users │
│ │
│ [Create the volume] │
│ │
└─────────────────────────────────────────────────────────────────┘
Types de volumes
| Type | Usage | Configuration |
|---|---|---|
| local | Stockage local | Par défaut |
| nfs | Stockage réseau | type=nfs, o=addr=..., device=:/path |
| cifs | Partage Windows | type=cifs, o=username=...,password=... |
| tmpfs | RAM | type=tmpfs |
2 - Parcourir un volume (Browse)
Navigateur de fichiers
┌─────────────────────────────────────────────────────────────────┐
│ 📁 postgres_data [⬆️ Upload] [📥 Download] │
├─────────────────────────────────────────────────────────────────┤
│ 📂 / │
├─────────────────────────────────────────────────────────────────┤
│ 📁 base/ 4.0 KB 2024-01-15 │
│ 📁 global/ 12 KB 2024-01-15 │
│ 📁 pg_commit_ts/ 4.0 KB 2024-01-15 │
│ 📁 pg_dynshmem/ 4.0 KB 2024-01-15 │
│ 📁 pg_logical/ 4.0 KB 2024-01-15 │
│ 📁 pg_wal/ 16 MB 2024-01-15 │
│ 📄 postgresql.conf 28 KB 2024-01-15 │
│ 📄 pg_hba.conf 4.5 KB 2024-01-15 │
│ 📄 pg_ident.conf 1.6 KB 2024-01-15 │
│ │
└─────────────────────────────────────────────────────────────────┘
Actions sur les fichiers
| Action | Description |
|---|---|
| Upload | Téléverser un fichier |
| Download | Télécharger un fichier |
| Rename | Renommer |
| Delete | Supprimer |
| Edit | Éditer le contenu (fichiers texte) |
Édition de fichier
┌─────────────────────────────────────────────────────────────────┐
│ 📝 Edit: postgresql.conf [Save] [Cancel]│
├─────────────────────────────────────────────────────────────────┤
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ # PostgreSQL configuration file │ │
│ │ │ │
│ │ listen_addresses = '*' │ │
│ │ port = 5432 │ │
│ │ max_connections = 100 │ │
│ │ │ │
│ │ shared_buffers = 128MB │ │
│ │ dynamic_shared_memory_type = posix │ │
│ │ │ │
│ │ log_destination = 'stderr' │ │
│ │ logging_collector = on │ │
│ │ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
3 - Détails d'un volume
Inspection
┌─────────────────────────────────────────────────────────────────┐
│ 📁 postgres_data │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Information: │
│ ─────────────────────────────────────────────────────────────│
│ Name: postgres_data │
│ Driver: local │
│ Mount point: /var/lib/docker/volumes/postgres_data/_data │
│ Created: 2024-01-15 10:30:00 │
│ Scope: local │
│ │
│ Used by: │
│ ─────────────────────────────────────────────────────────────│
│ • postgres (container) │
│ │
│ Labels: │
│ ─────────────────────────────────────────────────────────────│
│ com.docker.compose.project: myapp │
│ com.docker.compose.volume: postgres_data │
│ │
└─────────────────────────────────────────────────────────────────┘
4 - Gestion des réseaux
Liste des réseaux
┌─────────────────────────────────────────────────────────────────┐
│ 🌐 Networks [+ Add network] │
├─────────────────────────────────────────────────────────────────┤
│ □ Name Driver Scope Subnet │
│ ──────────────────────────────────────────────────────────────│
│ □ bridge bridge local 172.17.0.0/16 │
│ □ host host local - │
│ □ none null local - │
│ □ app_frontend bridge local 172.18.0.0/16 │
│ □ app_backend bridge local 172.19.0.0/16 │
│ │
└─────────────────────────────────────────────────────────────────┘
Créer un réseau
┌─────────────────────────────────────────────────────────────────┐
│ + Add Network │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Name: [my-network ] │
│ │
│ Driver: [bridge ▼] │
│ • bridge - Single host networking │
│ • overlay - Multi-host networking (Swarm) │
│ • macvlan - Direct physical network │
│ │
│ ☐ Enable manual container attachment │
│ │
│ IPv4 configuration: │
│ ─────────────────────────────────────────────────────────────│
│ Subnet: [172.20.0.0/16 ] │
│ Gateway: [172.20.0.1 ] │
│ IP range: [172.20.1.0/24 ] │
│ │
│ Advanced options: │
│ ─────────────────────────────────────────────────────────────│
│ ☐ Isolated network (internal) │
│ ☐ Enable IPv6 │
│ │
│ Labels: │
│ [environment ] = [production ] [+ Add] │
│ │
│ [Create the network] │
│ │
└─────────────────────────────────────────────────────────────────┘
Options de création
| Option | Description |
|---|---|
| Driver | Type de réseau (bridge, overlay, macvlan) |
| Subnet | Plage d'adresses IP |
| Gateway | Passerelle par défaut |
| IP range | Plage d'allocation |
| Internal | Pas d'accès externe |
| IPv6 | Support IPv6 |
5 - Détails d'un réseau
Inspection
┌─────────────────────────────────────────────────────────────────┐
│ 🌐 app_frontend │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Information: │
│ ─────────────────────────────────────────────────────────────│
│ Name: app_frontend │
│ ID: abc123def456... │
│ Driver: bridge │
│ Scope: local │
│ Created: 2024-01-15 10:30:00 │
│ Internal: No │
│ Attachable: Yes │
│ │
│ IPAM: │
│ ─────────────────────────────────────────────────────────────│
│ Driver: default │
│ Subnet: 172.18.0.0/16 │
│ Gateway: 172.18.0.1 │
│ │
│ Connected containers: │
│ ─────────────────────────────────────────────────────────────│
│ • nginx 172.18.0.2 │
│ • api 172.18.0.3 │
│ • frontend 172.18.0.4 │
│ │
└─────────────────────────────────────────────────────────────────┘
Conteneurs connectés
La vue réseau montre tous les conteneurs connectés avec leurs IPs :
┌─────────────────────────────────────────────────────────────────┐
│ Connected containers │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Container IPv4 Address IPv6 Address MAC Address │
│ ──────────────────────────────────────────────────────────────│
│ nginx 172.18.0.2 - 02:42:ac:... │
│ api 172.18.0.3 - 02:42:ac:... │
│ frontend 172.18.0.4 - 02:42:ac:... │
│ │
│ [+ Connect container] [- Disconnect selected] │
│ │
└─────────────────────────────────────────────────────────────────┘
6 - Connecter/Déconnecter des conteneurs
Connecter un conteneur à un réseau
┌─────────────────────────────────────────────────────────────────┐
│ Connect container to network │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Container: [redis ▼] │
│ │
│ Network: app_frontend │
│ │
│ IPv4 Address: [ ] (optional) │
│ │
│ Aliases: │
│ [cache ] [+ Add alias] │
│ │
│ [Connect] │
│ │
└─────────────────────────────────────────────────────────────────┘
Depuis la page du conteneur
Vous pouvez aussi gérer les réseaux d'un conteneur depuis sa page de détails :
┌─────────────────────────────────────────────────────────────────┐
│ 📦 nginx - Networks │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Connected networks: │
│ ─────────────────────────────────────────────────────────────│
│ • app_frontend 172.18.0.2 [Leave] │
│ • app_backend 172.19.0.5 [Leave] │
│ │
│ [+ Join network] │
│ │
└─────────────────────────────────────────────────────────────────┘
7 - Réseaux overlay (Swarm)
Créer un réseau overlay
En mode Swarm, vous pouvez créer des réseaux overlay :
┌─────────────────────────────────────────────────────────────────┐
│ + Add Network (Swarm) │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Name: [app-overlay ] │
│ │
│ Driver: [overlay ▼] │
│ │
│ Options: │
│ ☐ Enable encryption (--opt encrypted) │
│ ☑ Allow attachment from containers │
│ │
└─────────────────────────────────────────────────────────────────┘
8 - Bonnes pratiques
Volumes
# ✅ Nommer les volumes explicitement
postgres_data
redis_cache
app_uploads
# ✅ Utiliser des labels
environment=production
app=myapp
# ✅ Sauvegarder régulièrement via Browse > Download
# ❌ Éviter les volumes anonymes
Réseaux
# ✅ Isoler les services par réseau
frontend-net (nginx, frontend)
backend-net (api, db, redis)
# ✅ Utiliser des noms explicites
myapp-frontend
myapp-backend
# ✅ Configurer des subnets pour éviter les conflits
172.20.0.0/16
172.21.0.0/16
# ✅ Utiliser internal pour les réseaux sensibles
Résumé
| Ressource | Actions |
|---|---|
| Volumes | Create, Browse, Edit, Upload, Download, Remove |
| Networks | Create, Connect, Disconnect, Remove |
| Type de réseau | Usage |
|---|---|
| bridge | Conteneurs sur le même hôte |
| overlay | Multi-hôtes (Swarm) |
| macvlan | Intégration réseau physique |
Points clés
- Browse permet d'explorer et modifier les fichiers des volumes
- Les réseaux personnalisés offrent l'isolation et le DNS interne
- Utilisez des noms descriptifs pour volumes et réseaux
- Les réseaux internes protègent les services backend
Exercices pratiques
- Créez un volume et explorez son contenu avec Browse
- Uploadez un fichier de configuration dans un volume
- Créez un réseau bridge personnalisé
- Connectez deux conteneurs au même réseau et testez le ping