Dev Proxy gebruiken met Docker Compose

In één oogopslag
Doel: Dev Proxy gebruiken met Docker Compose
Tijd: 20 minuten
Plugins: Verschillende
Vereisten:Dev Proxy instellen, Docker en Docker Compose geïnstalleerd

Bij het ontwikkelen van apps met Docker wilt u misschien Dev Proxy gebruiken om te testen hoe uw app omgaat met API-fouten, snelheidsbeperkingen of om API-responsen te simuleren. In dit artikel leest u hoe u Dev Proxy gebruikt met Docker Compose in twee scenario's:

  • Dev Proxy die wordt uitgevoerd op uw hostcomputer, app in een container
  • Dev-proxy die wordt uitgevoerd in een container naast uw app-container

Scenario 1: Dev Proxy op host, app in container

In dit scenario voert u Dev Proxy rechtstreeks uit op uw computer terwijl uw toepassing wordt uitgevoerd in een Docker-container. Deze aanpak is handig wanneer u actief ontwikkelt en rechtstreeks wilt communiceren met Dev Proxy.

Uw toepassingscontainer configureren

Maak een docker-compose.yaml bestand waarmee uw toepassing wordt geconfigureerd voor het gebruik van de Dev Proxy die wordt uitgevoerd op uw host:

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"

Dev Proxy starten op uw host

Voordat u de toepassingscontainer start, start u Dev Proxy op uw hostcomputer. In macOS en Linux bindt u Dev Proxy aan alle netwerkinterfaces:

devproxy --ip-address 0.0.0.0

In Windows kunt u de dev-proxy normaal starten:

devproxy

TLS/SSL-certificaten verwerken

Wanneer uw toepassing HTTPS-aanvragen doet via Dev Proxy, moet de container het Dev Proxy-certificaat vertrouwen. U hebt twee opties:

Optie 1: Certificaatvalidatie uitschakelen (alleen ontwikkeling)

Voor snelle tests kunt u certificaatvalidatie uitschakelen in uw toepassing. Stel voor Node.js toepassingen de NODE_TLS_REJECT_UNAUTHORIZED=0 omgevingsvariabele in (al opgenomen in het vorige voorbeeld). Voor .NET-toepassingen kunt u uw HTTP-client configureren om certificaatvalidatie over te slaan.

Waarschuwing

Schakel certificaatvalidatie nooit uit in productiecode.

Optie 2: Het Dev Proxy-certificaat in de container vertrouwen

Voor een meer productieachtige installatie installeert u het Dev Proxy-certificaat in uw container. Exporteer eerst het certificaat van uw host en voeg het toe aan uw Docker-installatiekopie. Zie Dev Proxy gebruiken met .NET-toepassingen die worden uitgevoerd in Docker voor gedetailleerde stappen.

Uw toepassing starten

Start uw toepassingscontainer:

docker compose up

Uw toepassing routeert nu al het HTTP- en HTTPS-verkeer via Dev Proxy die wordt uitgevoerd op uw host.

Scenario 2: Dev Proxy en app in afzonderlijke containers

In dit geavanceerdere scenario worden zowel Dev Proxy als uw toepassing uitgevoerd in Docker-containers. Deze methode is handig voor CI/CD-pijplijnen of als u een volledig containeromgeving wilt.

Het certificaatvolume maken

Beide containers hebben toegang nodig tot het Dev Proxy-certificaat. Maak een Docker-volume om het te delen:

docker volume create devproxy-cert

Het invoerpuntscript maken

Maak een entrypoint.sh script waarmee het Dev Proxy-certificaat wordt geïnstalleerd wanneer uw toepassingscontainer wordt gestart:

#!/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 "$@"

Maak het uitvoerbare script:

chmod +x entrypoint.sh

Het Dockerfile van de toepassing maken

Maak een Dockerfile voor uw toepassing die de vereisten voor certificaatinstallatie bevat:

# 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"]

De Docker Compose-configuratie maken

Maak een docker-compose.yaml bestand dat beide services definieert:

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:

Een Dev Proxy-configuratiebestand maken

Maak een devproxyrc.json bestand in dezelfde map als uw docker-compose.yaml:

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

De containers starten

Start beide containers met Docker Compose:

docker compose up

Dev Proxy wordt eerst gestart en genereert het bijbehorende certificaat. Uw toepassingscontainer wacht op het certificaat, installeert het en start vervolgens de toepassing. Alle HTTP- en HTTPS-aanvragen van uw toepassing worden nu doorgestuurd via Dev Proxy.

Interactie met dev-proxy

Aangezien Dev Proxy wordt uitgevoerd in een container, kunt u er op verschillende manieren mee werken:

De terminal gebruiken

Koppelen aan de Dev Proxy-container:

docker attach <container-name>

De Dev Proxy-API gebruiken

De Dev Proxy-API wordt weergegeven op poort 8897. U kunt deze gebruiken om programmatisch dev proxy te beheren:

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

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

Zie Dev Proxy-API voor meer informatie.

Zie ook