跳至主要内容
在 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 获取并运行预构建的镜像。为了使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
提示

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

提示

默认情况下,我们在这里挂载本地 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 提示和配置

注意

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

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

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

进一步配置

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

您可以按照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 *

注意

用户通常希望从 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 的安装收集的数据,请编辑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 附带的一些示例数据集。您现在可以通过访问https://127.0.0.1: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. 不要使用localhost,而尝试使用host.docker.internal(Mac 用户,Ubuntu)或172.18.0.1(Linux 用户)作为主机名来尝试连接到数据库。这是 Docker 的内部细节——发生的情况是,在 Mac 系统中,Docker Desktop 会为主机名host.docker.internal 创建一个 dns 条目,该条目解析为主机的正确地址,而 Linux 中则不是这样(至少默认情况下)。如果这两个主机名都不起作用,那么您可能需要找到要使用的确切主机名,为此,您可以执行ifconfigip addr show 并查看docker0 接口的 IP 地址,该接口应该是 Docker 为您创建的。或者,如果您甚至没有看到docker0 接口,请尝试(如果需要使用 sudo)docker network inspect bridge 并查看是否有"Gateway" 条目,并记下 IP 地址。