Skip to content

Docker Compose 部署 ​

更新: 2026-10-16 15:20:09   字数: 0 字   时长: 0 分钟

Docker Compose 是 Aspire 支持的自托管部署目标。添加 Docker Compose 环境后,Aspire 会根据应用模型生成 Compose 文件、环境变量配置与容器镜像,产物可以部署到任何运行 Docker 或 Podman 的机器上。

容器运行时支持 ​

Aspire 同时支持 Docker 与 Podman。Podman 常见于强调安全性、无守护进程、无 root 的环境。

自动检测 ​

部署时,Aspire 会并行探测 Docker 与 Podman,并按以下优先级选择:

  1. 正在运行的运行时优先于「仅已安装」的运行时。
  2. 两者都在运行时,Docker 优先。

检测结果会在本次操作内缓存。

查看检测结果

bash
aspire doctor

它会列出所有可用运行时及其状态、版本,以及当前生效的是哪一个。

强制指定运行时 ​

设置 ASPIRE_CONTAINER_RUNTIME 环境变量可以跳过自动检测:

bash
ASPIRE_CONTAINER_RUNTIME=podman aspire deploy

设置后,aspire doctor 会显示所选运行时及原因(explicit configuration),即使 Docker 与 Podman 都在运行也会遵循该设置。

Podman 注意事项 ​

需要 Podman 5.0.0 或更高版本

较老的 Podman(例如 Ubuntu 24.04 自带的 4.9.x)会被 aspire doctor 标记为「客户端版本低于最低要求」,并且不会被使用,即使它是唯一安装的运行时。请从厂商渠道安装 Podman 5+。

使用 Podman 时,Aspire 通过 podman-compose(或 Podman 的 Docker Compose v2 provider)执行 compose up / compose down;服务发现使用 podman ps --filter label=...。

前置条件 ​

在 AppHost 中添加 Docker Compose 环境:

csharp
var builder = DistributedApplication.CreateBuilder(args);

builder.AddDockerComposeEnvironment("env");

builder.AddProject<Projects.Api>("api");

// 添加完所有资源后运行
builder.Build().Run();

无需逐个声明

只要 AppHost 中存在 Docker Compose 环境,所有资源都会自动发布为 Compose 服务,无需为每个资源额外开启。

发布与部署工作流 ​

Aspire 为 Docker Compose 提供了渐进式工作流,可以分步执行,也可以一次完成。

1. 发布(生成产物) ​

生成 Compose 文件与相关产物,不构建容器镜像:

bash
aspire publish

产物形如:

text
aspire-output/
├── docker-compose.yaml
├── docker-compose.override.yaml
├── .env
└── ...

2. 部署 ​

bash
aspire deploy

它会构建并推送/加载镜像,然后执行 Compose 启动。

3. 拆除 ​

bash
aspire destroy

参数化环境变量 ​

生成的 .env 文件中,机密与环境相关值以占位符形式存在,需要在部署环境提供真实值:

bash
# .env
API_KEY=${API_KEY}
POSTGRES_PASSWORD=${POSTGRES_PASSWORD}

与外部参数联动

AppHost 中通过 AddParameter("api-key", secret: true) 声明的参数,会出现在生成的产物中并等待注入。详见外部参数与机密。

生产使用建议 ​

  • 固定镜像版本:用 WithImageTag() 或明确的版本标签,避免 latest。
  • 显式使用数据卷:容器重启后数据不应丢失,见数据持久化。
  • 不要在 Compose 环境里跑开发用的管理界面(pgAdmin、Redis Commander 等),这些资源只应存在于开发配置中。
  • 把产物纳入版本控制或 GitOps 流程,让部署内容可审查。

与 AddDockerComposeEnvironment 之外的差异 ​

场景行为
未声明任何环境资源aspire publish 生成的是通用清单,需自行消费。
声明了 Compose 环境生成可直接 docker compose up 的产物。
同时声明 K8s 环境两套产物分别生成,互不影响。

下一步 ​

你觉得这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度