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

使用 Docker Compose



注意

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

如我们的 快速入门指南 中所述,在 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 获取并运行预构建的镜像

在设置任一方法的要求后,将详细介绍这两种方法。

要求

请注意,本文档假设您已安装 Dockerdocker-composegit

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
提示

在开发模式下运行时,superset-node 容器需要完成构建资产才能使 UI 正确呈现。如果您只想尝试使用 Superset 而不进行任何代码更改,请按照下面针对 production 或特定版本记录的步骤操作。

提示

默认情况下,我们在此挂载本地 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 Hub 指向的现有标签的更多信息,请参阅与 docker 相关的文档。

docker-compose 提示和配置

注意

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

再次强调,**不要将此用于生产环境**

您应该看到从在您的机器上启动的容器中流出的日志输出。此输出变慢后,您应该在本地机器上拥有一个正在运行的 Superset 实例!为了避免在将来的运行中出现大量文本,请在 docker compose up 命令的末尾添加 -d 选项。

进一步配置

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

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

请注意,docker/.env 设置了 docker-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 *

注意

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

注意

Superset 使用 Scarf Gateway 收集遥测数据。了解不同 Superset 版本的安装数量可以帮助项目做出有关修补和长期支持的决策。Scarf 会清除个人身份信息 (PII),只提供汇总统计信息。

要选择退出通过 Scarf Gateway 下载的软件包的此数据收集,请编辑 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 的 Web 浏览器访问 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,并查看 Docker 为您创建的docker0接口的 IP 地址。或者,如果您甚至没有看到docker0接口,请尝试(如果需要,使用 sudo)docker network inspect bridge,查看是否有"Gateway"条目,并记下 IP 地址。