Docker Compose
从 Compose YAML 部署多容器栈 —— Pier 处理其余部分。
将 docker-compose.yaml 粘贴到 Pier 并发布多容器应用程序 —— web + worker + cache + queue + database,任何形状。Pier 配置栈,将其附加到 Traefik 以获取 HTTPS,管理持久卷,并公开与原生模板相同的生命周期控件(日志、env、重启、redeploy)。
使用 Pier 部署
- 1 打开 Pier 控制台,点击 Add service。
- 2 从模板列表中选择 Docker Compose。
- 3 选择版本、设置服务名称,Pier 会自动配置容器、存储和端口。
- 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=true、
traefik.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"可重用捆绑并跨项目重新部署。
代码示例
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: 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 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: 服务页面 → 环境 → 添加一行
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 版本?
我可以使用 ${VAR} 插值吗?
卷如何工作?
Healthcheck?
如何将 Compose 服务连接到 Traefik?
资源限制?
如何更新?
相关服务
在你的 VPS 上部署
将 docker-compose.yaml 粘贴到 Pier 并发布多容器应用程序 —— web + worker + cache + queue + database,任何形状。Pier 配置栈,将其附加到 Traefik 以获取 HTTPS,管理持久卷,并公开与原生模板相同的生命周期控件(日志、env、重启、redeploy)。
部署此服务 →