自定义 Docker Compose

Docker Compose 安装指南介绍了如何使用 docker-compose.yml 安装 Data FlowSkipperKafkaMariaDB。您可以借助提供的扩展 docker-compose 文件来扩展此基本配置。例如,如果您想使用 RabbitMQPostgreSQL 并使用 InfluxDB 启用 Data Flow 进行监控,则可以组合一些提供的 docker-compose 扩展文件

docker-compose -f ./docker-compose.yml \
               -f ./docker-compose-rabbitmq.yml \
               -f ./docker-compose-postgres.yml \
               -f ./docker-compose-influxdb.yml up
docker-compose -f .\docker-compose.yml -f .\docker-compose-rabbitmq.yml -f .\docker-compose-postgres.yml -f .\docker-compose-influxdb.yml up

以下部分详细介绍了提供的扩展 docker-compose 文件,您可以在 docker-compose.yml 的基础上应用这些文件。当您使用多个 docker-compose 文件时,它们将按照其定义的顺序应用。

Prometheus 和 Grafana

docker-compose-prometheus.yml 文件扩展了 docker-compose.yml 中的默认配置,以启用使用 Prometheus 和 Grafana 进行流和任务监控

wget -O docker-compose-prometheus.yml https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/main/src/docker-compose/docker-compose-prometheus.yml
docker-compose -f ./docker-compose.yml -f ./docker-compose-prometheus.yml up
curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/main/src/docker-compose/docker-compose-prometheus.yml -o docker-compose-prometheus.yml
docker-compose -f .\docker-compose.yml -f .\docker-compose-prometheus.yml up

除了基本服务外,扩展配置还添加了 PrometheusPrometheus-RSocket-Proxy 用于服务发现,并添加了带有预构建流和任务仪表板的 Grafana

docker-compose-prometheus.yml 配置将以下容器端口暴露给主机:

主机端口 容器端口 描述
9090 9090 Prometheus 服务器端口。使用它可以在 https://127.0.0.1:9090 访问 Prometheus Web 控制台
3000 3000 Grafana 服务器端口。使用它可以访问 Grafana 仪表板 https://127.0.0.1:3000
9096 9096 Prometheus RSocket 代理(Spring Boot)服务器端口
7001 7001 Prometheus RSocket 代理 TCP 接受端口。您可以将流和任务应用程序配置为使用此端口向代理报告其指标。
8086 8086 Prometheus RSocket 代理 WebSocket 端口。您可以将流和任务应用程序配置为使用此端口向代理报告其指标。

docker-compose-prometheus.yml 文件需要现有的 Docker 镜像(springcloud/spring-cloud-dataflow-prometheus-localspringcloud/spring-cloud-dataflow-grafana-prometheus),其标签与配置的 DATAFLOW_VERSION 值匹配。

InfluxDB 和 Grafana

docker-compose-influxdb.yml 启用使用 InfluxDBGrafana 进行流和任务监控,并提供预构建的流和任务仪表板

wget -O docker-compose-influxdb.yml https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/main/src/docker-compose/docker-compose-influxdb.yml
docker-compose -f ./docker-compose.yml -f ./docker-compose-influxdb.yml up
curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/main/src/docker-compose/docker-compose-influxdb.yml -o docker-compose-influxdb.yml
docker-compose -f .\docker-compose.yml -f .\docker-compose-influxdb.yml up

docker-compose-influxdb.yml 配置将以下容器端口暴露给主机:

主机端口 容器端口 描述
8086 8086 Influx DB 服务器端口。使用 https://127.0.0.1:8086 连接到 Influx DB。
3000 3000 Grafana 服务器端口。使用它可以访问 Grafana 仪表板 https://127.0.0.1:3000

docker-compose-influxdb.yml 需要一个现有的 Docker 镜像(springcloud/spring-cloud-dataflow-grafana-influxdb),其标签与配置的 DATAFLOW_VERSION 值匹配。

Wavefront

docker-compose-wavefront.yml 启用使用 Wavefront 进行流和任务监控,并提供预构建的流和任务仪表板。

Wavefront 是一种 SaaS 产品,您需要先创建一个用户帐户,并使用该帐户设置 WAVEFRONT_KEYWAVEFRONT_URI 环境变量,如本节后面所述。

wget -O docker-compose-wavefront.yml https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/main/src/docker-compose/docker-compose-wavefront.yml
docker-compose -f ./docker-compose.yml -f ./docker-compose-wavefront.yml up
curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/main/src/docker-compose/docker-compose-wavefront.yml -o docker-compose-wavefront.yml
docker-compose -f .\docker-compose.yml -f .\docker-compose-wavefront.yml up

您可以使用以下环境变量来配置 docker-compose-wavefront.yml

变量名称 默认值 描述
WAVEFRONT_KEY (必填) Wavefront 用户 API 密钥
WAVEFRONT_URI https://vmware.wavefront.com Wavefront 入口 URI
WAVEFRONT_SOURCE scdf-docker-compose 此数据流安装中指标的 Wavefront 唯一标识符。

您可以使用 Wavefront 的“浏览/来源”菜单查找来自 WAVEFRONT_SOURCE 来源的指标。

Zipkin 服务器

docker-compose-zipkin.yml 启用流式分布式跟踪收集和使用 Zipkin 服务器 进行可视化。在 https://127.0.0.1:9411/zipkin 打开 Zipkin 的 UI,以查找从已部署的流应用程序收集的分布式跟踪。

所有 Spring Cloud 流应用程序 都预先配置了 Spring Cloud Sleuth,以支持消息分布式跟踪。跟踪信息被发送到外部系统以可视化延迟。Spring Cloud Sleuth 支持 OpenZipkin 兼容系统,例如 Zipkin 服务器Wavefront 分布式跟踪

默认情况下,Zipkin 分布式跟踪处于禁用状态。使用 spring sleuth 属性 可以更改默认行为。例如,docker-compose-zipkin.yaml 利用 SCDF 通用流属性为已部署的流应用程序设置 spring.zipkin.enabled=truespring.zipkin.base-url=http://zipkin-server:9411

wget -O docker-compose-zipkin.yml https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/main/src/docker-compose/docker-compose-zipkin.yml
docker-compose -f ./docker-compose.yml -f ./docker-compose-zipkin.yml up
curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/main/src/docker-compose/docker-compose-zipkin.yml -o docker-compose-zipkin.yml
docker-compose -f .\docker-compose.yml -f .\docker-compose-zipkin.yml up

docker-compose-zipkin.yml 配置将以下容器端口暴露给主机:

主机端口 容器端口 描述
9411 9411 Zipkin 服务器监听 HTTP API 和 Web UI 的端口

您可以在 https://127.0.0.1:9411/zipkin 使用 Zipkin UI 浏览从已部署的流应用程序收集的分布式跟踪。

使用 Postgres 替换 MariaDB

docker-compose-postgres.yml 文件配置为对 Spring Cloud Data Flow 和 SKipper 使用 PostgreSQL 而不是 MariaDB。它禁用了默认的 mariadb 服务,添加了一个新的 postgres 服务,并覆盖了 Data Flow 和 Skipper 配置以使用 postgres 服务。

wget -O docker-compose-postgres.yml https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/main/src/docker-compose/docker-compose-postgres.yml
docker-compose -f ./docker-compose.yml -f ./docker-compose-postgres.yml up
curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/main/src/docker-compose/docker-compose-postgres.yml -o docker-compose-postgres.yml
docker-compose -f .\docker-compose.yml -f .\docker-compose-postgres.yml up

docker-compose-postgres.yml 配置将以下容器端口暴露给主机:

主机端口 容器端口 描述
5432 5432 PostgreSql 数据库服务器端口。使用 jdbc:postgresql://127.0.0.1:5432/dataflow 从本地机器连接到数据库。

使用 RabbitMQ 代替 Kafka

docker-compose-rabbitmq.yml 配置文件将 RabbitMQ(而不是 Kafka)配置为消息代理。它禁用了默认的 kafkazookeeper 服务,添加了一个新的 rabbitmq 服务,并将 dataflow-server 的服务绑定器配置覆盖为 RabbitMQ(例如,spring.cloud.dataflow.applicationProperties.stream.spring.rabbitmq.host=rabbitmq)。最后,它覆盖了 app-import 服务以注册 RabbitMQ 应用程序。

wget -O docker-compose-rabbitmq.yml https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/main/src/docker-compose/docker-compose-rabbitmq.yml
docker-compose -f ./docker-compose.yml -f ./docker-compose-rabbitmq.yml up
curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/main/src/docker-compose/docker-compose-rabbitmq.yml -o docker-compose-rabbitmq.yml
docker-compose -f .\docker-compose.yml -f .\docker-compose-rabbitmq.yml up

调试

以下部分介绍如何调试 DataFlow(或 Skipper)服务器以及它们部署的流应用程序。

如果此处显示的调试配置无法运行,请使用本地机器的 IP 地址而不是 localhost 名称。

调试流应用程序

部署流以调试流应用程序时,请将应用程序部署属性(deployer..local.debugPort)设置为 20000 - 20105 范围内的值。您可以直接从部署 UI 面板执行此操作。以下示例将 debugPort 设置为 20075

SCDF Remote Debug Apps. Set debugPort

在 IDE 中打开流应用程序项目。然后通过将 Host: 设置为本地机器的 IP 地址并将 Port: 设置为上面部署属性中使用的值来配置远程调试配置。

SCDF Remote Debug Apps

您必须使用 IP 地址而不是 localhost

调试 Data Flow 服务器

docker-compose-debug-dataflow.yml 文件启用了 Data Flow 服务器的远程调试。要启用调试,请运行:

wget -O docker-compose-debug-dataflow.yml https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/main/src/docker-compose/docker-compose-debug-dataflow.yml
docker-compose -f ./docker-compose.yml -f ./docker-compose-debug-dataflow.yml up
curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/main/src/docker-compose/docker-compose-debug-dataflow.yml -o docker-compose-debug-dataflow.yml
docker-compose -f .\docker-compose.yml -f .\docker-compose-debug-dataflow.yml up

dataflow-server 服务等待调试器连接到端口 5005 以开始调试。以下屏幕截图显示了如何使用 IntelliJ 配置远程调试。使用本地机器的 IP 地址设置 Host:。不要使用 localhost,因为它在 Docker 容器内不起作用。

SCDF Remote Debug

通常,在调试时,您需要构建一个新的本地 spring-cloud-dataflow-server:latest Docker 镜像。您可以通过从 DataFlow 根目录运行以下命令来实现:

./mvnw clean install -DskipTests
./mvnw docker:build -pl spring-cloud-dataflow-server

调试 Skipper 服务器

同样,您可以使用 docker-compose-debug-skipper.yml 文件来启用 Skipper 服务器的远程调试。

wget -O docker-compose-debug-skipper.yml https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/main/src/docker-compose/docker-compose-debug-skipper.yml
docker-compose -f ./docker-compose.yml -f ./docker-compose-debug-skipper.yml up
curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/main/src/docker-compose/docker-compose-debug-skipper.yml -o docker-compose-debug-skipper.yml
docker-compose -f .\docker-compose.yml -f .\docker-compose-debug-skipper.yml up

skipper 服务会在端口 6006 上等待调试器连接。

集成测试

自文档化的 DataFlowIT.java 类演示了如何重用相同的 docker-compose 文件来构建 DataFlow 集成和冒烟测试。