Files
DEV_42_Docker/05_networks_dockerfile.md
2026-03-11 15:11:31 +01:00

6.5 KiB

marp, theme, paginate, backgroundColor, footer, style
marp theme paginate backgroundColor footer style
true default true Conteneurisation - Partie 2 - 2025 section { font-family: 'Arial', sans-serif; } h1 { color: #2496ed; } h2 { color: #384c54; }

Docker Networks & Dockerfile

IUT Sénart-Fontainebleau

2025


Plan du cours

  1. Docker Networks

    • Types de réseaux
    • Communication entre conteneurs
    • Use cases et bonnes pratiques
    • Exercices pratiques
  2. Dockerfile

    • Construction d'images
    • Multi-stage builds
    • Optimisation et sécurité
    • Cas pratiques

1. Docker Networks

Pourquoi les réseaux Docker ?

  • Isolation des conteneurs
  • Communication sécurisée
  • Simulation d'infrastructure
  • Environnements multi-conteneurs
  • Séparation des préoccupations

Types de réseaux Docker

Bridge (default)

  • Réseau privé interne
  • Communication entre conteneurs
  • Port mapping pour accès externe
# Création d'un réseau bridge personnalisé
docker network create --driver bridge my-network

# Lancement d'un conteneur sur ce réseau
docker run --network my-network --name web1 nginx

# Inspection du réseau
docker network inspect my-network

Types de réseaux Docker

Host

  • Utilise la stack réseau de l'hôte
  • Performance maximale
  • Moins sécurisé
  • Cas d'usage : haute performance nécessaire
# Lancement en mode host
docker run --network host nginx

# Vérification des ports utilisés
ss -tunlp

Types de réseaux Docker

None

  • Aucune connectivité réseau
  • Isolation totale
  • Pour les traitements isolés
  • Cas d'usage : scripts de traitement batch
# Isolation complète
docker run --network none nginx

# Vérification de l'isolation
docker exec [container-id] ping 8.8.8.8

Communication entre conteneurs

Même réseau bridge

# Création du réseau
docker network create app-network

# Déploiement d'une stack web
docker run -d --network app-network --name frontend nginx
docker run -d --network app-network --name backend api
docker run -d --network app-network --name db postgres

# Test de communication
docker exec frontend ping backend
docker exec backend ping db

DNS dans Docker

Service Discovery

  • Résolution automatique des noms
  • Service discovery intégré
  • Facilite la mise à l'échelle
# Communication par nom de service
http://backend:8080/api
http://db:5432

# Test de résolution DNS
docker exec frontend nslookup backend
docker exec frontend wget -qO- http://backend/health

Inspection et Debug Réseau

Outils disponibles

# Voir les réseaux
docker network ls

# Détails d'un réseau
docker network inspect bridge

# Connecter/Déconnecter à chaud
docker network connect app-network container1
docker network disconnect app-network container1

# Traces réseau
docker logs --follow container1

2. Pourquoi des Dockerfiles ?

Problèmes résolus

  • "Ça marche sur ma machine"
  • Dépendances manquantes
  • Versions différentes
  • Configuration manuelle

Avantages

  • Infrastructure as Code (IaC)
  • Reproductibilité garantie
  • Déploiement automatisé
  • Tests cohérents
  • Documentation vivante

Structure d'un Dockerfile Avancé

# Base image selection
FROM alpine:3.14 AS builder

# Métadonnées détaillées
LABEL maintainer="name@example.com" \
      version="1.0" \
      description="Application web" \
      environment="production"

# Variables d'environnement
ENV APP_HOME=/app \
    APP_USER=webuser \
    APP_ENV=prod

# Création utilisateur dédié
RUN adduser -D -h $APP_HOME $APP_USER

# Installation des dépendances
RUN apk add --no-cache \
    nodejs \
    npm \
    git

# Configuration du workdir
WORKDIR $APP_HOME

# Copie et permissions
COPY --chown=$APP_USER:$APP_USER . .

# Switch utilisateur
USER $APP_USER

# Healthcheck
HEALTHCHECK --interval=30s --timeout=3s \
    CMD wget -q localhost:3000/health || exit 1

# Commande de démarrage
CMD ["node", "app.js"]

Multi-stage builds

Exemple Complet

# Stage 1: Build
FROM node:16 AS builder
WORKDIR /build
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

# Stage 2: Test
FROM builder AS tester
RUN npm run test

Multi-stage builds

Exemple Complet

# Stage 3: Production
FROM nginx:alpine
COPY --from=builder /build/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf

Optimisation des images

Techniques avancées

  1. Utilisation de .dockerignore
node_modules
*.log
.git
tests
docs

Optimisation des images

  1. Ordonnancement des layers
# Bon ordre (moins de rebuilds)
COPY package.json .
RUN npm install
COPY . .

# Mauvais ordre (rebuilds fréquents)
COPY . .
RUN npm install

Optimisation des images

  1. Nettoyage des caches
RUN apt-get update && \
    apt-get install -y package && \
    rm -rf /var/lib/apt/lists/*

Variables d'environnement et Secrets

Bonnes pratiques

# Variables build-time
ARG VERSION=1.0

# Variables runtime
ENV APP_VERSION=${VERSION} \
    NODE_ENV=production

# Usage avec arguments
docker build --build-arg VERSION=2.0 .

Variables d'environnement et Secrets

Secrets en production

# Utilisation de docker secrets
docker secret create db_password password.txt
docker service create --secret db_password ...

Healthcheck Détaillé

Implémentation robuste

HEALTHCHECK --interval=30s \
            --timeout=3s \
            --start-period=60s \
            --retries=3 \
            CMD wget -q --spider \
                http://localhost:80/health || exit 1

Monitoring

# Vérification status
docker inspect --format='{{.State.Health.Status}}' container

Sécurité et Bonnes Pratiques

Sécurisation des conteneurs

  • Utilisateur non-root
  • Images officielles ou vérifiées
  • Scan des vulnérabilités
  • Mise à jour régulière des bases
  • Principe du moindre privilège
# Exemple sécurisé
FROM alpine:3.14
RUN adduser -D appuser
USER appuser

Déploiement et Tests

Workflow complet

# Build avec tag
docker build -t app:latest .

# Test local
docker run --rm app:latest

# Publication
docker tag app:latest registry/app:latest
docker push registry/app:latest

# Déploiement
docker pull registry/app:latest
docker run -d app:latest

Questions & Travaux Pratiques

Explication de quelques notions pour le TP

Place aux exercices pratiques !