跳至主要内容
在 GitHub 上编辑此页面

Docker 构建、镜像和标签

Apache Superset 社区广泛使用 Docker 来开发、发布和生产 Superset。本页详细介绍了我们的 Docker 构建和标签命名方案,以帮助用户浏览我们的产品。

镜像使用 GitHub Actions 构建并推送到 Superset Docker Hub 仓库。不同的镜像集在不同的时间构建和/或发布。

  • 已发布的版本 (release):使用诸如 3.0.0latest 之类的标签发布。
  • 拉取请求迭代 (pull_request):对于每个拉取请求,在我们积极构建 Docker 以验证构建时,出于安全原因,我们不会发布这些镜像,我们只是 docker build --load
  • 合并到主分支 (push):导致新的 SHA,并使用 master 前缀的标签来表示最新的 master 版本。

构建预设

我们有一组构建“预设”,每个预设代表构建参数的组合,主要指向构建的不同目标层和/或基础镜像。

以下是通过 build_docker.py 脚本公开的构建预设。

  • lean:默认的 Docker 镜像,包括前端和后端。没有构建预设的标签是精简构建,例如 latest
  • dev:用于开发,带有一个无头浏览器、开发相关实用程序和 root 访问权限。
  • py311,例如 Py311:类似于精简构建,但使用不同的 Python 版本(在本例中为 3.11)。
  • ci:用于某些 CI 工作负载。
  • websocket:用于支持高级功能的 Superset 集群。
  • dockerize:由 Helm 使用。

关键标签示例

  • latest:最新的官方发布构建。
  • latest-dev:最新的官方发布构建的 -dev 镜像,带有一个无头浏览器和 root 访问权限。
  • master:来自 master 分支的最新构建,隐式地是精简构建预设。
  • master-dev:类似于 master,但包括一个无头浏览器和 root 访问权限。
  • pr-5252:PR 5252 中的最新提交。
  • 30948dc401b40982cb7c0dbf6ebbe443b2748c1b-dev:此特定 SHA 的构建,可以来自 master 合并或发布。
  • websocket-latest:用于 Superset 集群的 WebSocket 镜像。

有关构建矩阵和标签约定的见解或修改,请查看 build_docker.py 脚本和 docker.yml GitHub 操作。

缓存

为了加速构建,我们遵循 Docker 最佳实践并使用 apache/superset-cache

关于数据库驱动程序

我们的 Docker 镜像几乎没有或根本没有数据库驱动程序支持,因为每个环境都需要不同的驱动程序,维护一个具有广泛数据库支持的构建既具有挑战性(数十个数据库、Python 驱动程序和操作系统依赖项),又效率低下(更长的构建时间、更大的镜像、更低的层缓存命中率等)。

对于生产用例,我们建议您派生我们的 lean 镜像并为所需的数据库添加数据库支持。

关于支持不同的平台(即 arm64 和 amd64)

目前所有自动构建都是多平台的,支持 linux/arm64linux/amd64。这使得 helm 和 docker-compose 等更高级别的结构能够指向这些镜像,并且也能够有效地成为多平台的。

拉取请求和主构建是每个平台一个镜像,这样它们可以并行化,并且这些构建的构建矩阵更加稀疏,因为我们不需要在每个平台上构建每个构建预设,并且通常可以在这里更加选择性。对于这些构建,我们在适用的情况下将标签后缀为 -arm

使用 Apple 硅

Apple 当前一代的计算机使用基于 ARM 的 CPU,在 MAC 上运行的 Docker 似乎需要 linux/arm64/v8(至少有一位用户的 M2 是这样配置的)。将环境变量 DOCKER_DEFAULT_PLATFORM 设置为 linux/amd64 似乎在利用和构建这里提供的 Superset 构建方面起作用。

export DOCKER_DEFAULT_PLATFORM=linux/amd64

据推测,linux/arm64/v8 将更适合此代芯片,但与 ARM 生态系统中的其他芯片的兼容性较差。