feat(docker): modular Docker Compose with layered -f files#3229
feat(docker): modular Docker Compose with layered -f files#3229puckpuck wants to merge 8 commits intoopen-telemetry:mainfrom
Conversation
Replaces monolithic docker-compose.yml with four composable layers: - compose.yaml: core/minimal services - compose.full.yaml: Kafka group (accounting, fraud-detection, kafka) - compose.observability.yaml: Jaeger, Prometheus, OpenSearch, Grafana - compose.extras.yaml: empty stub for vendor/fork customizations OTel Collector config split into matching layers loaded via --config flags. Adds make targets: start, start-minimal, start-no-o11y, start-minimal-no-o11y.
|
Please, let's not have 4 different collector config files and 4 different compose files. Why can't we use docker profiles? |
|
The issue is when you have the same service that is run multiple different ways (collector, checkout, recommendation, etc) based on which profile it belongs to. To make this work with profiles you still need multiple -f files, so with profiles we are now mixing the -f CLI option and the profile construct. This approach just doesn't use profiles at all and stays with -f, but in a cleaner way than we have today. |
I would also prefer not having 4 different compose files, but we might require them either way with Docker Profiles. Profiles can't patch services across boundaries, thus services like checkout needs KAFKA_ADDR and See that in #3107 a new |
| - FLAGD_HOST | ||
| - FLAGD_PORT | ||
| - FLAGD_UI_HOST | ||
| - FLAGD_UI_PORT |
There was a problem hiding this comment.
Looks like we need to add these env vars to the front-end proxy to get this to work:
- TELEMETRY_DOCS_HOST
- TELEMETRY_DOCS_PORTWithout the above when I run any make start-* the front-end proxy restarts with this error:
: Proto constraint validation failed (BootstrapValidationError.StaticResources: embedded message failed validation | caused by StaticResourcesValidationError.Clusters[9]: embedded message failed validation | caused by ClusterValidationError.LoadAssignment: embedded message failed validation | caused by ClusterLoadAssignmentValidationError.Endpoints[0]: embedded message failed validation | caused by LocalityLbEndpointsValidationError.LbEndpoints[0]: embedded message failed validation | caused by LbEndpointValidationError.Endpoint: embedded message failed validation | caused by EndpointValidationError.Address: embedded message failed validation | caused by AddressValidationError.SocketAddress: embedded message failed validation | caused by SocketAddressValidationError.Address: value length must be at least 1 characters)|
Even with the added maintenance burden of multiple compose files, I do like the idea of the |
This is needed to allow the frontend-proxy to run
Closes #2195
Supersedes #3107 (takes a
-flayering approach instead of profiles)Summary
Replaces the monolithic
docker-compose.ymlwith four composable files:compose.yamlcompose.full.yamlcompose.observability.yamlcompose.extras.yamlThe OTel Collector config is split into similar layers (
otelcol-config.yml,otelcol-config-full.yml,otelcol-config-observability.yml,otelcol-config-extras.yml) and loaded via--configflags in the same order.Four
maketargets cover the combinations:Forks can update the otherwise empty
compose.extras.yamlandotelcol-config-extras.ymloverrides to add custom o11y backends or demo services without touching upstream files.