Aspire Docker 托管集成

包括:托管集成已包括仅限于—Client集成不包括Client集成不包括

通过 AspireDocker 托管集成,可以使用 Compose 部署 Aspire 应用程序 Docker 。 此集成将 Compose 环境建模 Docker为计算资源,可用于托管应用服务。 使用此集成时,Aspire 会生成 Docker Compose 文件,用于定义在容器化环境中运行应用程序所需的所有服务、网络和存储卷。 它支持从应用模型生成 Docker Compose 文件进行部署、协调多个服务,包括 Aspire 用于遥测可视化的仪表板、配置环境变量和服务依赖项,以及管理容器网络和服务发现。

托管集成

Docker 托管集成在 📦Aspire.Hosting.Docker NuGet 包中。

dotnet add package Aspire.Hosting.Docker

有关详细信息,请参阅 dotnet 添加包管理 .NET 应用程序中的包依赖性

添加 Docker Compose 环境资源

以下示例演示如何使用Docker该方法将 AddDockerComposeEnvironment Compose 环境添加到应用模型:

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();

前面的代码:

  • 创建一个 Docker Compose 环境,其名称为 compose
  • Redis添加将包含在 Compose 部署中的Docker缓存服务。
  • 添加将容器化并包含在部署中的 API 服务项目。
  • 添加引用缓存和 API 服务的 Web 应用程序。
  • 配置所有服务以发布为 Docker Compose 服务使用 PublishAsDockerComposeService

小窍门

分配了compose变量后,可以将其传递给WithComputeEnvironment API,以消除定义多个方案时可能产生的计算资源歧义。 否则,不需要变量 compose

添加 Docker 包含属性的 Compose 环境资源

您可以使用WithProperties方法配置Docker Compose 环境的各种属性。

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

使用 Compose 文件添加 Docker 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);

从浏览器访问 Aspire 仪表板时,WithHostPort 方法用于配置端口。 当通过反向代理或负载均衡器访问仪表板时,WithForwardedHeaders(IResourceBuilder<DockerComposeAspireDashboardResource>, Boolean) 方法用于处理转发的请求头。

发布和部署

若要使用 Docker Compose 部署应用程序,请使用 aspire publish

aspire publish -o docker-compose-artifacts

有关详细信息,请参阅 aspire publish 命令参考

此命令在 Docker 指定的输出目录中生成 Compose 文件和所有必要的项目。 生成的文件包括:

  • docker-compose.yml:定义所有服务的主 Docker Compose 文件。
  • docker-compose.override.yml:用于重写开发特定设置的文件。
  • .env:环境变量文件。
  • 特定于服务的配置文件和脚本。

发布后,可以使用 Compose 部署应用程序 Docker :

cd docker-compose-artifacts
docker compose up -d

环境变量

Docker 托管集成从应用模型捕获环境变量,并将它们包含在 .env 文件中。 这可确保所有配置都正确传递到容器化服务。

后续步骤