次の方法で共有


Aspire開発用コンテナーVisual Studio Code

Dev Containers Visual Studio Code 拡張機能は、すべての依存関係が事前に構成されているコンテナー化された環境内で開発チームが開発する方法を提供します。 Aspire 9.1 では、ポートフォワーディングを自動的に構成することで、Dev Container 環境内でのAspireの操作をより適切にサポートするロジックが追加されました。

Aspire 9.1 より前は、開発コンテナー内でAspireを使用できますが、より多くの手動構成が必要でした。

Dev Containers と GitHub Codespaces

Visual Studio Codeでの開発コンテナーの使用は、GitHub Codespaces の使用と似ています。 Aspire 9.1 のリリースにより、Visual Studio Code の Dev Containers と GitHub Codespaces の両方のサポートが強化されました。 エクスペリエンスは似ていますが、いくつかの違いがあります。 Aspire Codespaces でGitHubを使用する方法の詳細については、「codespaces のAspireとGitHub」を参照してください。

テンプレート リポジトリの使用のクイック スタート

Visual Studio Codeで開発コンテナーを構成するには、リポジトリ内の _.devcontainer/devcontainer.json ファイルを使用します。 開始する最も簡単な方法は、テンプレート リポジトリから新しいリポジトリを作成 することです。 次の手順を検討してください:

  1. テンプレートを使用して新しいリポジトリを作成します。

    新しいリポジトリを作成します。

    詳細を指定して [リポジトリの 作成] を選択すると、リポジトリが作成され、 GitHubに表示されます。

  2. 次のコマンドを使用して、リポジトリをローカルの開発者ワークステーションに複製します。

    git clone https://github.com/<org>/<username>/<repository>
    
  3. Visual Studio Codeでリポジトリを開きます。 しばらくすると、Visual Studio Code.devcontainer/devcontainer.jsonファイルが検出され、コンテナー内のリポジトリを開くよう求められます。 ワークフローに最適なオプションを選択します。

    コンテナー内のリポジトリを開くよう求めるメッセージが表示されます。

    しばらくすると、ファイルの一覧が表示され、開発コンテナーのローカル ビルドが完了します。

    開発コンテナーのビルドが完了しました。

  4. Visual Studio Code (Ctrl+Shift+`) で新しいターミナル ウィンドウを開き、Aspireコマンド ラインを使用して新しいdotnet プロジェクトを作成します。

    dotnet new aspire-starter -n HelloAspire
    

    しばらくすると、プロジェクトが作成され、初期依存関係が復元されます。

  5. エディターで ProjectName.AppHost/AppHost.cs ファイルを開き、エディター ウィンドウの右上隅にある実行ボタンを選択します。

    エディターの [実行] ボタン。

    Visual Studio Code は、 Aspire AppHost をビルドして起動し、 Aspire ダッシュボードを自動的に開きます。 コンテナーでホストされているエンドポイントは初めて自己署名証明書を使用するため、証明書エラーが表示された特定の開発コンテナーのエンドポイントにアクセスします。

    ブラウザー証明書エラー。

    証明書エラーは予期されています。 要求されている URL が Dev Container のダッシュボードに対応することを確認したら、この警告を無視できます。

    Aspire Dev Container で実行されているダッシュボード。

    Aspire では、転送されたポートが自動的に構成され、 Aspire ダッシュボードでエンドポイントを選択すると、Dev コンテナー内のプロセスと入れ子になったコンテナーにトンネリングされます。

  6. GitHub リポジトリに変更をコミットする

    Aspire プロジェクトを正常に作成し、プロジェクトが起動してダッシュボードにアクセスできることを確認したら、リポジトリに変更をコミットすることをお勧めします。

devcontainer.json を手動で構成する

前のチュートリアルでは、 Aspire 開発コンテナー テンプレートを使用して開発コンテナーを作成する効率的なプロセスを示します。 既に既存のリポジトリがあり、Aspireで Dev Container 機能を利用する場合は、リポジトリ内の .devcontainer フォルダーに devcontainer.json ファイルを追加します。

└───📂 .devcontainer
     └─── devcontainer.json

テンプレート リポジトリには、開始点として使用できる devcontainer.json ファイルのコピーが含まれています。これは、Aspireに十分です。 次の JSON は、テンプレートの .devcontainer/devcontainer.json ファイルの最新バージョンを表します。

// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/dotnet
{
    "name": "Aspire",
    // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
    "image": "mcr.microsoft.com/devcontainers/dotnet:dev-10.0-noble",
    "features": {
        "ghcr.io/devcontainers/features/docker-in-docker:2": {},
        "ghcr.io/devcontainers/features/powershell:1": {},
        "ghcr.io/devcontainers/features/node:1": {},
        "ghcr.io/devcontainers/features/python:1": {},
        "ghcr.io/devcontainers-extra/features/uv:1": {}
    },

    "hostRequirements": {
        "cpus": 8,
        "memory": "32gb",
        "storage": "64gb"
    },

    // Use 'forwardPorts' to make a list of ports inside the container available locally.
    // "forwardPorts": [5000, 5001],
    // "portsAttributes": {
    //		"5001": {
    //			"protocol": "https"
    //		}
    // }

    // Use 'postCreateCommand' to run commands after the container is created.
    // "postCreateCommand": "dotnet restore",
    "onCreateCommand": "curl -sSL https://aspire.dev/install.sh | bash",
    "postStartCommand": "dotnet dev-certs https --trust",
    "customizations": {
        "vscode": {
            "extensions": [
                "ms-dotnettools.csdevkit",
                "GitHub.copilot-chat",
                "GitHub.copilot"
            ]
        }
    }
    // Configure tool-specific properties.
    // "customizations": {},

    // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
    // "remoteUser": "root"
}

開発コンテナーのシナリオ

基本的な Aspire Dev Container テンプレートは単純なシナリオに適していますが、特定の要件によっては追加の構成が必要になる場合があります。 次のセクションでは、さまざまな一般的なシナリオの例を示します。

ステートレス .NET アプリのみ

外部コンテナーや複雑なオーケストレーションなしでAspire プロジェクト リソースのみを使用する単純な.NET プロジェクトの場合は、最小限の Dev Container 構成を使用できます。

{
  "name": "Aspire - Simple",
  "image": "mcr.microsoft.com/devcontainers/dotnet:9.0-bookworm",
  "onCreateCommand": "dotnet new install Aspire.ProjectTemplates --force",
  "postStartCommand": "dotnet dev-certs https --trust",
  "customizations": {
    "vscode": {
      "extensions": [
        "ms-dotnettools.csdevkit"
      ]
    }
  }
}

この最小限の構成は、外部依存関係のないAspireサービスのみを調整する.NET アプリに適しています。

Node.js リソースの追加

Aspire アプリにNode.jsリソースが含まれている場合は、Node.js機能を開発コンテナーに追加します。

{
  "name": "Aspire with Node.js",
  "image": "mcr.microsoft.com/devcontainers/dotnet:9.0-bookworm",
  "features": {
    "ghcr.io/devcontainers/features/node:1": {
      "version": "lts"
    }
  },
  "onCreateCommand": "dotnet new install Aspire.ProjectTemplates --force",
  "postStartCommand": "dotnet dev-certs https --trust",
  "customizations": {
    "vscode": {
      "extensions": [
        "ms-dotnettools.csdevkit",
        "ms-vscode.vscode-typescript-next"
      ]
    }
  }
}

この構成では、同じコンテナー環境内で .NET と Node.js の両方の開発機能が提供されます。

Docker-in-Docker によるコンテナーのオーケストレーション

Aspire アプリがコンテナー リソースを調整する際には、Docker-in-Docker (DinD) サポートが必要となります。 基本的な構成を次に示します。

{
  "name": "Aspire with Containers",
  "image": "mcr.microsoft.com/devcontainers/dotnet:9.0-bookworm",
  "features": {
    "ghcr.io/devcontainers/features/docker-in-docker:2": {
      "version": "latest",
      "enableNonRootDocker": true,
      "moby": true
    }
  },
  "hostRequirements": {
    "cpus": 4,
    "memory": "16gb",
    "storage": "32gb"
  },
  "onCreateCommand": "dotnet new install Aspire.ProjectTemplates --force",
  "postStartCommand": "dotnet dev-certs https --trust",
  "customizations": {
    "vscode": {
      "extensions": [
        "ms-dotnettools.csdevkit",
        "ms-azuretools.vscode-docker"
      ]
    }
  }
}

高度なコンテナー ネットワーク

コンテナー間でネットワークの問題が発生した場合、または IPv6 のサポートが必要な場合は、ネットワーク構成を追加できます。

{
  "name": "Aspire with Advanced Networking",
  "image": "mcr.microsoft.com/devcontainers/dotnet:9.0-bookworm",
  "features": {
    "ghcr.io/devcontainers/features/docker-in-docker:2": {
      "version": "latest",
      "enableNonRootDocker": true,
      "moby": true
    }
  },
  "runArgs": [
    "--sysctl",
    "net.ipv6.conf.all.disable_ipv6=0",
    "--sysctl",
    "net.ipv6.conf.default.forwarding=1",
    "--sysctl",
    "net.ipv6.conf.all.forwarding=1"
  ],
  "hostRequirements": {
    "cpus": 8,
    "memory": "32gb",
    "storage": "64gb"
  },
  "onCreateCommand": "dotnet new install Aspire.ProjectTemplates --force",
  "postStartCommand": "dotnet dev-certs https --trust",
  "customizations": {
    "vscode": {
      "extensions": [
        "ms-dotnettools.csdevkit",
        "ms-azuretools.vscode-docker"
      ]
    }
  }
}

Von Bedeutung

Docker-in-Docker に関する考慮事項:

  • Docker-in-Docker では、CPU、メモリ、ストレージの増加など、リソースの割り当てが増える必要があります。
  • 上記の高度なネットワーク構成には、複雑なコンテナー間通信シナリオで必要になる可能性がある IPv6 転送設定が含まれています。
  • この構成は Docker Desktop で動作しますが、Rancher Desktop には制限がある場合があります。
  • コンテナー間のネットワーク接続には、特定のユース ケースに応じて追加の構成が必要になる場合があります。

Dapr 統合の例

Aspireと統合するDapr アプリの場合は、開発コンテナーにDapr コンポーネントを設定できます。 詳細については、「 AspireDapr 統合」を参照してください。

基本的な Dapr のセットアップ

{
  "name": "Aspire with Dapr",
  "image": "mcr.microsoft.com/devcontainers/dotnet:9.0-bookworm",
  "features": {
    "ghcr.io/devcontainers/features/docker-in-docker:2": {
      "enableNonRootDocker": true
    },
    "ghcr.io/dapr/cli/dapr-cli:0": {}
  },
  "onCreateCommand": "dotnet new install Aspire.ProjectTemplates --force",
  "postCreateCommand": "dotnet dev-certs https --trust && dapr init",
  "customizations": {
    "vscode": {
      "extensions": [
        "ms-dotnettools.csdevkit",
        "ms-azuretools.vscode-dapr"
      ]
    }
  }
}

Dapr 外部バックエンドを利用する

外部バックエンド (Dapr、Redis) を使用するより複雑なPostgreSQLシナリオでは、Docker Compose を使用できます。

{
  "name": "Aspire with Dapr and Backends",
  "image": "mcr.microsoft.com/devcontainers/dotnet:9.0-bookworm",
  "features": {
    "ghcr.io/devcontainers/features/docker-in-docker:2": {
      "enableNonRootDocker": true
    },
    "ghcr.io/dapr/cli/dapr-cli:0": {}
  },
  "runArgs": [
    "--sysctl",
    "net.ipv6.conf.all.disable_ipv6=0"
  ],
  "onCreateCommand": "dotnet new install Aspire.ProjectTemplates --force",
  "postCreateCommand": [
    "dotnet dev-certs https --trust",
    "docker compose up -d",
    "dapr init"
  ],
  "customizations": {
    "vscode": {
      "extensions": [
        "ms-dotnettools.csdevkit",
        "ms-azuretools.vscode-dapr",
        "ms-azuretools.vscode-docker"
      ]
    }
  }
}

一般的な考慮事項

Aspireで Dev Containers を使用する場合は、次の考慮事項に注意してください。

リソースの要件

  • 基本的な .NET アプリ: 単純なシナリオには、Standard Dev Container リソースで十分です。
  • コンテナー オーケストレーション: 8 つ以上の CPU、32 GB のメモリ、64 GB のストレージが推奨されます。
  • Dapr/Kubernetesを使用した複雑なシナリオ: 最適なパフォーマンスを得るためのリソース割り当てを高くすることをお勧めします。

ネットワーク

  • コンテナー間通信には IPv6 構成が必要な場合があります。
  • ポートフォワーディングは、 Aspire 9.1 以降のバージョンによって自動的に処理されます。
  • 外部サービス接続は、コンテナー ランタイムの構成によって異なります。

パフォーマンス

  • Docker-in-Docker シナリオでは、ネイティブ Dockerと比較してパフォーマンスのオーバーヘッドが発生します。
  • 運用ワークフローに Docker (DooD) の外部でDockerを使用することを検討してください。
  • ローカルでの開発とデプロイのシナリオでは、異なる構成が必要になる場合があります。

セキュリティ

  • Dockerイン Dockerを使用する場合、Dev Containers は昇格された特権で実行されます。
  • SSL 証明書の信頼は、ほとんどのシナリオで自動的に処理されます。
  • クラウド環境でポートを公開する場合は、セキュリティへの影響を考慮してください。

こちらも参照ください