Docker 构建、镜像和标签
Apache Superset 社区广泛使用 Docker 来开发、发布和生产 Superset。本页详细介绍了我们的 Docker 构建和标签命名方案,以帮助用户浏览我们的产品。
镜像使用 GitHub Actions 构建并推送到 Superset Docker Hub 仓库。不同的镜像集在不同的时间构建和/或发布。
- 已发布的版本 (
release
):使用诸如3.0.0
和latest
之类的标签发布。 - 拉取请求迭代 (
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/arm64
和 linux/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 生态系统中的其他芯片的兼容性较差。