Skip to main content
Edit this page on GitHub

使用 Docker Compose



caution

由于 docker compose 主要设计用于在 单个主机 上运行一组容器,并且无法支持 高可用性 的要求,我们不支持也不推荐使用我们的 docker compose 结构来支持生产类型的用例。对于单主机环境,我们建议使用 minikube 并结合我们的 在 Kubernetes 上安装 文档。

如我们在 快速入门指南 中提到的,在 Linux 或 Mac OSX 计算机上使用 Docker Compose 是尝试 Superset 本地的最快方式。Superset 不正式支持 Windows。这也是快速启动一个完全功能的 开发环境 的最简单方法。

请注意,我们有三种主要的支持方式来运行 docker compose

  1. docker-compose.yml: 用于交互式开发,我们在这里挂载了包含前端/后端文件的本地文件夹,您可以编辑这些文件并在应用程序中实时体验您所做的更改。
  2. docker-compose-non-dev.yml 我们在这里基于本地分支构建一个更不可变的镜像,并运行所有必需的镜像。在您启动时,本地分支的更改将会反映出来,但在 up 时对代码的更改不会反映在应用程序中。
  3. docker-compose-image-tag.yml 我们在这里从 docker-hub 获取一个镜像,例如 3.0.0 版本,并启动它以便您可以尝试。这里本地分支的内容对正在运行的内容没有影响,我们只是从 docker-hub 获取并运行预构建的镜像。为了使 docker compose 与它启动的 Postgres 镜像一起工作,您需要指向一个带有 -dev 后缀的 TAG,例如 export TAG=4.0.0-devexport TAG=3.0.0-dev,默认情况下是 latest-dev。这是因为 dev 构建恰好打包了连接到作为 docker compose 构建一部分启动的 Postgres 数据库所需的 psycopg2-binary

在设置任一要求后,更多关于这两种方法的内容。

要求

请注意,本文档假设您已安装 Dockergit。另请注意,我们过去使用 docker-compose,但该工具正在被弃用,因此我们现在使用 docker compose

1. 克隆 Superset 的 GitHub 仓库

在终端中使用以下命令 克隆 Superset 的仓库

git clone --depth=1  https://github.com/apache/superset.git

一旦该命令成功完成,您应该会在当前目录中看到一个新的 superset 文件夹。

2. 通过 Docker Compose 启动 Superset

首先假设您熟悉 docker compose 的机制。这里我们通常会提到 docker compose up,尽管在某些情况下您可能希望使用 docker compose pull 强制检查更新的远程镜像,使用 docker compose build 强制构建,或使用 docker compose build --pull 强制在最新的基础镜像上构建。但在大多数情况下,简单的 up 命令应该就足够了。有关更多信息,请参阅 docker compose 文档。

选项 #1 - 用于交互式开发环境

docker compose up
tip

在开发模式下运行时,superset-node 容器需要完成资产构建,以便 UI 正确渲染。如果您只想尝试 Superset 而不进行任何代码更改,请按照下面文档中 production 或特定版本的步骤操作。

tip

默认情况下,我们在这里挂载本地 superset-frontend 文件夹并运行 npm install 以及 npm run dev,这会触发 webpack 编译/打包前端代码。根据您的本地设置,特别是如果您内存少于 16GB,这些操作可能会非常慢。在这种情况下,我们建议您将环境变量 BUILD_SUPERSET_FRONTEND_IN_DOCKER 设置为 false,并在本地终端中运行这些操作。只需触发 npm i && npm run dev,这应该会快得多。

选项 #2 - 从本地分支构建一组不可变镜像

docker compose -f docker-compose-non-dev.yml up

选项 #3 - 启动一个官方发布版本

export TAG=3.1.1
docker compose -f docker-compose-image-tag.yml up

这里可以使用各种发布标签、github SHA 和最新的 master 通过 TAG 环境变量引用。请参阅与 docker 相关的文档,了解更多您可以从 Docker Hub 指向的现有标签。

docker compose 提示与配置

caution

属于 Superset 实例的所有内容 - 图表、仪表板、用户等 - 都存储在 其元数据数据库。在生产环境中,应备份此数据库。默认的 Docker Compose 安装会将数据存储在 Docker 卷中的 PostgreSQL 数据库中,该数据库不会被备份。

再次强调,请勿将此用于生产环境

你应该会看到容器在你的机器上启动时产生的日志输出流。一旦输出速度减慢,你本地机器上应该就运行着一个 Superset 实例了!为了避免在后续运行时出现大量文本,可以在 docker compose up 命令末尾添加 -d 选项。

进一步配置

以下内容适用于希望在 Docker Compose 中配置 Superset 运行方式的用户;否则,你可以跳到下一节。

你可以按照 docker/README.md 中提到的步骤安装额外的 Python 包并应用配置覆盖。

请注意,docker/.envdocker compose 使用的所有 Docker 镜像设置了默认环境变量,而 docker/.env-local 可以用来覆盖这些默认值。还要注意,docker/.env-local 在我们的 .gitignore 中被引用,以防止开发者将潜在的敏感配置提交到仓库中。

一个重要的变量是 SUPERSET_LOAD_EXAMPLES,它决定了 superset_init 容器是否会将示例数据和可视化内容填充到元数据数据库中。这些示例对于学习和测试 Superset 很有帮助,但对于有经验的用户和生产部署来说是不必要的。加载过程有时可能需要几分钟和大量的 CPU,因此你可能希望在资源受限的设备上禁用它。

对于通常在 PYTHONPATH 中的 superset_config.py 文件中管理的更高级或动态配置,可以通过提供一个 docker/pythonpath_dev/superset_config_docker.py 来实现,该文件将被 git 忽略(防止你将本地配置提交/推送回仓库)。其机制在 docker/pythonpath_dev/superset_config.py 中,你可以看到逻辑运行了 from superset_config_docker import *

note

用户通常希望从 Superset 连接到其他数据库。目前,最简单的方法是修改 docker-compose-non-dev.yml 文件,并将你的数据库添加为其他服务依赖的服务(通过 x-superset-depends-on)。其他人尝试在 Superset 服务上设置 network_mode: host,但这些通常会破坏安装,因为配置需要使用 Docker Compose DNS 解析器来解析服务名称。如果你有好的解决方案,请告诉我们!

note

Superset 使用 Scarf Gateway 收集遥测数据。了解不同 Superset 版本的安装数量有助于项目决定补丁和长期支持。Scarf 会清除个人身份信息(PII),并仅提供聚合统计数据。

要选择退出通过 Scarf Gateway 下载的包的数据收集(针对基于 docker compose 的安装),请编辑你的 docker-compose.ymldocker-compose-non-dev.yml 文件中的 x-superset-image: 行,将 apachesuperset.docker.scarf.sh/apache/superset 替换为 apache/superset,以直接从 Docker Hub 拉取镜像。

要禁用 Scarf 遥测像素,请在你的终端和/或 docker/.env 文件中将 SCARF_ANALYTICS 环境变量设置为 False

3. 登录 Superset

你的本地 Superset 实例还包括一个用于存储数据的 Postgres 服务器,并且已经预加载了一些随 Superset 提供的示例数据集。你现在可以通过访问 http://localhost:8088 在浏览器中访问 Superset。请注意,许多浏览器现在默认使用 https - 如果你的浏览器是其中之一,请确保它使用 http

使用默认的用户名和密码登录:

username: admin
password: admin

4. 将 Superset 连接到本地数据库实例

当使用 dockerdocker compose 运行 Superset 时,它会在自己的 Docker 容器中运行,就像 Superset 完全运行在另一台机器上一样。因此,尝试使用主机名 localhost 连接到本地数据库将无法工作,因为 localhost 指的是 Superset 运行的 Docker 容器,而不是你的实际主机。幸运的是,Docker 提供了一种从容器内部访问主机机器网络资源的简单方法,我们将利用这一功能来连接到我们的本地数据库实例。

这里的说明是关于从 Superset(运行在其 Docker 容器中)连接到 PostgreSQL(运行在你的主机机器上)。其他数据库可能会有稍微不同的配置,但要点是相同的,归结为两个步骤 -

  1. (Mac用户可以跳过此步骤) 配置本地postgresql/数据库实例以接受公共传入连接。默认情况下,postgresql仅允许来自localhost的传入连接,而在Docker中,除非使用--network=host,否则localhost在主机和Docker容器中分别指代不同的端点。允许postgresql接受来自Docker的连接涉及对postgresql.confpg_hba.conf文件进行一行更改;您可以在网上轻松找到针对您的操作系统/PG版本的实用链接来完成此任务。对于Docker,只需将IP 172.0.0.0/8列入白名单而不是*就足够了,但无论如何,您都被_警告_,在生产数据库中这样做_可能_会有灾难性的后果,因为您正在向公共互联网开放您的数据库。
  2. 尝试使用host.docker.internal(Mac用户,Ubuntu)或172.18.0.1(Linux用户)作为主机名来连接数据库,而不是使用localhost。这是Docker的内部细节——在Mac系统中,Docker Desktop为host.docker.internal主机名创建了一个DNS条目,该条目解析为主机机器的正确地址,而在Linux中则不是这样(至少默认情况下不是)。如果这两个主机名都不起作用,那么您可能需要找到要使用的准确主机名,为此您可以执行ifconfigip addr show,并查看docker0接口的IP地址,该接口必须由Docker为您创建。或者,如果您甚至看不到docker0接口,请尝试(如果需要,使用sudo)docker network inspect bridge,并查看是否有"Gateway"的条目,并记下IP地址。