Partager via


Utiliser le proxy de développement avec Docker Compose

En un clin d’œil
Objectif: Utiliser le proxy de développement avec Docker Compose
Heure : 20 minutes
Plugins: Divers
Prérequis :configurer le proxy de développement, Docker et Docker Compose installés

Lors du développement d’applications avec Docker, vous pouvez utiliser Dev Proxy pour tester la façon dont votre application gère les erreurs d’API, la limitation ou les réponses d’API fictives. Cet article explique comment utiliser le proxy de développement avec Docker Compose dans deux scénarios :

  • Proxy de développement s’exécutant sur votre ordinateur hôte, application dans un conteneur
  • Proxy de développement s’exécutant dans un conteneur en même temps que votre conteneur d’application

Scénario 1 : Proxy de développement sur l’hôte, l’application dans le conteneur

Dans ce scénario, vous exécutez le proxy de développement directement sur votre machine pendant que votre application s’exécute dans un conteneur Docker. Cette approche est utile lorsque vous développez activement et souhaitez interagir directement avec le proxy de développement.

Configurer votre conteneur d’applications

Créez un docker-compose.yaml fichier qui configure votre application pour utiliser le proxy de développement en cours d’exécution sur votre hôte :

services:
  app:
    build: .
    environment:
      # Point to Dev Proxy on the host machine
      - HTTPS_PROXY=http://host.docker.internal:8000
      - HTTP_PROXY=http://host.docker.internal:8000
      # For Node.js applications
      - NODE_TLS_REJECT_UNAUTHORIZED=0
    extra_hosts:
      # Ensure host.docker.internal resolves correctly on Linux
      - "host.docker.internal:host-gateway"

Démarrer le proxy de développement sur votre hôte

Avant de démarrer votre conteneur d’application, démarrez le proxy de développement sur votre ordinateur hôte. Sur macOS et Linux, liez le proxy de développement à toutes les interfaces réseau :

devproxy --ip-address 0.0.0.0

Sur Windows, vous pouvez démarrer le proxy de développement normalement :

devproxy

Gérer les certificats TLS/SSL

Lorsque votre application effectue des requêtes HTTPS via le proxy de développement, le conteneur doit approuver le certificat du proxy de développement. Deux options s'offrent à vous :

Option 1 : Désactiver la validation des certificats (développement uniquement)

Pour les tests rapides, vous pouvez désactiver la validation des certificats dans votre application. Pour Node.js applications, définissez la NODE_TLS_REJECT_UNAUTHORIZED=0 variable d’environnement (déjà incluse dans l’exemple précédent). Pour les applications .NET, vous pouvez configurer votre client HTTP pour ignorer la validation des certificats.

Avertissement

Ne désactivez jamais la validation de certificat dans le code de production.

Option 2 : Approuver le certificat du proxy de développement dans le conteneur

Pour une configuration plus similaire à la production, installez le certificat proxy de développement dans votre conteneur. Tout d’abord, exportez le certificat à partir de votre hôte et ajoutez-le à votre image Docker. Consultez Utiliser le proxy de développement avec des applications .NET s’exécutant dans Docker pour obtenir des étapes détaillées.

Démarrer votre application

Démarrez votre conteneur d’application :

docker compose up

Votre application achemine désormais tout le trafic HTTP et HTTPS via le proxy de développement s’exécutant sur votre hôte.

Scénario 2 : Proxy de développement et application dans des conteneurs distincts

Dans ce scénario plus avancé, le proxy de développement et votre application s’exécutent dans des conteneurs Docker. Cette approche est utile pour les pipelines CI/CD ou lorsque vous souhaitez un environnement de développement entièrement conteneurisé.

Créer le volume de certificat

Les deux conteneurs ont besoin d’accéder au certificat du proxy de développement. Créez un volume Docker pour le partager :

docker volume create devproxy-cert

Créer le script du point d'entrée

Créez un script qui installe le certificat du proxy de développement au démarrage de votre conteneur d’application entrypoint.sh :

#!/bin/bash
set -e

# Wait for the Dev Proxy certificate to be available
echo "Waiting for Dev Proxy certificate..."
while [ ! -f /cert/rootCert.pfx ]; do
  sleep 1
done

# Convert PFX to PEM format
openssl pkcs12 \
  -in /cert/rootCert.pfx \
  -out /usr/local/share/ca-certificates/dev-proxy-ca.crt \
  -clcerts \
  -nokeys \
  -passin pass:""

# Update system certificates
update-ca-certificates

echo "Dev Proxy certificate installed"

# Execute the main command
exec "$@"

Rendez le script exécutable :

chmod +x entrypoint.sh

Créer le fichier Dockerfile de l’application

Créez un Dockerfile pour votre application qui inclut les conditions préalables à l’installation du certificat :

# Example for a Node.js application
FROM node:20

# Install certificate tools
RUN apt-get update && apt-get install -y \
    openssl \
    ca-certificates \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app

# Copy application files
COPY package*.json ./
RUN npm install
COPY . .

# Copy entrypoint script
COPY entrypoint.sh /entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"]
CMD ["node", "index.js"]

Créer la configuration Docker Compose

Créez un docker-compose.yaml fichier qui définit les deux services :

services:
  dev-proxy:
    image: ghcr.io/dotnet/dev-proxy:latest
    ports:
      - "8000:8000"
      - "8897:8897"
    volumes:
      # Mount your Dev Proxy configuration
      - ./devproxyrc.json:/config/devproxyrc.json
      # Share the certificate with the app container
      - devproxy-cert:/home/devproxy/.config/dev-proxy/rootCert
    # Generate the certificate on startup
    command: ["--install-cert"]
    stdin_open: true
    tty: true

  app:
    build: .
    depends_on:
      - dev-proxy
    environment:
      # Point to the Dev Proxy container
      - HTTPS_PROXY=http://dev-proxy:8000
      - HTTP_PROXY=http://dev-proxy:8000
    volumes:
      # Mount the certificate volume
      - devproxy-cert:/cert:ro

volumes:
  devproxy-cert:

Créer un fichier de configuration du proxy de développement

Créez un devproxyrc.json fichier dans le même répertoire que votre docker-compose.yaml:

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.3.0/rc.schema.json",
  "urlsToWatch": [
    "https://api.example.com/*",
    "https://graph.microsoft.com/*"
  ],
  "plugins": [
    {
      "name": "GenericRandomErrorPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll"
    }
  ]
}

Démarrer les conteneurs

Démarrez les deux conteneurs avec Docker Compose :

docker compose up

Le proxy de développement démarre en premier et génère son certificat. Votre conteneur d’application attend le certificat, l’installe, puis démarre votre application. Toutes les requêtes HTTP et HTTPS de votre application sont désormais routées via le proxy de développement.

Interagir avec le proxy de développement

Étant donné que le proxy de développement s’exécute dans un conteneur, vous pouvez interagir avec celui-ci de plusieurs façons :

Utilisation du terminal

Connectez-vous au conteneur proxy de développement :

docker attach <container-name>

Utilisation de l’API proxy de développement

L’API proxy de développement est exposée sur le port 8897. Vous pouvez l’utiliser pour contrôler le proxy de développement par programmation :

# Start recording
curl -X POST http://localhost:8897/proxy/recording/start

# Stop recording
curl -X POST http://localhost:8897/proxy/recording/stop

Pour plus d’informations, consultez l’API proxy de développement.

Voir aussi