跳到主要内容

使用 Docker Compose



注意

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

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

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

  1. compose.yml: 用于交互式开发,我们将您的本地文件夹与前端/后端文件进行挂载,您可以编辑这些文件并实时体验应用程序中的更改
  2. compose-non-dev.yml 我们仅根据本地分支构建一个更不可变的镜像,并运行所有必需的镜像。在您启动此镜像时,本地分支中的更改将得到体现,但在 up 期间对代码的更改将不会在应用程序中得到体现
  3. compose-image-tag.yml 我们从 Docker Hub 获取一个镜像,例如 5.0.0 版本的镜像,然后将其启动以便您试用。在这里,本地分支中的内容对正在运行的内容没有影响,我们只是从 Docker Hub 获取并运行预构建的镜像。为了使 docker compose 能够与它启动的 Postgres 镜像一起工作,您需要指向一个带有 -dev 后缀的 TAG,例如 export TAG=5.0.0-devexport TAG=4.1.2-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 - 用于交互式开发环境

# The --build argument insures all the layers are up-to-date
docker compose up --build
提示

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

提示

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

提示

有时,您的 npm 相关状态可能会变得混乱,从 superset-frontend/ 文件夹运行 npm run prune 将删除各种包的 node_module/ 文件夹,帮助您重新开始。在 docker compose 的上下文中,在运行 docker compose up 之前设置 export NPM_RUN_PRUNE=true 将在 docker 内部触发此操作。这会减慢启动速度,但会解决各种 npm 相关问题。

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

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

选项 #3 - 启动官方版本

# Set the version you want to run
export TAG=5.0.0
# Fetch the tag you're about to check out (assuming you shallow-cloned the repo)
git fetch --depth=1 origin tag $TAG
# Could also fetch all tags too if you've got bandwidth to spare
# git fetch --tags
# Checkout the corresponding git ref
git checkout $TAG
# Fire up docker compose
docker compose -f compose-image-tag.yml up

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

注意

对于选项 #2 和 #3,我们建议从 git 仓库中检出发布标签(即:git checkout 5.0.0),以获得更可靠的结果。这确保了 docker-compose.*.yml 配置以及挂载的 docker/ 脚本与您希望启动的镜像保持同步。

docker compose 技巧与配置

注意

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

再次强调,默认情况下,DOCKER-COMPOSE 安装不适用于生产环境。

您应该会看到机器上正在启动的容器的日志输出流。一旦此输出变慢,您的本地机器上就应该有一个正在运行的 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 连接到其他数据库。目前,最简单的方法是修改 compose-non-dev.yml 文件,并将您的数据库添加为其他服务依赖的服务(通过 x-superset-depends-on)。其他人尝试在 Superset 服务上设置 network_mode: host,但这通常会破坏安装,因为配置需要使用 Docker Compose DNS 解析器来解析服务名称。如果您有更好的解决方案,请告诉我们!

注意

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

要选择退出您的基于 Docker Compose 的安装通过 Scarf Gateway 下载的包的数据收集,请编辑 compose.ymlcompose-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(在您的主机上运行)。其他数据库的配置可能略有不同,但要点是相同的,归结为 2 个步骤 -

  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 地址。

4. 构建与否

当运行 docker compose up 时,Docker 会在后台构建所需的内容,但如果资产已存在,可能会使用 Docker 缓存。在 docker compose up 之前运行 docker compose build 或等效的快捷方式 docker compose up --build 可确保您的 Docker 镜像与仓库中的定义匹配。这仅适用于主要的 compose.yml 文件(默认),不适用于上面定义的替代方法。