共用方式為


Aspire Docker 託管整合

包括:包含託管整合 僅限託管整合 — Client不包含整合Client不包含整合

託管整合AspireDocker使您能使用Docker Compose 部署您的Aspire應用程式。 此整合將 Compose 環境建模為可用來代管應用程式服務的運算資源。 當您使用此整合時,會產生 AspireDocker Compose 檔案,以定義在容器化環境中執行應用程式所需的所有服務、網路和磁碟區。 它支援從應用程式模型產生 Docker Compose 檔案以進行部署、協調多個服務,包括 Aspire 遙測視覺化的儀表板、設定環境變數和服務相依性,以及管理容器網路和服務探索。

主機托管整合

託管整合功能可以在 Docker.📦Aspire.Hosting.Docker 的 NuGet 套件中使用。

dotnet add package Aspire.Hosting.Docker

如需詳細資訊,請參閱 dotnet add package管理 .NET 應用程式中的套件相依性

新增 Docker Compose 環境資源

下列範例示範如何使用以下Docker方法將 Compose 環境新增至AddDockerComposeEnvironment應用程式模型:

var builder = DistributedApplication.CreateBuilder(args);

// Add a Docker Compose environment
var compose = builder.AddDockerComposeEnvironment("compose");

// Add your services to the Docker Compose environment
var cache = builder.AddRedis("cache")
                   .PublishAsDockerComposeService((resource, service) =>
                   {
                       service.Name = "cache";
                   });

var apiService = builder.AddProject<Projects.ApiService>("apiservice")
                        .PublishAsDockerComposeService((resource, service) =>
                        {
                            service.Name = "api";
                        });

var webApp = builder.AddProject<Projects.WebApp>("webapp")
                    .WithReference(cache)
                    .WithReference(apiService)
                    .PublishAsDockerComposeService((resource, service) =>
                    {
                        service.Name = "web";
                    });

builder.Build().Run();

上述 程式碼:

  • 建立名為 Dockercompose 的 Compose 環境。
  • 新增 Redis 將包含在 Compose 部署中的 Docker 快取服務。
  • 新增將容器化並包含在部署中的 API 服務專案。
  • 新增同時參照快取和 API 服務的 Web 應用程式。
  • 將所有服務設定為使用 PublishAsDockerComposeService 發佈的 Docker Compose 服務。

小提示

compose 變數指派後,您可以將該變數傳遞至 WithComputeEnvironment API,以消除包含多個運算資源的解決方案的歧義。 否則,不需要變數 compose

新增 Docker 具有屬性的 Compose 環境資源

您可以使用以下Docker方法設定Compose環境的WithProperties各種屬性:

builder.AddDockerComposeEnvironment("compose")
       .WithProperties(env =>
       {
           env.DefaultContainerRegistry = "myregistry.azurecr.io";
           env.DefaultNetworkName = "my-network";
           env.BuildContainerImages = true;
       });

新增 Docker Compose 環境資源並使用 Compose 檔案

您可以透過ConfigureComposeFile方法自訂產生的Docker Compose 檔案。

builder.AddDockerComposeEnvironment("compose")
       .ConfigureComposeFile(composeFile =>
       {
           composeFile.Networks.Add("custom-network", new()
           {
               Driver = "bridge"
           });
       });

將 Aspire 儀表板資源新增至環境

Docker 託管整合包括 Aspire 儀表板,用於遙測視覺化。 您可以使用以下 WithDashboard 方法配置或禁用它:

// Enable dashboard with custom configuration
builder.AddDockerComposeEnvironment("compose")
       .WithDashboard(dashboard =>
       {
           dashboard.WithHostPort(8080)
                    .WithForwardedHeaders(enabled: true);
       });

// Disable dashboard
builder.AddDockerComposeEnvironment("compose")
       .WithDashboard(enabled: false);

WithHostPort 方法會設定用來從瀏覽器存取 Aspire 儀表板的連接埠。 此 WithForwardedHeaders(IResourceBuilder<DockerComposeAspireDashboardResource>, Boolean) 方法會在透過反向 Proxy 或負載平衡器存取儀表板時啟用轉送標頭處理。

發佈和部署

如要使用 Compose 部署Docker應用程式,請使用 :aspire publish

aspire publish -o docker-compose-artifacts

如需相關資訊,請參閱 aspire publish 指令參考

此指令會在 Docker 指定的輸出目錄中產生 Compose 檔案及所有必要的構件。 產生的檔案包括:

  • docker-compose.yml: 定義所有服務的主要 Compose 檔案 Docker。
  • docker-compose.override.yml:覆寫開發特定設定的檔案。
  • .env:環境變數檔案。
  • 服務特定的組態檔和指令碼。

發布後,您可以使用 Compose 部署 Docker 應用程式:

cd docker-compose-artifacts
docker compose up -d

環境變數

託管整合會將 Docker 從應用程式模型擷取環境變數,並將其包含在 .env 檔案中。 這可確保所有組態都正確傳遞至容器化服務。

後續步驟