container-superposition 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +843 -0
- package/dist/scripts/init.d.ts +3 -0
- package/dist/scripts/init.d.ts.map +1 -0
- package/dist/scripts/init.js +1190 -0
- package/dist/scripts/init.js.map +1 -0
- package/dist/scripts/migrate-to-manifests.d.ts +12 -0
- package/dist/scripts/migrate-to-manifests.d.ts.map +1 -0
- package/dist/scripts/migrate-to-manifests.js +230 -0
- package/dist/scripts/migrate-to-manifests.js.map +1 -0
- package/dist/tool/questionnaire/composer.d.ts +6 -0
- package/dist/tool/questionnaire/composer.d.ts.map +1 -0
- package/dist/tool/questionnaire/composer.js +1232 -0
- package/dist/tool/questionnaire/composer.js.map +1 -0
- package/dist/tool/readme/markdown-parser.d.ts +30 -0
- package/dist/tool/readme/markdown-parser.d.ts.map +1 -0
- package/dist/tool/readme/markdown-parser.js +139 -0
- package/dist/tool/readme/markdown-parser.js.map +1 -0
- package/dist/tool/readme/readme-generator.d.ts +9 -0
- package/dist/tool/readme/readme-generator.d.ts.map +1 -0
- package/dist/tool/readme/readme-generator.js +422 -0
- package/dist/tool/readme/readme-generator.js.map +1 -0
- package/dist/tool/schema/custom-loader.d.ts +17 -0
- package/dist/tool/schema/custom-loader.d.ts.map +1 -0
- package/dist/tool/schema/custom-loader.js +149 -0
- package/dist/tool/schema/custom-loader.js.map +1 -0
- package/dist/tool/schema/overlay-loader.d.ts +47 -0
- package/dist/tool/schema/overlay-loader.d.ts.map +1 -0
- package/dist/tool/schema/overlay-loader.js +252 -0
- package/dist/tool/schema/overlay-loader.js.map +1 -0
- package/dist/tool/schema/types.d.ts +212 -0
- package/dist/tool/schema/types.d.ts.map +1 -0
- package/dist/tool/schema/types.js +5 -0
- package/dist/tool/schema/types.js.map +1 -0
- package/docs/README.md +308 -0
- package/docs/architecture.md +233 -0
- package/docs/creating-overlays.md +549 -0
- package/docs/custom-patches.md +540 -0
- package/docs/dependencies.md +279 -0
- package/docs/examples/custom-patches-example.md +85 -0
- package/docs/examples.md +576 -0
- package/docs/messaging-comparison.md +265 -0
- package/docs/messaging-quick-start.md +385 -0
- package/docs/observability-workflow.md +537 -0
- package/docs/overlay-manifest-refactoring.md +214 -0
- package/docs/overlay-metadata-archive.md +54 -0
- package/docs/overlays.md +523 -0
- package/docs/presets-architecture.md +498 -0
- package/docs/presets.md +366 -0
- package/docs/publishing.md +476 -0
- package/docs/quick-reference.md +326 -0
- package/docs/ux.md +170 -0
- package/features/README.md +85 -0
- package/features/cross-distro-packages/README.md +146 -0
- package/features/cross-distro-packages/devcontainer-feature.json +20 -0
- package/features/cross-distro-packages/install.sh +58 -0
- package/features/local-secrets-manager/devcontainer-feature.json +18 -0
- package/features/local-secrets-manager/install.sh +127 -0
- package/features/project-scaffolder/devcontainer-feature.json +24 -0
- package/features/project-scaffolder/install.sh +100 -0
- package/features/team-conventions/devcontainer-feature.json +24 -0
- package/features/team-conventions/install.sh +93 -0
- package/overlays/.registry/README.md +14 -0
- package/overlays/.registry/base-images.yml +26 -0
- package/overlays/.registry/base-templates.yml +7 -0
- package/overlays/README.md +155 -0
- package/overlays/alertmanager/.env.example +5 -0
- package/overlays/alertmanager/README.md +465 -0
- package/overlays/alertmanager/alert-rules.yml +56 -0
- package/overlays/alertmanager/alertmanager.yml +42 -0
- package/overlays/alertmanager/devcontainer.patch.json +12 -0
- package/overlays/alertmanager/docker-compose.yml +20 -0
- package/overlays/alertmanager/overlay.yml +17 -0
- package/overlays/alertmanager/setup.sh +53 -0
- package/overlays/alertmanager/verify.sh +31 -0
- package/overlays/aws-cli/README.md +473 -0
- package/overlays/aws-cli/devcontainer.patch.json +13 -0
- package/overlays/aws-cli/overlay.yml +13 -0
- package/overlays/azure-cli/README.md +551 -0
- package/overlays/azure-cli/devcontainer.patch.json +8 -0
- package/overlays/azure-cli/overlay.yml +13 -0
- package/overlays/bun/README.md +312 -0
- package/overlays/bun/devcontainer.patch.json +41 -0
- package/overlays/bun/overlay.yml +16 -0
- package/overlays/bun/setup.sh +79 -0
- package/overlays/bun/verify.sh +30 -0
- package/overlays/codex/README.md +128 -0
- package/overlays/codex/devcontainer.patch.json +3 -0
- package/overlays/codex/overlay.yml +14 -0
- package/overlays/codex/setup.sh +24 -0
- package/overlays/codex/verify.sh +30 -0
- package/overlays/commitlint/README.md +333 -0
- package/overlays/commitlint/devcontainer.patch.json +8 -0
- package/overlays/commitlint/overlay.yml +16 -0
- package/overlays/commitlint/setup.sh +234 -0
- package/overlays/direnv/README.md +504 -0
- package/overlays/direnv/devcontainer.patch.json +6 -0
- package/overlays/direnv/overlay.yml +13 -0
- package/overlays/direnv/setup.sh +139 -0
- package/overlays/docker-in-docker/README.md +534 -0
- package/overlays/docker-in-docker/devcontainer.patch.json +10 -0
- package/overlays/docker-in-docker/overlay.yml +13 -0
- package/overlays/docker-sock/README.md +256 -0
- package/overlays/docker-sock/devcontainer.patch.json +9 -0
- package/overlays/docker-sock/docker-compose.yml +8 -0
- package/overlays/docker-sock/overlay.yml +13 -0
- package/overlays/dotnet/README.md +147 -0
- package/overlays/dotnet/devcontainer.patch.json +51 -0
- package/overlays/dotnet/global-tools.txt +24 -0
- package/overlays/dotnet/overlay.yml +13 -0
- package/overlays/dotnet/setup.sh +51 -0
- package/overlays/dotnet/verify.sh +26 -0
- package/overlays/gcloud/README.md +269 -0
- package/overlays/gcloud/devcontainer.patch.json +14 -0
- package/overlays/gcloud/overlay.yml +14 -0
- package/overlays/gcloud/verify.sh +52 -0
- package/overlays/git-helpers/README.md +168 -0
- package/overlays/git-helpers/devcontainer.patch.json +33 -0
- package/overlays/git-helpers/overlay.yml +15 -0
- package/overlays/git-helpers/setup.sh +91 -0
- package/overlays/go/README.md +293 -0
- package/overlays/go/devcontainer.patch.json +43 -0
- package/overlays/go/overlay.yml +15 -0
- package/overlays/go/setup.sh +33 -0
- package/overlays/go/verify.sh +40 -0
- package/overlays/grafana/.env.example +9 -0
- package/overlays/grafana/README.md +462 -0
- package/overlays/grafana/dashboard-provider.yml +11 -0
- package/overlays/grafana/dashboards/observability-overview.json +263 -0
- package/overlays/grafana/devcontainer.patch.json +12 -0
- package/overlays/grafana/docker-compose.yml +27 -0
- package/overlays/grafana/grafana-datasources.yml +57 -0
- package/overlays/grafana/overlay.yml +21 -0
- package/overlays/grafana/verify.sh +34 -0
- package/overlays/jaeger/.env.example +7 -0
- package/overlays/jaeger/README.md +867 -0
- package/overlays/jaeger/devcontainer.patch.json +12 -0
- package/overlays/jaeger/docker-compose.yml +17 -0
- package/overlays/jaeger/overlay.yml +19 -0
- package/overlays/java/README.md +267 -0
- package/overlays/java/devcontainer.patch.json +44 -0
- package/overlays/java/overlay.yml +16 -0
- package/overlays/java/setup.sh +41 -0
- package/overlays/java/verify.sh +42 -0
- package/overlays/just/README.md +443 -0
- package/overlays/just/devcontainer.patch.json +3 -0
- package/overlays/just/overlay.yml +13 -0
- package/overlays/just/setup.sh +182 -0
- package/overlays/kubectl-helm/README.md +660 -0
- package/overlays/kubectl-helm/devcontainer.patch.json +10 -0
- package/overlays/kubectl-helm/overlay.yml +13 -0
- package/overlays/loki/.env.example +5 -0
- package/overlays/loki/README.md +1156 -0
- package/overlays/loki/devcontainer.patch.json +12 -0
- package/overlays/loki/docker-compose.yml +18 -0
- package/overlays/loki/loki-config.yaml +45 -0
- package/overlays/loki/overlay.yml +17 -0
- package/overlays/minio/.env.example +9 -0
- package/overlays/minio/README.md +639 -0
- package/overlays/minio/devcontainer.patch.json +30 -0
- package/overlays/minio/docker-compose.yml +28 -0
- package/overlays/minio/overlay.yml +18 -0
- package/overlays/minio/setup.sh +61 -0
- package/overlays/minio/verify.sh +64 -0
- package/overlays/mkdocs/README.md +309 -0
- package/overlays/mkdocs/devcontainer.patch.json +24 -0
- package/overlays/mkdocs/overlay.yml +15 -0
- package/overlays/modern-cli-tools/README.md +556 -0
- package/overlays/modern-cli-tools/devcontainer.patch.json +3 -0
- package/overlays/modern-cli-tools/overlay.yml +13 -0
- package/overlays/modern-cli-tools/setup.sh +153 -0
- package/overlays/mongodb/.env.example +9 -0
- package/overlays/mongodb/README.md +481 -0
- package/overlays/mongodb/devcontainer.patch.json +32 -0
- package/overlays/mongodb/docker-compose.yml +44 -0
- package/overlays/mongodb/overlay.yml +17 -0
- package/overlays/mongodb/verify.sh +48 -0
- package/overlays/mysql/.env.example +11 -0
- package/overlays/mysql/README.md +542 -0
- package/overlays/mysql/devcontainer.patch.json +34 -0
- package/overlays/mysql/docker-compose.yml +55 -0
- package/overlays/mysql/overlay.yml +16 -0
- package/overlays/mysql/verify.sh +48 -0
- package/overlays/nats/.env.example +5 -0
- package/overlays/nats/README.md +762 -0
- package/overlays/nats/devcontainer.patch.json +24 -0
- package/overlays/nats/docker-compose.yml +31 -0
- package/overlays/nats/overlay.yml +18 -0
- package/overlays/nats/verify.sh +50 -0
- package/overlays/ngrok/README.md +503 -0
- package/overlays/ngrok/devcontainer.patch.json +3 -0
- package/overlays/ngrok/overlay.yml +14 -0
- package/overlays/ngrok/setup.sh +125 -0
- package/overlays/nodejs/README.md +192 -0
- package/overlays/nodejs/devcontainer.patch.json +49 -0
- package/overlays/nodejs/global-packages.txt +16 -0
- package/overlays/nodejs/overlay.yml +14 -0
- package/overlays/nodejs/setup.sh +46 -0
- package/overlays/nodejs/verify.sh +32 -0
- package/overlays/otel-collector/.env.example +9 -0
- package/overlays/otel-collector/README.md +1257 -0
- package/overlays/otel-collector/devcontainer.patch.json +28 -0
- package/overlays/otel-collector/docker-compose.yml +22 -0
- package/overlays/otel-collector/otel-collector-config.yaml +68 -0
- package/overlays/otel-collector/overlay.yml +21 -0
- package/overlays/otel-collector/setup.sh +49 -0
- package/overlays/otel-demo-nodejs/.env.example +2 -0
- package/overlays/otel-demo-nodejs/Dockerfile-otel-demo-nodejs +17 -0
- package/overlays/otel-demo-nodejs/README.md +409 -0
- package/overlays/otel-demo-nodejs/devcontainer.patch.json +12 -0
- package/overlays/otel-demo-nodejs/docker-compose.yml +19 -0
- package/overlays/otel-demo-nodejs/overlay.yml +23 -0
- package/overlays/otel-demo-nodejs/package-otel-demo-nodejs.json +20 -0
- package/overlays/otel-demo-nodejs/server-otel-demo-nodejs.js +259 -0
- package/overlays/otel-demo-nodejs/tracing-otel-demo-nodejs.js +57 -0
- package/overlays/otel-demo-nodejs/verify.sh +31 -0
- package/overlays/otel-demo-python/.env.example +2 -0
- package/overlays/otel-demo-python/Dockerfile-otel-demo-python +16 -0
- package/overlays/otel-demo-python/README.md +82 -0
- package/overlays/otel-demo-python/app-otel-demo-python.py +208 -0
- package/overlays/otel-demo-python/devcontainer.patch.json +12 -0
- package/overlays/otel-demo-python/docker-compose.yml +19 -0
- package/overlays/otel-demo-python/overlay.yml +23 -0
- package/overlays/otel-demo-python/requirements-otel-demo-python.txt +4 -0
- package/overlays/otel-demo-python/verify.sh +31 -0
- package/overlays/playwright/README.md +629 -0
- package/overlays/playwright/devcontainer.patch.json +9 -0
- package/overlays/playwright/overlay.yml +13 -0
- package/overlays/postgres/.env.example +6 -0
- package/overlays/postgres/README.md +602 -0
- package/overlays/postgres/devcontainer.patch.json +21 -0
- package/overlays/postgres/docker-compose.yml +22 -0
- package/overlays/postgres/overlay.yml +15 -0
- package/overlays/postgres/verify.sh +45 -0
- package/overlays/powershell/README.md +314 -0
- package/overlays/powershell/devcontainer.patch.json +22 -0
- package/overlays/powershell/overlay.yml +13 -0
- package/overlays/powershell/setup.sh +29 -0
- package/overlays/powershell/verify.sh +38 -0
- package/overlays/pre-commit/README.md +263 -0
- package/overlays/pre-commit/devcontainer.patch.json +9 -0
- package/overlays/pre-commit/overlay.yml +16 -0
- package/overlays/pre-commit/setup.sh +129 -0
- package/overlays/presets/docs-site.yml +118 -0
- package/overlays/presets/fullstack.yml +181 -0
- package/overlays/presets/microservice.yml +118 -0
- package/overlays/presets/web-api.yml +109 -0
- package/overlays/prometheus/.env.example +5 -0
- package/overlays/prometheus/README.md +1246 -0
- package/overlays/prometheus/devcontainer.patch.json +12 -0
- package/overlays/prometheus/docker-compose.yml +22 -0
- package/overlays/prometheus/overlay.yml +17 -0
- package/overlays/prometheus/prometheus.yml +12 -0
- package/overlays/prometheus/verify.sh +34 -0
- package/overlays/promtail/.env.example +2 -0
- package/overlays/promtail/README.md +357 -0
- package/overlays/promtail/devcontainer.patch.json +5 -0
- package/overlays/promtail/docker-compose.yml +16 -0
- package/overlays/promtail/overlay.yml +17 -0
- package/overlays/promtail/promtail-config.yaml +60 -0
- package/overlays/promtail/verify.sh +31 -0
- package/overlays/pulumi/README.md +472 -0
- package/overlays/pulumi/devcontainer.patch.json +13 -0
- package/overlays/pulumi/overlay.yml +14 -0
- package/overlays/pulumi/verify.sh +31 -0
- package/overlays/python/README.md +919 -0
- package/overlays/python/devcontainer.patch.json +41 -0
- package/overlays/python/overlay.yml +12 -0
- package/overlays/python/requirements-overlay.txt +13 -0
- package/overlays/python/setup.sh +47 -0
- package/overlays/python/verify.sh +32 -0
- package/overlays/rabbitmq/.env.example +7 -0
- package/overlays/rabbitmq/README.md +680 -0
- package/overlays/rabbitmq/devcontainer.patch.json +28 -0
- package/overlays/rabbitmq/docker-compose.yml +30 -0
- package/overlays/rabbitmq/overlay.yml +18 -0
- package/overlays/rabbitmq/verify.sh +41 -0
- package/overlays/redis/.env.example +4 -0
- package/overlays/redis/README.md +776 -0
- package/overlays/redis/devcontainer.patch.json +21 -0
- package/overlays/redis/docker-compose.yml +21 -0
- package/overlays/redis/overlay.yml +15 -0
- package/overlays/redis/verify.sh +41 -0
- package/overlays/redpanda/.env.example +10 -0
- package/overlays/redpanda/README.md +703 -0
- package/overlays/redpanda/devcontainer.patch.json +37 -0
- package/overlays/redpanda/docker-compose.yml +67 -0
- package/overlays/redpanda/overlay.yml +21 -0
- package/overlays/redpanda/verify.sh +48 -0
- package/overlays/rust/README.md +299 -0
- package/overlays/rust/devcontainer.patch.json +39 -0
- package/overlays/rust/overlay.yml +15 -0
- package/overlays/rust/setup.sh +36 -0
- package/overlays/rust/verify.sh +51 -0
- package/overlays/sqlite/README.md +584 -0
- package/overlays/sqlite/devcontainer.patch.json +14 -0
- package/overlays/sqlite/overlay.yml +15 -0
- package/overlays/sqlite/setup.sh +27 -0
- package/overlays/sqlite/verify.sh +43 -0
- package/overlays/sqlserver/.env.example +6 -0
- package/overlays/sqlserver/README.md +592 -0
- package/overlays/sqlserver/devcontainer.patch.json +22 -0
- package/overlays/sqlserver/docker-compose.yml +32 -0
- package/overlays/sqlserver/overlay.yml +17 -0
- package/overlays/sqlserver/verify.sh +30 -0
- package/overlays/tempo/.env.example +5 -0
- package/overlays/tempo/README.md +273 -0
- package/overlays/tempo/devcontainer.patch.json +12 -0
- package/overlays/tempo/docker-compose.yml +20 -0
- package/overlays/tempo/overlay.yml +20 -0
- package/overlays/tempo/tempo-config.yaml +32 -0
- package/overlays/tempo/verify.sh +31 -0
- package/overlays/terraform/README.md +389 -0
- package/overlays/terraform/devcontainer.patch.json +15 -0
- package/overlays/terraform/overlay.yml +14 -0
- package/overlays/terraform/verify.sh +63 -0
- package/package.json +74 -0
- package/templates/README.md +285 -0
- package/templates/compose/.devcontainer/devcontainer.json +46 -0
- package/templates/compose/.devcontainer/docker-compose.yml +12 -0
- package/templates/compose/README.md +20 -0
- package/templates/plain/.devcontainer/devcontainer.json +35 -0
- package/templates/plain/README.md +21 -0
- package/tool/README.md +281 -0
- package/tool/schema/base-images.schema.json +43 -0
- package/tool/schema/base-templates.schema.json +34 -0
- package/tool/schema/config.schema.json +71 -0
- package/tool/schema/overlay-manifest.schema.json +86 -0
|
@@ -0,0 +1,549 @@
|
|
|
1
|
+
# Creating Overlays
|
|
2
|
+
|
|
3
|
+
A comprehensive guide to creating overlays for container-superposition.
|
|
4
|
+
|
|
5
|
+
## Base Images
|
|
6
|
+
|
|
7
|
+
Container Superposition supports multiple Linux distributions with automatic package manager detection.
|
|
8
|
+
|
|
9
|
+
### Supported Base Images
|
|
10
|
+
|
|
11
|
+
During interactive initialization, you can choose from:
|
|
12
|
+
|
|
13
|
+
1. **Debian Bookworm (Recommended)** - `mcr.microsoft.com/devcontainers/base:bookworm`
|
|
14
|
+
- ✅ Default choice, best compatibility
|
|
15
|
+
- ✅ Stable with long-term support
|
|
16
|
+
- ✅ apt package manager
|
|
17
|
+
- ✅ Battle-tested in production
|
|
18
|
+
|
|
19
|
+
2. **Debian Trixie** - `mcr.microsoft.com/devcontainers/base:trixie`
|
|
20
|
+
- Newer packages, testing stability
|
|
21
|
+
- apt package manager
|
|
22
|
+
- Use if you need more recent software versions
|
|
23
|
+
|
|
24
|
+
3. **Alpine Linux** - `mcr.microsoft.com/devcontainers/base:alpine`
|
|
25
|
+
- Minimal footprint (~5MB base image)
|
|
26
|
+
- apk package manager
|
|
27
|
+
- Ideal for resource-constrained environments
|
|
28
|
+
- Perfect for containerized microservices
|
|
29
|
+
|
|
30
|
+
4. **Ubuntu LTS** - `mcr.microsoft.com/devcontainers/base:ubuntu`
|
|
31
|
+
- Popular, familiar to many developers
|
|
32
|
+
- apt package manager
|
|
33
|
+
- Extensive package ecosystem
|
|
34
|
+
- Good for teams migrating from Ubuntu
|
|
35
|
+
|
|
36
|
+
5. **Custom Image**
|
|
37
|
+
- Specify any Docker image
|
|
38
|
+
- ⚠️ **Warning**: May conflict with overlays
|
|
39
|
+
- Test thoroughly and adjust configurations as needed
|
|
40
|
+
|
|
41
|
+
### Package Manager Compatibility
|
|
42
|
+
|
|
43
|
+
Overlays automatically detect the package manager based on the selected base image:
|
|
44
|
+
|
|
45
|
+
- **Debian/Ubuntu**: Uses `apt-get` for package installation
|
|
46
|
+
- **Alpine**: Uses `apk` for package installation
|
|
47
|
+
- **Custom**: Defaults to `apt-get` (may need manual adjustment)
|
|
48
|
+
|
|
49
|
+
When creating overlays with package installations, use devcontainer features that handle this automatically, or detect the package manager in setup scripts:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
# Example: Detect package manager
|
|
53
|
+
if command -v apk > /dev/null; then
|
|
54
|
+
apk add --no-cache some-package
|
|
55
|
+
elif command -v apt-get > /dev/null; then
|
|
56
|
+
apt-get update && apt-get install -y some-package
|
|
57
|
+
fi
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### When to Use Each Base Image
|
|
61
|
+
|
|
62
|
+
**Debian Bookworm**:
|
|
63
|
+
|
|
64
|
+
- Default for most projects
|
|
65
|
+
- Maximum compatibility with overlays
|
|
66
|
+
- Proven stability
|
|
67
|
+
|
|
68
|
+
**Alpine**:
|
|
69
|
+
|
|
70
|
+
- Docker images/microservices where size matters
|
|
71
|
+
- Cloud deployments with cost optimization
|
|
72
|
+
- CI/CD environments
|
|
73
|
+
|
|
74
|
+
**Ubuntu**:
|
|
75
|
+
|
|
76
|
+
- Teams familiar with Ubuntu
|
|
77
|
+
- Projects requiring Ubuntu-specific packages
|
|
78
|
+
- Enterprise environments standardized on Ubuntu
|
|
79
|
+
|
|
80
|
+
**Custom**:
|
|
81
|
+
|
|
82
|
+
- Specific compliance requirements
|
|
83
|
+
- Organization-mandated base images
|
|
84
|
+
- Specialized OS requirements
|
|
85
|
+
|
|
86
|
+
## Overlay Types
|
|
87
|
+
|
|
88
|
+
Overlays fall into several categories:
|
|
89
|
+
|
|
90
|
+
1. **Language/Framework** - dotnet, nodejs, python, mkdocs
|
|
91
|
+
2. **Database** - postgres, redis
|
|
92
|
+
3. **Observability** - otel-collector, jaeger, prometheus, grafana, loki
|
|
93
|
+
4. **Cloud/DevOps** - aws-cli, azure-cli, kubectl-helm
|
|
94
|
+
5. **Development Tools** - playwright, codex, etc.
|
|
95
|
+
|
|
96
|
+
## Basic Overlay Structure
|
|
97
|
+
|
|
98
|
+
Every overlay must have at least:
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
overlays/my-overlay/
|
|
102
|
+
└── devcontainer.patch.json
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Additional optional files:
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
overlays/my-overlay/
|
|
109
|
+
├── devcontainer.patch.json # Required: DevContainer configuration
|
|
110
|
+
├── docker-compose.yml # Optional: Service definition
|
|
111
|
+
├── .env.example # Optional: Environment variables
|
|
112
|
+
├── README.md # Optional: Documentation
|
|
113
|
+
├── my-config.yaml # Optional: Configuration files
|
|
114
|
+
└── config/ # Optional: Configuration directory
|
|
115
|
+
└── additional.json
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## devcontainer.patch.json
|
|
119
|
+
|
|
120
|
+
This is the core configuration that gets merged into the final devcontainer.json.
|
|
121
|
+
|
|
122
|
+
### Minimal Example
|
|
123
|
+
|
|
124
|
+
```json
|
|
125
|
+
{
|
|
126
|
+
"$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
|
|
127
|
+
"features": {
|
|
128
|
+
"ghcr.io/devcontainers/features/my-tool:1": {
|
|
129
|
+
"version": "latest"
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Full Example
|
|
136
|
+
|
|
137
|
+
```json
|
|
138
|
+
{
|
|
139
|
+
"$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
|
|
140
|
+
"features": {
|
|
141
|
+
"ghcr.io/devcontainers/features/my-tool:1": {
|
|
142
|
+
"version": "latest",
|
|
143
|
+
"option1": true
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
"runServices": ["my-service"],
|
|
147
|
+
"_serviceOrder": 1,
|
|
148
|
+
"customizations": {
|
|
149
|
+
"vscode": {
|
|
150
|
+
"extensions": ["publisher.my-extension"],
|
|
151
|
+
"settings": {
|
|
152
|
+
"my.setting": "value"
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
"forwardPorts": [8080, 9000],
|
|
157
|
+
"portsAttributes": {
|
|
158
|
+
"8080": {
|
|
159
|
+
"label": "My Service",
|
|
160
|
+
"onAutoForward": "openBrowser"
|
|
161
|
+
},
|
|
162
|
+
"9000": {
|
|
163
|
+
"label": "Admin Panel",
|
|
164
|
+
"onAutoForward": "notify"
|
|
165
|
+
}
|
|
166
|
+
},
|
|
167
|
+
"remoteEnv": {
|
|
168
|
+
"MY_TOOL_HOST": "localhost",
|
|
169
|
+
"MY_TOOL_PORT": "8080"
|
|
170
|
+
},
|
|
171
|
+
"postCreateCommand": {
|
|
172
|
+
"my-setup": "echo 'Setting up my tool...'"
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Special Fields
|
|
178
|
+
|
|
179
|
+
#### runServices
|
|
180
|
+
|
|
181
|
+
Lists services that should start automatically. Only needed if your overlay includes a docker-compose.yml.
|
|
182
|
+
|
|
183
|
+
```json
|
|
184
|
+
{
|
|
185
|
+
"runServices": ["my-service", "my-dependency"]
|
|
186
|
+
}
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
#### \_serviceOrder
|
|
190
|
+
|
|
191
|
+
Controls startup order (lower numbers start first):
|
|
192
|
+
|
|
193
|
+
- `0` - Infrastructure (postgres, redis)
|
|
194
|
+
- `1` - Observability backends (jaeger, prometheus, loki)
|
|
195
|
+
- `2` - Middleware (otel-collector)
|
|
196
|
+
- `3` - UI/Visualization (grafana)
|
|
197
|
+
|
|
198
|
+
```json
|
|
199
|
+
{
|
|
200
|
+
"_serviceOrder": 1
|
|
201
|
+
}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
## docker-compose.yml
|
|
205
|
+
|
|
206
|
+
Define services your overlay needs.
|
|
207
|
+
|
|
208
|
+
### Template
|
|
209
|
+
|
|
210
|
+
```yaml
|
|
211
|
+
version: '3.8'
|
|
212
|
+
services:
|
|
213
|
+
my-service:
|
|
214
|
+
image: my-image:${MY_SERVICE_VERSION:-latest}
|
|
215
|
+
environment:
|
|
216
|
+
- ENV_VAR=${ENV_VAR:-default}
|
|
217
|
+
ports:
|
|
218
|
+
- '8080:8080'
|
|
219
|
+
volumes:
|
|
220
|
+
- my-data:/data
|
|
221
|
+
- ./my-config.yaml:/etc/my-service/config.yaml
|
|
222
|
+
depends_on:
|
|
223
|
+
- other-service # Only if dependency exists
|
|
224
|
+
networks:
|
|
225
|
+
- devnet
|
|
226
|
+
|
|
227
|
+
volumes:
|
|
228
|
+
my-data:
|
|
229
|
+
|
|
230
|
+
networks:
|
|
231
|
+
devnet:
|
|
232
|
+
external: true
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### Important Notes
|
|
236
|
+
|
|
237
|
+
1. **Always use version "3.8"**
|
|
238
|
+
2. **Always include `networks: - devnet`** for service connectivity
|
|
239
|
+
3. **Use environment variables** with defaults: `${VAR:-default}`
|
|
240
|
+
4. **Include depends_on** for dependencies (composer will filter unused ones)
|
|
241
|
+
5. **Use external network**: `devnet: external: true`
|
|
242
|
+
|
|
243
|
+
### Volume Mounts
|
|
244
|
+
|
|
245
|
+
Mount config files from your overlay:
|
|
246
|
+
|
|
247
|
+
```yaml
|
|
248
|
+
volumes:
|
|
249
|
+
- ./my-config.yaml:/etc/my-service/config.yaml
|
|
250
|
+
- ./config:/etc/my-service/config.d
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
These files are automatically copied to the output directory.
|
|
254
|
+
|
|
255
|
+
## .env.example
|
|
256
|
+
|
|
257
|
+
Define environment variables for your overlay.
|
|
258
|
+
|
|
259
|
+
### Template
|
|
260
|
+
|
|
261
|
+
```bash
|
|
262
|
+
# My Service Configuration
|
|
263
|
+
MY_SERVICE_VERSION=latest
|
|
264
|
+
MY_SERVICE_PORT=8080
|
|
265
|
+
MY_SERVICE_HOST=localhost
|
|
266
|
+
|
|
267
|
+
# Authentication
|
|
268
|
+
MY_SERVICE_USERNAME=admin
|
|
269
|
+
MY_SERVICE_PASSWORD=changeme
|
|
270
|
+
|
|
271
|
+
# Feature Flags
|
|
272
|
+
MY_SERVICE_ENABLE_FEATURE_X=true
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
### Guidelines
|
|
276
|
+
|
|
277
|
+
1. **Include defaults** - Every variable should have a sensible default
|
|
278
|
+
2. **Group related variables** - Use comments to organize
|
|
279
|
+
3. **Document sensitive values** - Mark which should be changed
|
|
280
|
+
4. **Use service prefix** - Avoid naming conflicts (MY*SERVICE*\*)
|
|
281
|
+
|
|
282
|
+
## Configuration Files
|
|
283
|
+
|
|
284
|
+
Any additional files in your overlay are automatically copied to the output directory.
|
|
285
|
+
|
|
286
|
+
### Example Structure
|
|
287
|
+
|
|
288
|
+
```
|
|
289
|
+
overlays/my-service/
|
|
290
|
+
├── devcontainer.patch.json
|
|
291
|
+
├── docker-compose.yml
|
|
292
|
+
├── .env.example
|
|
293
|
+
├── my-service-config.yaml # Copied as-is
|
|
294
|
+
├── init-script.sh # Copied as-is
|
|
295
|
+
└── config/ # Entire directory copied
|
|
296
|
+
├── settings.json
|
|
297
|
+
└── rules.yaml
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
### Output
|
|
301
|
+
|
|
302
|
+
```
|
|
303
|
+
.devcontainer/
|
|
304
|
+
├── devcontainer.json
|
|
305
|
+
├── docker-compose.my-service.yml
|
|
306
|
+
├── .env.example # Merged from all overlays
|
|
307
|
+
├── my-service-config.yaml # Copied from overlay
|
|
308
|
+
├── init-script.sh # Copied from overlay
|
|
309
|
+
└── config/ # Copied from overlay
|
|
310
|
+
├── settings.json
|
|
311
|
+
└── rules.yaml
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
### Configuration Best Practices
|
|
315
|
+
|
|
316
|
+
1. **Use relative paths** in docker-compose.yml
|
|
317
|
+
2. **Reference .env variables** in config files when possible
|
|
318
|
+
3. **Provide examples** - Include commented-out options
|
|
319
|
+
4. **Document structure** - Add comments explaining sections
|
|
320
|
+
|
|
321
|
+
## README.md
|
|
322
|
+
|
|
323
|
+
Document your overlay for users.
|
|
324
|
+
|
|
325
|
+
### Template
|
|
326
|
+
|
|
327
|
+
````markdown
|
|
328
|
+
# My Service Overlay
|
|
329
|
+
|
|
330
|
+
Brief description of what this overlay provides.
|
|
331
|
+
|
|
332
|
+
## What's Included
|
|
333
|
+
|
|
334
|
+
- Service name and version
|
|
335
|
+
- Key features
|
|
336
|
+
- Pre-configured settings
|
|
337
|
+
|
|
338
|
+
## Ports
|
|
339
|
+
|
|
340
|
+
- `8080` - Main service API
|
|
341
|
+
- `9000` - Admin dashboard
|
|
342
|
+
|
|
343
|
+
## Configuration
|
|
344
|
+
|
|
345
|
+
Description of main configuration file(s).
|
|
346
|
+
|
|
347
|
+
### Key Settings
|
|
348
|
+
|
|
349
|
+
```yaml
|
|
350
|
+
# my-service-config.yaml
|
|
351
|
+
server:
|
|
352
|
+
port: 8080
|
|
353
|
+
host: 0.0.0.0
|
|
354
|
+
```
|
|
355
|
+
````
|
|
356
|
+
|
|
357
|
+
## Environment Variables
|
|
358
|
+
|
|
359
|
+
```bash
|
|
360
|
+
# Service version
|
|
361
|
+
MY_SERVICE_VERSION=latest
|
|
362
|
+
|
|
363
|
+
# Service port
|
|
364
|
+
MY_SERVICE_PORT=8080
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
## Usage
|
|
368
|
+
|
|
369
|
+
### Basic Usage
|
|
370
|
+
|
|
371
|
+
Code example showing how to use the service from your application.
|
|
372
|
+
|
|
373
|
+
### Advanced Configuration
|
|
374
|
+
|
|
375
|
+
More complex examples.
|
|
376
|
+
|
|
377
|
+
## Dependencies
|
|
378
|
+
|
|
379
|
+
Works best with:
|
|
380
|
+
|
|
381
|
+
- **other-overlay** - Why it's useful
|
|
382
|
+
- **another-overlay** - What it provides
|
|
383
|
+
|
|
384
|
+
## Typical Stacks
|
|
385
|
+
|
|
386
|
+
```bash
|
|
387
|
+
compose + my-language + my-service + postgres
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
## Troubleshooting
|
|
391
|
+
|
|
392
|
+
Common issues and solutions.
|
|
393
|
+
|
|
394
|
+
````
|
|
395
|
+
|
|
396
|
+
## Dependencies Between Overlays
|
|
397
|
+
|
|
398
|
+
### Declaring Dependencies
|
|
399
|
+
|
|
400
|
+
In your `docker-compose.yml`, list ALL potential dependencies:
|
|
401
|
+
|
|
402
|
+
```yaml
|
|
403
|
+
services:
|
|
404
|
+
my-service:
|
|
405
|
+
depends_on:
|
|
406
|
+
- postgres
|
|
407
|
+
- redis
|
|
408
|
+
- other-service
|
|
409
|
+
````
|
|
410
|
+
|
|
411
|
+
The composer will automatically:
|
|
412
|
+
|
|
413
|
+
1. Remove dependencies not selected by the user
|
|
414
|
+
2. Remove the `depends_on` field if empty
|
|
415
|
+
3. Order services correctly
|
|
416
|
+
|
|
417
|
+
### Dependency Patterns
|
|
418
|
+
|
|
419
|
+
**Infrastructure dependency:**
|
|
420
|
+
|
|
421
|
+
```yaml
|
|
422
|
+
my-app:
|
|
423
|
+
depends_on:
|
|
424
|
+
- postgres # Database must start first
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
**Pipeline dependency:**
|
|
428
|
+
|
|
429
|
+
```yaml
|
|
430
|
+
otel-collector:
|
|
431
|
+
depends_on:
|
|
432
|
+
- jaeger # Backends must start first
|
|
433
|
+
- prometheus
|
|
434
|
+
- loki
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
**Visualization dependency:**
|
|
438
|
+
|
|
439
|
+
```yaml
|
|
440
|
+
grafana:
|
|
441
|
+
depends_on:
|
|
442
|
+
- prometheus # Data sources must start first
|
|
443
|
+
- loki
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
## Testing Your Overlay
|
|
447
|
+
|
|
448
|
+
### 1. Test Standalone
|
|
449
|
+
|
|
450
|
+
```bash
|
|
451
|
+
npm run init -- --stack compose --my-overlay
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
### 2. Test With Dependencies
|
|
455
|
+
|
|
456
|
+
```bash
|
|
457
|
+
npm run init -- --stack compose --my-overlay --postgres --redis
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
### 3. Test In Combination
|
|
461
|
+
|
|
462
|
+
```bash
|
|
463
|
+
npm run init -- --stack compose --language nodejs --my-overlay --postgres
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
### 4. Verify Output
|
|
467
|
+
|
|
468
|
+
Check that:
|
|
469
|
+
|
|
470
|
+
- [ ] devcontainer.json has your features merged
|
|
471
|
+
- [ ] docker-compose.my-overlay.yml exists
|
|
472
|
+
- [ ] .env.example includes your variables
|
|
473
|
+
- [ ] Config files are copied correctly
|
|
474
|
+
- [ ] Services start in correct order
|
|
475
|
+
|
|
476
|
+
### 5. Test In Container
|
|
477
|
+
|
|
478
|
+
```bash
|
|
479
|
+
cd output-directory
|
|
480
|
+
code .
|
|
481
|
+
# Reopen in Container
|
|
482
|
+
# Verify service is running: docker-compose ps
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
## Common Patterns
|
|
486
|
+
|
|
487
|
+
### Language Overlay
|
|
488
|
+
|
|
489
|
+
No docker-compose, just features:
|
|
490
|
+
|
|
491
|
+
```json
|
|
492
|
+
{
|
|
493
|
+
"features": {
|
|
494
|
+
"ghcr.io/devcontainers/features/node:1": {
|
|
495
|
+
"version": "lts"
|
|
496
|
+
}
|
|
497
|
+
},
|
|
498
|
+
"customizations": {
|
|
499
|
+
"vscode": {
|
|
500
|
+
"extensions": ["dbaeumer.vscode-eslint"]
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
```
|
|
505
|
+
|
|
506
|
+
### Service Overlay
|
|
507
|
+
|
|
508
|
+
With docker-compose and config:
|
|
509
|
+
|
|
510
|
+
```
|
|
511
|
+
my-service/
|
|
512
|
+
├── devcontainer.patch.json # Ports, runServices
|
|
513
|
+
├── docker-compose.yml # Service definition
|
|
514
|
+
├── .env.example # Environment variables
|
|
515
|
+
└── config.yaml # Service configuration
|
|
516
|
+
```
|
|
517
|
+
|
|
518
|
+
### Tool Overlay
|
|
519
|
+
|
|
520
|
+
CLI tools without services:
|
|
521
|
+
|
|
522
|
+
```json
|
|
523
|
+
{
|
|
524
|
+
"features": {
|
|
525
|
+
"ghcr.io/devcontainers/features/aws-cli:1": {}
|
|
526
|
+
},
|
|
527
|
+
"customizations": {
|
|
528
|
+
"vscode": {
|
|
529
|
+
"extensions": ["amazonwebservices.aws-toolkit-vscode"]
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
```
|
|
534
|
+
|
|
535
|
+
## Checklist
|
|
536
|
+
|
|
537
|
+
Before submitting an overlay:
|
|
538
|
+
|
|
539
|
+
- [ ] devcontainer.patch.json validates against schema
|
|
540
|
+
- [ ] docker-compose.yml uses version "3.8" and devnet network
|
|
541
|
+
- [ ] .env.example has sensible defaults and comments
|
|
542
|
+
- [ ] README.md documents ports, environment variables, usage
|
|
543
|
+
- [ ] runServices includes service names
|
|
544
|
+
- [ ] \_serviceOrder is set appropriately
|
|
545
|
+
- [ ] depends_on lists all potential dependencies
|
|
546
|
+
- [ ] Tested standalone and in combination
|
|
547
|
+
- [ ] Added to overlays/README.md
|
|
548
|
+
- [ ] Added to appropriate type in tool/schema/types.ts
|
|
549
|
+
- [ ] Updated questionnaire in scripts/init.ts (if applicable)
|