-
Notifications
You must be signed in to change notification settings - Fork 0
docker
Guide complet pour dockeriser vos applications et configurer la communication inter-services
- Vue d'ensemble
- Wizard Docker
- Dockerfiles par Stack
- Docker Compose
- Communication Inter-Services
- Services Additionnels
- Bonnes Pratiques
- Dépannage
L'AI Agent Kit fournit un système complet de containerisation Docker permettant :
- Dockerfiles optimisés pour chaque stack technique (9 stacks supportés)
- Docker Compose pour orchestrer plusieurs services
- Réseau bridge pour la communication inter-services
- Services additionnels pré-configurés (bases de données, cache, etc.)
- Wizard de configuration pour une mise en place guidée
┌─────────────────────────────────────────────────────────────┐
│ app-network │
│ │
│ ┌───────────┐ ┌───────────┐ ┌───────────────────┐ │
│ │ Frontend │───▶│ Backend │───▶│ Database │ │
│ │ :3000 │ │ :5000 │ │ :5432 │ │
│ └───────────┘ └───────────┘ └───────────────────┘ │
│ │ │ │ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ http:// http:// postgresql:// │
│ frontend:3000 backend:5000 postgres:5432 │
│ │
│ ┌───────────┐ ┌───────────┐ ┌───────────────────┐ │
│ │ Redis │ │ RabbitMQ │ │ Elasticsearch │ │
│ │ :6379 │ │ :5672 │ │ :9200 │ │
│ └───────────┘ └───────────┘ └───────────────────┘ │
└─────────────────────────────────────────────────────────────┘
Le wizard Docker (docker-setup.wizard.yaml) guide la configuration interactive.
.ai-agents/wizards/docker-setup.wizard.yaml
-
Type d'application
- Frontend (React, Angular, Vue)
- Backend API (.NET, Node.js, Python)
- Fullstack (Frontend + Backend)
- Microservices (Multiple services)
-
Stack technique
- Sélection du framework backend/frontend
- Versions supportées
-
Services additionnels
- Bases de données (PostgreSQL, MySQL, MongoDB)
- Cache (Redis)
- Message Queue (RabbitMQ)
- Search (Elasticsearch)
- Storage (MinIO)
- Dev tools (MailHog)
-
Configuration réseau
- Nom du réseau Docker
- Health checks
- Traefik (optionnel)
-
Détails du projet
- Nom du projet
- Environnement cible
# Le wizard génère automatiquement :
# - Dockerfile(s)
# - docker-compose.yml
# - .dockerignore
# - .env.example# templates/docker/Dockerfile.dotnet.template
FROM mcr.microsoft.com/dotnet/sdk:9.0-alpine AS build
# Multi-stage build avec restauration cached
# Image finale: aspnet:9.0-alpine (~80MB)Caractéristiques :
- Multi-stage build (SDK → Runtime)
- Image Alpine légère
- Utilisateur non-root
- Health check intégré
# templates/docker/Dockerfile.nodejs.template
FROM node:22-alpine AS build
# pnpm pour gestion des dépendances
# Pruning des dev dependenciesCaractéristiques :
- pnpm (plus rapide que npm)
- Multi-stage build
- Node 22 Alpine (~50MB)
# templates/docker/Dockerfile.python.template
FROM python:3.12-slim AS build
# uv pour installation rapide des packages
# uvicorn pour le serveur ASGICaractéristiques :
- uv package manager (10x plus rapide que pip)
- Image slim
- uvicorn ASGI server
# templates/docker/Dockerfile.go.template
FROM golang:1.22-alpine AS build
# Compilation statique
# Image finale: scratch (0MB base)Caractéristiques :
- Compilation statique (CGO_ENABLED=0)
- Image scratch (binaire seul ~5-10MB)
- Minimal attack surface
# templates/docker/Dockerfile.java.template
FROM eclipse-temurin:21-jdk-alpine AS build
# Layered jars pour caching optimisé
# JVM avec support containersCaractéristiques :
- Layered jars (cache des dépendances)
- Eclipse Temurin JRE
- Support
-XX:+UseContainerSupport
# templates/docker/Dockerfile.rust.template
FROM rust:1.76-alpine AS build
# cargo-chef pour caching des dépendances
# Image Alpine finaleCaractéristiques :
- cargo-chef (dependency caching)
- musl libc (fully static)
- Image Alpine ou scratch
# templates/docker/Dockerfile.react.template
FROM node:22-alpine AS build
# Next.js standalone mode
# Output optimisé pour productionCaractéristiques :
- Next.js standalone output
- Static file serving
- Health check API
# templates/docker/Dockerfile.angular.template
FROM node:22-alpine AS build
# Angular CLI build
FROM nginx:alpine AS runtime
# Nginx avec SPA routingCaractéristiques :
- Build Angular optimisé
- Nginx pour serving statique
- Configuration SPA (try_files)
# templates/docker/Dockerfile.vue.template
FROM node:22-alpine AS build
# Vite build
FROM nginx:alpine AS runtime
# Nginx avec Vue Router supportCaractéristiques :
- Vite pour build rapide
- Nginx configuration
- Gzip compression
| Template | Usage |
|---|---|
docker-compose.yaml.template |
Application simple |
docker-compose.fullstack.yaml.template |
Frontend + Backend + DB |
docker-compose.microservices.yaml.template |
Architecture microservices |
# docker-compose.yml (généré)
version: "3.8"
networks:
app-network:
driver: bridge
services:
frontend:
build: ./frontend
ports:
- "3000:3000"
environment:
- API_URL=http://backend:5000
depends_on:
- backend
backend:
build: ./backend
ports:
- "5000:5000"
environment:
- DATABASE_URL=postgresql://postgres:postgres@postgres:5432/myapp
depends_on:
postgres:
condition: service_healthy
postgres:
image: postgres:16-alpine
environment:
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=myapp
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready"]
volumes:
postgres_data:# Démarrer tous les services
docker compose up -d
# Démarrer avec rebuild
docker compose up -d --build
# Voir les logs (tous les services)
docker compose logs -f
# Voir les logs d'un service
docker compose logs -f backend
# Arrêter tous les services
docker compose down
# Arrêter et supprimer les volumes
docker compose down -v
# Reconstruire un service spécifique
docker compose build backend
docker compose up -d backend
# Scaler un service
docker compose up -d --scale backend=3Dans un réseau Docker bridge, les services peuvent se contacter par leur nom de service comme hostname.
// Dans le frontend (Next.js SSR)
const apiUrl = process.env.API_URL; // http://backend:5000
// Appel API
const response = await fetch(`${apiUrl}/api/users`);// Angular service
@Injectable()
export class ApiService {
private apiUrl = environment.apiUrl; // http://backend:5000
getUsers() {
return this.http.get(`${this.apiUrl}/api/users`);
}
}// .NET appsettings.json (via env var)
{
"ConnectionStrings": {
"DefaultConnection": "Host=postgres;Database=myapp;Username=postgres;Password=postgres"
}
}# Python FastAPI
DATABASE_URL = os.environ["DATABASE_URL"]
# postgresql://postgres:postgres@postgres:5432/myapp// Node.js TypeORM
const connection = await createConnection({
type: "postgres",
host: "postgres", // Nom du service Docker
port: 5432,
database: process.env.DB_NAME,
});# Python
import redis
r = redis.from_url("redis://redis:6379")// Node.js
import Redis from 'ioredis';
const redis = new Redis({ host: 'redis', port: 6379 });Le fichier .env.docker généré contient toutes les URLs de services :
# Database
DATABASE_URL=postgresql://postgres:postgres@postgres:5432/myapp
# Redis
REDIS_URL=redis://redis:6379
# RabbitMQ
RABBITMQ_URL=amqp://guest:guest@rabbitmq:5672
# Elasticsearch
ELASTICSEARCH_URL=http://elasticsearch:9200
# Services
BACKEND_URL=http://backend:5000
FRONTEND_URL=http://frontend:3000postgres:
image: postgres:16-alpine
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: myapp
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready", "-U", "postgres"]mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: myapp
volumes:
- mysql_data:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping"]mongodb:
image: mongo:7.0
environment:
MONGO_INITDB_ROOT_USERNAME: mongo
MONGO_INITDB_ROOT_PASSWORD: mongo
volumes:
- mongodb_data:/data/dbredis:
image: redis:7-alpine
command: redis-server --appendonly yes
volumes:
- redis_data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]rabbitmq:
image: rabbitmq:3-management-alpine
ports:
- "5672:5672" # AMQP
- "15672:15672" # Management UI
environment:
RABBITMQ_DEFAULT_USER: guest
RABBITMQ_DEFAULT_PASS: guestelasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.12.0
environment:
- discovery.type=single-node
- xpack.security.enabled=false
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
volumes:
- elasticsearch_data:/usr/share/elasticsearch/dataminio:
image: minio/minio:latest
ports:
- "9000:9000" # API
- "9001:9001" # Console
environment:
MINIO_ROOT_USER: minioadmin
MINIO_ROOT_PASSWORD: minioadmin
command: server /data --console-address ":9001"
volumes:
- minio_data:/datamailhog:
image: mailhog/mailhog:latest
ports:
- "1025:1025" # SMTP
- "8025:8025" # Web UI- ✅ Utilisez des utilisateurs non-root dans les containers
- ✅ Ne stockez jamais de secrets en dur (utilisez des variables d'environnement)
- ✅ Utilisez des images officielles et maintenez-les à jour
- ✅ Activez les health checks pour tous les services
- ✅ Utilisez le multi-stage build pour réduire la taille des images
- ✅ Ordonnez les instructions Dockerfile pour maximiser le cache
- ✅ Utilisez .dockerignore pour exclure les fichiers inutiles
- ✅ Choisissez des images Alpine quand possible
# docker-compose.override.yml (dev only)
services:
backend:
volumes:
- ./backend/src:/app/src # Hot reload
environment:
- NODE_ENV=development- ✅ Utilisez des tags de version spécifiques (pas
latest) - ✅ Configurez les limites de ressources
- ✅ Activez restart: unless-stopped
- ✅ Utilisez un reverse proxy (Traefik, Nginx)
# Voir les logs
docker compose logs backend
# Voir les logs en temps réel
docker compose logs -f backend
# Inspecter le container
docker inspect myapp_backend# Lister les réseaux
docker network ls
# Inspecter le réseau
docker network inspect app-network
# Tester la connectivité
docker compose exec backend ping postgres# Rebuild sans cache
docker compose build --no-cache
# Voir les étapes de build
docker compose build --progress=plain# Supprimer les containers arrêtés
docker container prune
# Supprimer les images non utilisées
docker image prune
# Supprimer les volumes non utilisés
docker volume prune
# Nettoyage complet
docker system prune -a --volumesAprès utilisation du wizard ou des scaffolds avec Docker :
mon-projet/
├── docker-compose.yml # Orchestration des services
├── .dockerignore # Fichiers exclus du build
├── .env.example # Template des variables d'environnement
├── backend/
│ └── Dockerfile # Build du backend
└── frontend/
└── Dockerfile # Build du frontend
💡 Conseil : Commencez avec le wizard Docker pour une configuration guidée, puis personnalisez les fichiers générés selon vos besoins.
Dernière mise à jour : 3 février 2026
Les contributions sont bienvenues ! Voir CONTRIBUTING.md
This documentation is automatically synced from the main repository.