Skip to main content
[ PIER ]

Docker Compose

从 Compose YAML 部署多容器栈 —— Pier 处理其余部分。

Application #docker#compose#multi-container

将 docker-compose.yaml 粘贴到 Pier 并发布多容器应用程序 —— web + worker + cache + queue + database,任何形状。Pier 配置栈,将其附加到 Traefik 以获取 HTTPS,管理持久卷,并公开与原生模板相同的生命周期控件(日志、env、重启、redeploy)。

使用 Pier 部署

  1. 1 打开 Pier 控制台,点击 Add service。
  2. 2 从模板列表中选择 Docker Compose。
  3. 3 选择版本、设置服务名称,Pier 会自动配置容器、存储和端口。
  4. 4 如需 HTTPS,请绑定域名。Traefik 会自动签发 Let's Encrypt 证书。

什么是 Pier 上的 Docker Compose?

本模板包装 Docker Compose,让你可将多容器应用程序 YAML 直接粘贴到 Pier UI 中并发布。Pier 配置栈,将其附加到其 Traefik 前置网络以获得 HTTPS,跟踪命名 卷,管理 env vars,按服务聚合日志,并提供与原生模板相同的生命周期控制 (重启、redeploy、查看日志、编辑 env)。

杀手用例是发布规范 docker-compose.yaml 作为其安装方法的开源项目 —— 粘贴、设置域名、部署。你自己的多服务应用程序(web + worker + Redis + Postgres 等)也自然适合 —— 如果它们属于一起,无需将它们分解为单个 Pier 服务。

Pier 如何部署它

你将 Compose YAML 粘贴到 UI,可选地设置服务级 env 覆盖,Pier 在主机上运行 docker compose up -d。命名卷成为出现在卷页面上的 Pier 管理卷。网络默认 为每栈桥;将外部 pier-traefik 网络添加到应该位于 HTTPS 后的任何服务。

Traefik 集成是通过服务上的标准 Traefik 标签 —— traefik.enable=truetraefik.http.routers.<name>.rule=Host(...) 等。Pier 自动提供 Let’s Encrypt 解析器;你只添加域名。

更新是 YAML 编辑 + redeploy;Pier 区分现有栈并仅重新创建更改的内容。

何时不要使用 Docker Compose

对于单容器应用,Docker Image 模板更简单 —— 无 YAML 管理。对于代码仓库 (非预构建镜像),Dockerfile 或 Railpack 模板为你构建。对于带托管备份和 版本升级的原生 Pier 服务(PostgreSQL、Gitea、Grafana 等),选择专用模板 —— 你获得更多生命周期功能。Compose 是”不是原生模板的多容器应用”的正确答案。

核心功能

粘贴并部署多容器应用

将完整 `docker-compose.yaml` 放入 Pier UI;Pier 一起部署所有服务,带正确的网络、依赖和重启策略。

Traefik 集成

在你的服务中添加 Traefik 标签,Pier 在你的自定义域上连接它们以获得 HTTPS —— 无单独的反向代理需要设置。

持久卷

Compose YAML 中的命名卷由 Pier 跟踪 —— 备份、UI 中列出、可恢复。

多服务 env 管理

从 Pier UI 按服务覆盖 env vars 而无需编辑 YAML。对轮换密码或切换功能有用。

按服务聚合日志

从 Pier UI 查看栈中任何容器的日志。实时跟踪、搜索、导出。

一键 redeploy

推送镜像更新或更改 YAML —— 从 UI redeploy;Pier 处理容器重建和上线。

应用场景

多服务应用程序

Web + worker + Redis + Postgres + nginx —— 典型的 Rails / Django / Laravel / Next.js + worker 设置作为一个单元部署。

来自上游 Compose 文件的应用

许多开源项目将 docker-compose.yaml 作为其规范安装方法发布。将其粘贴到 Pier 中你就完成了。

本地开发 → 生产对等

你的本地 Compose 文件可以是你发布到 Pier 的相同(减去卷路径差异)。减少 dev/prod 漂移。

Sidecar 模式

服务 + sidecar(日志运输器、指标导出器、init 容器)捆绑在一个 Compose 栈中。

预连线捆绑

构建你自己的"服务 A + 伴侣 B + 伴侣 C"可重用捆绑并跨项目重新部署。

代码示例

简单的两服务应用(web + Postgres) yaml
services:
  web:
    image: my-org/myapp:1.4.0
    ports:
      - "3000:3000"
    environment:
      DATABASE_URL: postgres://app:secret@db:5432/myapp
    depends_on:
      - db
    restart: unless-stopped

  db:
    image: postgres:17-alpine
    environment:
      POSTGRES_DB: myapp
      POSTGRES_USER: app
      POSTGRES_PASSWORD: secret
    volumes:
      - db-data:/var/lib/postgresql/data
    restart: unless-stopped

volumes:
  db-data:
添加 Traefik 标签用于 HTTPS yaml
services:
  web:
    image: my-org/myapp:1.4.0
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.myapp.rule=Host(`app.example.com`)"
      - "traefik.http.routers.myapp.entrypoints=websecure"
      - "traefik.http.routers.myapp.tls.certresolver=letsencrypt"
      - "traefik.http.services.myapp.loadbalancer.server.port=3000"
    networks:
      - pier-traefik

networks:
  pier-traefik:
    external: true
Web + worker + Redis + Postgres yaml
services:
  web:
    image: my-org/myapp:1.4.0
    environment: &app-env
      REDIS_URL: redis://redis:6379
      DATABASE_URL: postgres://app:secret@db:5432/myapp
  worker:
    image: my-org/myapp:1.4.0
    command: ["bundle", "exec", "sidekiq"]
    environment: *app-env
  redis:
    image: redis:7-alpine
    volumes: ["redis-data:/data"]
  db:
    image: postgres:17-alpine
    environment:
      POSTGRES_DB: myapp
      POSTGRES_USER: app
      POSTGRES_PASSWORD: secret
    volumes: ["db-data:/var/lib/postgresql/data"]
volumes:
  redis-data:
  db-data:
Env-var 覆盖流(在 Pier UI 中) text
服务页面 → 环境 → 添加一行
  Key: API_KEY
  Value: sk-xxxxxxxxxxxx
  Apply → 重启容器
覆盖留在 Pier 中,从不编辑到你的 YAML

对比

vs Dockerfile(本目录) Dockerfile 构建并运行一个容器。Compose 一起编排多个容器。按范围选择。
vs 原生 Pier 模板 (postgresql, gitea, ...) 原生模板由 Pier 预连线和管理(备份、版本升级、扩展功能)。Compose 是"我有自己设计的多容器应用"的逃生舱口。
vs Kubernetes K8s 用于带自动扩展、滚动更新、服务网格的车队范围多主机编排。Compose 是单主机。当你需要该范围时使用 K8s;否则使用 Compose。
vs Docker 镜像(本目录) Docker 镜像运行一个预构建镜像。Compose 运行多个连接的容器。使用镜像用于最简单的单服务情况;Compose 用于任何多容器。

常见问题

支持哪个 Compose 版本?
Pier 支持 Compose 规范 v3+(现代统一版本)。无版本字段的 YAML 文件也可工作。
我可以使用 ${VAR} 插值吗?
是 —— Pier 在部署时将 env vars 注入 Compose YAML。在服务 env 选项卡中定义它们。
卷如何工作?
YAML 中的命名卷(例如 db-data)成为 Pier 管理的卷。绑定挂载到主机路径也工作但不太可移植。
Healthcheck?
Compose healthcheck 工作 —— Pier 在报告状态时尊重它们。在 YAML 中配置它们。
如何将 Compose 服务连接到 Traefik?
按 Traefik 文档将服务附加到外部 `pier-traefik` 网络并添加 `traefik.*` 标签。Pier 连接其余部分。
资源限制?
在 Compose YAML 中设置 `deploy.resources.limits.cpus` 和 `memory`。Pier 尊重它们。
如何更新?
在 Pier UI 中编辑 YAML(或 `docker-compose pull` 风格 —— 指向新镜像标签),单击 Redeploy。Pier 仅重新创建更改的服务。

相关服务

在你的 VPS 上部署

将 docker-compose.yaml 粘贴到 Pier 并发布多容器应用程序 —— web + worker + cache + queue + database,任何形状。Pier 配置栈,将其附加到 Traefik 以获取 HTTPS,管理持久卷,并公开与原生模板相同的生命周期控件(日志、env、重启、redeploy)。

部署此服务 →