Pglayers – 可堆叠的 PostgreSQL 扩展 Docker 层

Pglayers – 可堆叠的 PostgreSQL 扩展 Docker 层

Pglayers 将 PostgreSQL 扩展转化为可堆叠的 Docker 层

要点: Pglayers 将每个 PostgreSQL 扩展打包为独立的 Docker 层,使开发者只需堆叠所需的层即可构建自定义 PostgreSQL 镜像,从而降低构建复杂度并提升可复现性。


Pglayers 的功能

Pglayers 是一个开源工具,为每个 PostgreSQL 扩展创建 Docker 镜像并发布到公共容器仓库。每个镜像仅包含该扩展所需的文件,并声明对基础 PostgreSQL 镜像的 FROM 关系。通过拉取多个扩展镜像并让 Docker 的层缓存处理组合,用户即可获得包含所有所需扩展的最终 PostgreSQL 镜像,而无需编写自定义 Dockerfile。

为什么可堆叠的层很重要

  • 模块化构建: 添加或移除扩展不再需要编辑单一的 Dockerfile,只需添加或删除层引用。
  • 缓存效率: Docker 会复用构建中未改变的层,因此在添加新扩展后重新构建既快速又省资源。
  • 版本隔离: 每个扩展层都有版本标签,能够精确控制包含的扩展版本。
  • 团队协作: 团队可以共享同一基础镜像,个人开发者自行组合自己的层栈,而不会影响共享的基础镜像。

Docker Desktop 用户的快速入门

原始仓库侧重于命令行使用,但 Docker Desktop 用户可以通过 GUI 实现相同效果:

  1. 打开 Docker Desktop,进入 ImagesPull Image
  2. 拉取基础 PostgreSQL 镜像,例如 postgres:15
  3. 拉取所需的扩展层,例如 pglayers/postgis:3.4.0pglayers/pg_partman:4.7.0
  4. Containers / Apps 中,基于基础镜像创建新容器。
  5. Advanced Settings → Volumes 下,将扩展层作为附加镜像添加(Docker Desktop 会将其显示为可附加的 additional images)。
  6. 启动容器;扩展将在运行中的 PostgreSQL 实例中可用。

提供可视化的快速入门降低了对技术不熟悉、偏好 Docker Desktop GUI 而非 CLI 的用户的使用门槛。


社区反馈与路线图提示

  • 有评论者建议为项目添加域名以提升品牌形象,表明社区希望有更完善的公开形象。
  • 另一位用户表达了对该工具的迫切需求,确认它解决的问题真实且及时。
  • 关于支持 pgvectorscale(向量搜索扩展)的提问显示社区已经在考虑未来的扩展。为 pgvectorscale 等新兴扩展提供支持将扩大 Pglayers 在 AI 驱动工作负载中的吸引力。

入门指南

# 拉取基础 PostgreSQL 镜像
docker pull postgres:15

# 拉取扩展层,例如 PostGIS 3.4.0
docker pull ghcr.io/pglayers/postgis:3.4.0

# 运行一个堆叠了层的容器
docker run -d \
  --name mydb \
  -e POSTGRES_PASSWORD=secret \
  ghcr.io/pglayers/postgis:3.4.0

上述命令会拉取 PostGIS 层,该层本身 FROM postgres:15 基础镜像,并启动一个预装 PostGIS 的 PostgreSQL 实例。要添加更多扩展,只需拉取额外的层并在 docker run 命令中使用 --layer 标志(Pglayers 的未来版本将提供便捷的 CLI 用于多层组合)。


何时使用 Pglayers 与自定义 Dockerfile 的对比

场景 推荐做法
只需要少量维护良好的扩展并希望快速迭代 使用 Pglayers 层;Docker 会分别缓存每个扩展。
需要对 PostgreSQL 配置进行大量自定义或必须从源码编译扩展 编写自定义 Dockerfile 从源码构建;Pglayers 可能不覆盖此类特殊构建步骤。
CI/CD 流水线在每次提交时都构建镜像 Pglayers 可减少构建时间,因为未变更的扩展层会直接从仓库拉取,而不是重新构建。

未来方向

当前仓库仅托管了一小批流行扩展(PostGIS、pg_partman 等)。社区贡献可以将目录扩展至:

  • pgvectorscale 用于向量相似度搜索。
  • TimescaleDB 用于时序工作负载。
  • Citus 用于分布式 PostgreSQL。

为可用层、版本标签和兼容性矩阵提供网页 UI,进一步降低入门门槛。


结论

Pglayers 展示了 Docker 分层文件系统的实用用例,解决了在容器化环境中管理 PostgreSQL 扩展的常见 DevOps 痛点。通过将每个扩展视为可复用的 Docker 镜像,开发者获得了模块化、构建更快以及更清晰的版本控制。项目早期的社区兴趣和建议——如 GUI 快速入门指南以及对新扩展的支持——表明其具备更广泛采纳的强大潜力。

Sources