概要
目標: Docker Compose で開発プロキシを使用する
時間: 20 分
プラグイン: 各種
前提条件:Dev Proxy、Docker、Docker Compose のインストールを設定する
Docker を使用してアプリケーションを開発する場合は、開発プロキシを使用して、アプリが API エラー、調整、または API 応答をモック処理する方法をテストできます。 この記事では、次の 2 つのシナリオで Docker Compose で開発プロキシを使用する方法について説明します。
- ホスト コンピューター、コンテナー内のアプリで実行されている開発プロキシ
- アプリ コンテナーと共にコンテナーで実行されている開発プロキシ
シナリオ 1: ホスト上の開発プロキシ、コンテナー内のアプリ
このシナリオでは、アプリケーションが Docker コンテナーで実行されている間、コンピューターで開発プロキシを直接実行します。 この方法は、開発を積極的に行っており、開発プロキシと直接やり取りする場合に便利です。
アプリケーション コンテナーを構成する
ホストで実行されている開発プロキシを使用するようにアプリケーションを構成する docker-compose.yaml ファイルを作成します。
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"
ホストで開発プロキシを起動する
アプリケーション コンテナーを開始する前に、ホスト コンピューターで開発プロキシを起動します。 macOS と Linux では、開発プロキシをすべてのネットワーク インターフェイスにバインドします。
devproxy --ip-address 0.0.0.0
Windows では、通常どおりに開発プロキシを起動できます。
devproxy
TLS/SSL 証明書の処理
アプリケーションが開発プロキシを介して HTTPS 要求を行う場合、コンテナーは開発プロキシ証明書を信頼する必要があります。 次の 2 つのオプションがあります。
オプション 1: 証明書の検証を無効にする (開発のみ)
迅速なテストのために、アプリケーションで証明書の検証を無効にすることができます。 Node.js アプリケーションの場合は、 NODE_TLS_REJECT_UNAUTHORIZED=0 環境変数を設定します (前の例に既に含まれています)。 .NET アプリケーションの場合は、証明書の検証をスキップするように HTTP クライアントを構成できます。
注意事項
運用環境のコードで証明書の検証を無効にしないでください。
オプション 2: コンテナー内の開発プロキシ証明書を信頼する
運用環境に似たセットアップを行う場合は、コンテナーに Dev Proxy 証明書をインストールします。 まず、ホストから証明書をエクスポートし、Docker イメージに追加します。 詳細な手順については、「 Docker で実行されている .NET アプリケーションで開発プロキシを使用 する」を参照してください。
アプリケーションを起動する
アプリケーション コンテナーを起動します。
docker compose up
これで、アプリケーションは、ホスト上で実行されている開発プロキシを介して、すべての HTTP および HTTPS トラフィックをルーティングするようになりました。
シナリオ 2: 開発プロキシとアプリを別々のコンテナーに配置する
このより高度なシナリオでは、開発プロキシとアプリケーションの両方が Docker コンテナーで実行されます。 この方法は、CI/CD パイプラインや、完全にコンテナー化された開発環境が必要な場合に便利です。
証明書ボリュームを作成する
どちらのコンテナーも、開発プロキシ証明書にアクセスする必要があります。 Docker ボリュームを作成して共有します。
docker volume create devproxy-cert
エントリポイント スクリプトを作成する
アプリケーション コンテナーの起動時に開発プロキシ証明書をインストールする 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 "$@"
スクリプトを実行可能にする:
chmod +x entrypoint.sh
アプリケーション Dockerfile を作成する
証明書のインストールの前提条件を含むアプリケーションの Dockerfile を作成します。
# 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"]
Docker Compose 構成を作成する
両方のサービスを定義する docker-compose.yaml ファイルを作成します。
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:
開発プロキシ構成ファイルを作成する
devproxyrc.jsonと同じディレクトリに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"
}
]
}
コンテナーを開始する
Docker Compose を使用して両方のコンテナーを開始します。
docker compose up
開発プロキシが最初に起動し、その証明書を生成します。 アプリケーション コンテナーは証明書を待機し、証明書をインストールして、アプリケーションを起動します。 アプリケーションからのすべての HTTP 要求と HTTPS 要求は、開発プロキシ経由でルーティングされるようになりました。
開発プロキシを操作する
開発プロキシはコンテナー内で実行されるため、いくつかの方法で操作できます。
ターミナルの使用
開発プロキシ コンテナーにアタッチします。
docker attach <container-name>
開発プロキシ API の使用
開発プロキシ API はポート 8897 で公開されています。 これを使用して、プログラムによって開発プロキシを制御できます。
# Start recording
curl -X POST http://localhost:8897/proxy/recording/start
# Stop recording
curl -X POST http://localhost:8897/proxy/recording/stop
詳細については、「 開発プロキシ API」を参照してください。
こちらも参照ください
Dev Proxy