Docker 构建、镜像和标签
Apache Superset 社区广泛使用 Docker 进行 Superset 的开发、发布和生产部署。本页详细介绍了我们的 Docker 构建和标签命名方案,以帮助用户了解我们的产品。
镜像通过 GitHub Actions 构建并推送到 Superset Docker Hub 仓库。不同集合的镜像在不同时间构建和/或发布:
- 已发布的版本 (
release
):使用如5.0.0
和latest
标签发布。 - 拉取请求迭代 (
pull_request
):对于每个拉取请求,我们会积极构建 docker 以验证构建,但出于安全原因,我们不会发布这些镜像,我们只是进行docker build --load
。 - 合并到主分支 (
push
):产生新的 SHA,标签以master
为前缀,表示最新的master
版本。
构建预设
我们有一组构建“预设”,每个预设代表构建参数的组合,主要指向构建的不同目标层和/或基础镜像。
以下是通过 supersetbot docker
工具公开的构建预设:
lean
:默认的 Docker 镜像,包括前端和后端。没有构建预设的标签是 lean 构建(例如:latest
、5.0.0
、4.1.2
等)。lean
构建不包含数据库驱动,这意味着您需要自行安装。这适用于分析数据库以及元数据数据库。您可能需要根据您为安装选择的元数据数据库,分层安装mysqlclient
或psycopg2-binary
,以及连接到您的分析数据库所需的驱动程序。dev
:用于开发,包含无头浏览器、开发相关工具和 root 访问权限。这包括一些常用的数据库驱动,如mysqlclient
、psycopg2-binary
以及其他用于开发/CI 的驱动。py311
,例如 Py311:与 lean 类似,但使用不同的 Python 版本(本例中为 3.11)。ci
:用于某些 CI 工作负载。websocket
:用于支持高级功能的 Superset 集群。dockerize
:由 Helm 在 initContainers 中使用,用于等待数据库依赖项可用。
主要标签示例
latest
:最新的官方发布构建latest-dev
:最新官方发布构建的-dev
镜像,带有无头浏览器和 root 访问权限。master
:master
分支的最新构建,默认为 lean 构建预设。master-dev
:与master
类似,但包含无头浏览器和 root 访问权限。pr-5252
:PR 5252 中的最新提交。30948dc401b40982cb7c0dbf6ebbe443b2748c1b-dev
:此特定 SHA 的构建,可能来自master
合并或发布。websocket-latest
:用于 Superset 集群的 WebSocket 镜像。
有关构建矩阵和标签约定,请查看 supersetbot docker 子命令和 docker.yml GitHub action。
构建您自己的生产 Docker 镜像
每个 Superset 部署都需要一套自己的驱动程序,具体取决于数据仓库等,因此我们建议用户通过扩展 lean
镜像来构建自己的 Docker 镜像。
这是一个示例 Dockerfile。请按照行内注释对其进行自定义,以满足您所需的 Superset 版本和数据库驱动程序。注释中还指出,必须在您的配置文件中启用某个功能标志。
您可以使用 docker build -t mysuperset:latest .
或 docker build -t ourcompanysuperset:5.0.0 .
来构建镜像。
# change this to apache/superset:5.0.0 or whatever version you want to build from;
# otherwise the default is the latest commit on GitHub master branch
FROM apache/superset:master
USER root
# Set environment variable for Playwright
ENV PLAYWRIGHT_BROWSERS_PATH=/usr/local/share/playwright-browsers
# Install packages using uv into the virtual environment
# Superset started using uv after the 4.1 branch; if you are building from apache/superset:4.1.x or an older version,
# replace the first two lines with RUN pip install \
RUN . /app/.venv/bin/activate && \
uv pip install \
# install psycopg2 for using PostgreSQL metadata store - could be a MySQL package if using that backend:
psycopg2-binary \
# add the driver(s) for your data warehouse(s), in this example we're showing for Microsoft SQL Server:
pymssql \
# package needed for using single-sign on authentication:
Authlib \
# openpyxl to be able to upload Excel files
openpyxl \
# Pillow for Alerts & Reports to generate PDFs of dashboards
Pillow \
# install Playwright for taking screenshots for Alerts & Reports. This assumes the feature flag PLAYWRIGHT_REPORTS_AND_THUMBNAILS is enabled
# That feature flag will default to True starting in 6.0.0
# Playwright works only with Chrome.
# If you are still using Selenium instead of Playwright, you would instead install here the selenium package and a headless browser & webdriver
playwright \
&& playwright install-deps \
&& PLAYWRIGHT_BROWSERS_PATH=/usr/local/share/playwright-browsers playwright install chromium
# Switch back to the superset user
USER superset
CMD ["/app/docker/entrypoints/run-server.sh"]
Dockerfile 中的主要 ARG
BUILD_TRANSLATIONS
:是否将翻译构建到镜像中。对于前端构建,这会告诉 webpack 从moment-timezone
库中剥离除en
之外的所有语言环境。对于后端,这会跳过编译*.po
翻译文件。DEV_MODE
:是否跳过前端构建,这用于我们的docker-compose
开发设置,我们在此设置中挂载本地卷并使用webpack
以--watch
模式构建,这意味着当您更改本地文件系统中的代码时,webpack 会从用于此目的的 docker 镜像中不断重建前端。此 ARG 使得初始docker-compose
构建花费更少的时间和资源。INCLUDE_CHROMIUM
:是否在后端构建中包含 chromium,以便可以将其用作无头浏览器,用于“警报和报告”以及缩略图生成相关的工作负载。INCLUDE_FIREFOX
:同上,但针对 firefox。PY_VER
:指定 python 后端的基础镜像,如果您不从事向前或向后兼容性工作,我们不建议更改此设置。
缓存
为了加速构建,我们遵循 Docker 最佳实践并使用 apache/superset-cache
。
关于数据库驱动
我们的 docker 镜像提供的数据库驱动支持很少或根本没有,因为每个环境都需要不同的驱动,而且维护一个支持多种数据库的构建将是既具有挑战性(数十种数据库、Python 驱动和操作系统依赖)又效率低下(更长的构建时间、更大的镜像、更低的层缓存命中率等)。
对于生产用例,我们建议您派生我们的 lean
镜像并为您需要的数据库添加数据库支持。
关于支持不同平台(即 arm64 和 amd64)
目前所有自动化构建都是多平台的,支持 linux/arm64
和 linux/amd64
。这使得 helm
和 docker compose
等高级构造能够指向这些镜像,并有效地实现多平台。
拉取请求和 master 构建是每个平台一个镜像,这样它们可以并行化,并且这些构建的构建矩阵更稀疏,因为我们不需要在每个平台上构建每个构建预设,并且通常可以在这里更有选择性。对于这些构建,我们会在适用的情况下为标签添加 -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 生态系统中的兼容性会较差。