跳至主要内容
在 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 镜像,包括前端和后端。没有构建预设的标签都是 lean 构建(例如:latest4.0.03.0.0 等)。lean 构建不包含数据库驱动程序,这意味着您需要安装自己的驱动程序。这适用于分析数据库**和元数据数据库**。您可能需要根据您为安装选择的元数据数据库,以及连接到您的分析数据库所需的驱动程序,分别安装 mysqlclientpsycopg2-binary
  • dev: 用于开发,包含无头浏览器、开发相关实用程序和 root 访问权限。这包括一些常用的数据库驱动程序,如 mysqlclientpsycopg2-binary 以及一些用于开发/CI 的其他驱动程序。
  • py311,例如,Py311: 与 lean 类似,但使用不同的 Python 版本(本例中为 3.11)。
  • ci: 用于某些 CI 工作负载。
  • websocket: 用于支持高级功能的 Superset 集群。
  • dockerize: 由 Helm 使用。

关键标签示例

  • latest: 最新官方发布版本构建
  • latest-dev: 最新官方发布版本构建的 -dev 镜像,包含无头浏览器和 root 访问权限。
  • master: 来自 master 分支的最新构建,隐含 lean 构建预设
  • master-dev: 与 master 类似,但包含无头浏览器和 root 访问权限。
  • pr-5252: PR 5252 中的最新提交。
  • 30948dc401b40982cb7c0dbf6ebbe443b2748c1b-dev: 此特定 SHA 的构建,可能来自 master 合并或发布。
  • websocket-latest: 用于 Superset 集群的 WebSocket 镜像。

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

Dockerfile 中的关键 ARGs

  • BUILD_TRANSLATIONS: 是否将翻译构建到镜像中。对于前端构建,这告诉 webpack 从 moment-timezone 库中剔除所有除 en 之外的语言环境。对于后端,这将跳过编译 *.po 翻译文件
  • DEV_MODE: 是否跳过前端构建,这在我们 docker-compose 开发设置中使用,我们挂载本地卷并使用 webpack--watch 模式下构建,这意味着当您更改本地文件系统中的代码时,来自用于此目的 docker 镜像中的 webpack 将不断重新构建前端。此 ARG 使初始 docker-compose 构建所需的时间和资源更少
  • INCLUDE_CHROMIUM: 是否在后端构建中包含 chromium,以便将其用作与“警报和报告”以及缩略图生成相关的无头浏览器
  • INCLUDE_FIREFOX: 与上述相同,但针对 firefox
  • PY_VER: 指定 python 后端的基础镜像,如果您不处理向前或向后兼容性,我们建议不要更改此设置

缓存

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

关于数据库驱动程序

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

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

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

目前所有自动构建都是多平台的,同时支持 linux/arm64linux/amd64。这使得 helmdocker compose 之类的高级构造能够指向这些镜像,并且本身也成为多平台的。

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

使用苹果硅

苹果公司当前一代的计算机使用 ARM 架构的 CPU,在 MAC 上运行的 Docker 似乎需要 linux/arm64/v8(至少一个用户的 M2 是这样配置的)。将环境变量 DOCKER_DEFAULT_PLATFORM 设置为 linux/amd64 似乎在利用和构建此处提供的 Superset 构建方面发挥作用。

export DOCKER_DEFAULT_PLATFORM=linux/amd64

可以假设,linux/arm64/v8 会更适合这一代芯片,但与 ARM 生态系统中的其他芯片的兼容性较差。