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,256 @@
|
|
|
1
|
+
# Docker (Host Socket) Overlay
|
|
2
|
+
|
|
3
|
+
Access the host Docker daemon by mounting the Docker socket. This is Docker-outside-of-Docker (DooD).
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Docker CLI** - Docker command-line interface
|
|
8
|
+
- **Docker Compose** - Multi-container orchestration
|
|
9
|
+
- **Host Socket Mount** - `/var/run/docker.sock` mounted from host
|
|
10
|
+
- **Fast Performance** - Shares images and cache with host
|
|
11
|
+
|
|
12
|
+
## How It Works
|
|
13
|
+
|
|
14
|
+
This overlay mounts the host's Docker socket into the container, allowing the container to control the host's Docker daemon directly. This is also known as "Docker-outside-of-Docker" (DooD).
|
|
15
|
+
|
|
16
|
+
**Mount configuration:**
|
|
17
|
+
|
|
18
|
+
```yaml
|
|
19
|
+
volumes:
|
|
20
|
+
- /var/run/docker.sock:/var/run/docker-host.sock
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Use Cases
|
|
24
|
+
|
|
25
|
+
- **Building containers** - Build Docker images from within the dev container
|
|
26
|
+
- **docker-compose testing** - Test multi-service applications
|
|
27
|
+
- **CI/CD parity** - Simulate CI build environments locally
|
|
28
|
+
- **Container management** - Start/stop containers from dev environment
|
|
29
|
+
|
|
30
|
+
## Benefits vs Docker-in-Docker
|
|
31
|
+
|
|
32
|
+
| Feature | Docker-outside-of-Docker (This) | Docker-in-Docker |
|
|
33
|
+
| --------------- | ------------------------------- | ---------------------- |
|
|
34
|
+
| **Performance** | ✅ Fast (shared cache) | ⚠️ Slower |
|
|
35
|
+
| **Disk Usage** | ✅ Efficient (shared images) | ❌ Duplicates images |
|
|
36
|
+
| **Networking** | ✅ Simple | ⚠️ Complex |
|
|
37
|
+
| **Security** | ⚠️ Host access | ✅ Isolated |
|
|
38
|
+
| **Portability** | ⚠️ Local only | ✅ Works in Codespaces |
|
|
39
|
+
|
|
40
|
+
## Common Commands
|
|
41
|
+
|
|
42
|
+
### Build Images
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
# Build from Dockerfile
|
|
46
|
+
docker build -t myapp:latest .
|
|
47
|
+
|
|
48
|
+
# Build with build args
|
|
49
|
+
docker build --build-arg NODE_VERSION=20 -t myapp .
|
|
50
|
+
|
|
51
|
+
# Multi-stage build
|
|
52
|
+
docker build --target production -t myapp:prod .
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Run Containers
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
# Run container
|
|
59
|
+
docker run -d -p 8080:80 nginx
|
|
60
|
+
|
|
61
|
+
# Run with volume mount
|
|
62
|
+
docker run -v $(pwd):/app myapp
|
|
63
|
+
|
|
64
|
+
# Run with environment variables
|
|
65
|
+
docker run -e DATABASE_URL=postgres://... myapp
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Docker Compose
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
# Start services
|
|
72
|
+
docker-compose up -d
|
|
73
|
+
|
|
74
|
+
# View logs
|
|
75
|
+
docker-compose logs -f
|
|
76
|
+
|
|
77
|
+
# Stop services
|
|
78
|
+
docker-compose down
|
|
79
|
+
|
|
80
|
+
# Rebuild and restart
|
|
81
|
+
docker-compose up -d --build
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Image Management
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
# List images
|
|
88
|
+
docker images
|
|
89
|
+
|
|
90
|
+
# Remove image
|
|
91
|
+
docker rmi myapp:latest
|
|
92
|
+
|
|
93
|
+
# Prune unused images
|
|
94
|
+
docker image prune -a
|
|
95
|
+
|
|
96
|
+
# Pull image
|
|
97
|
+
docker pull nginx:latest
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Container Management
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
# List running containers
|
|
104
|
+
docker ps
|
|
105
|
+
|
|
106
|
+
# List all containers
|
|
107
|
+
docker ps -a
|
|
108
|
+
|
|
109
|
+
# Stop container
|
|
110
|
+
docker stop CONTAINER_ID
|
|
111
|
+
|
|
112
|
+
# Remove container
|
|
113
|
+
docker rm CONTAINER_ID
|
|
114
|
+
|
|
115
|
+
# Execute command in container
|
|
116
|
+
docker exec -it CONTAINER_ID bash
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Security Considerations
|
|
120
|
+
|
|
121
|
+
⚠️ **Important Security Implications**
|
|
122
|
+
|
|
123
|
+
### Host Docker Access
|
|
124
|
+
|
|
125
|
+
Mounting `/var/run/docker.sock` grants **full control** over the host Docker daemon:
|
|
126
|
+
|
|
127
|
+
- ✅ **Can create containers** with host mounts
|
|
128
|
+
- ✅ **Can access host filesystem** via volume mounts
|
|
129
|
+
- ✅ **Can run privileged containers**
|
|
130
|
+
- ⚠️ **Equivalent to root access on host**
|
|
131
|
+
|
|
132
|
+
### Security Best Practices
|
|
133
|
+
|
|
134
|
+
1. **Use in trusted environments only** - Development machines, not production
|
|
135
|
+
2. **Don't expose to untrusted users** - Anyone with container access has Docker control
|
|
136
|
+
3. **Audit Docker commands** - Be aware of what containers you create
|
|
137
|
+
4. **Limit volume mounts** - Avoid mounting sensitive host directories
|
|
138
|
+
5. **Consider alternatives** - Use Docker-in-Docker for untrusted environments
|
|
139
|
+
|
|
140
|
+
### When NOT to Use
|
|
141
|
+
|
|
142
|
+
- **Multi-tenant environments** - Users should not share Docker access
|
|
143
|
+
- **Production containers** - Use proper orchestration (Kubernetes)
|
|
144
|
+
- **Untrusted code** - Malicious code can escape container
|
|
145
|
+
- **GitHub Codespaces** - Use Docker-in-Docker instead (this requires local Docker)
|
|
146
|
+
|
|
147
|
+
### When to Use
|
|
148
|
+
|
|
149
|
+
- ✅ **Local development** - Building/testing on your machine
|
|
150
|
+
- ✅ **CI/CD simulation** - Mimic CI build environment locally
|
|
151
|
+
- ✅ **Container development** - Building containerized apps
|
|
152
|
+
- ✅ **Testing docker-compose** - Multi-service application development
|
|
153
|
+
|
|
154
|
+
## Troubleshooting
|
|
155
|
+
|
|
156
|
+
### Permission denied on Docker socket
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
# Check socket permissions
|
|
160
|
+
ls -l /var/run/docker-host.sock
|
|
161
|
+
|
|
162
|
+
# Verify Docker feature configured correctly
|
|
163
|
+
# The devcontainers feature should handle user permissions automatically
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### Docker daemon not accessible
|
|
167
|
+
|
|
168
|
+
Ensure Docker Desktop (or Docker daemon) is running on your host machine.
|
|
169
|
+
|
|
170
|
+
### Network conflicts
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
# List Docker networks
|
|
174
|
+
docker network ls
|
|
175
|
+
|
|
176
|
+
# Remove conflicting network
|
|
177
|
+
docker network rm NETWORK_NAME
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Can't connect to containers
|
|
181
|
+
|
|
182
|
+
When running containers from within the dev container, they are on the host's Docker network. Access them via:
|
|
183
|
+
|
|
184
|
+
- **`localhost`** - For published ports (e.g., `-p 8080:80`)
|
|
185
|
+
- **Container name** - If using custom networks
|
|
186
|
+
- **Host IP** - Check with `ip addr show docker0`
|
|
187
|
+
|
|
188
|
+
## Docker-in-Docker Alternative
|
|
189
|
+
|
|
190
|
+
If you need isolation or are working in GitHub Codespaces, use the **docker-in-docker** overlay instead:
|
|
191
|
+
|
|
192
|
+
- ✅ **Isolated** - Separate Docker daemon
|
|
193
|
+
- ✅ **Portable** - Works in Codespaces
|
|
194
|
+
- ❌ **Slower** - Nested virtualization overhead
|
|
195
|
+
- ❌ **Larger** - Duplicates images
|
|
196
|
+
|
|
197
|
+
**Switch overlays:**
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
# Remove this overlay, add docker-in-docker
|
|
201
|
+
# Conflicts are enforced in index.yml
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
## Best Practices
|
|
205
|
+
|
|
206
|
+
1. **Use .dockerignore** - Exclude unnecessary files from build context
|
|
207
|
+
2. **Multi-stage builds** - Reduce final image size
|
|
208
|
+
3. **Layer caching** - Order Dockerfile commands for optimal caching
|
|
209
|
+
4. **Clean up** - Regularly prune unused images/containers
|
|
210
|
+
5. **Named volumes** - Use Docker volumes instead of bind mounts when possible
|
|
211
|
+
6. **Network isolation** - Use custom networks for container communication
|
|
212
|
+
|
|
213
|
+
## Common Workflows
|
|
214
|
+
|
|
215
|
+
### Building and Testing
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
# Build application
|
|
219
|
+
docker build -t myapp:dev .
|
|
220
|
+
|
|
221
|
+
# Run tests
|
|
222
|
+
docker run --rm myapp:dev npm test
|
|
223
|
+
|
|
224
|
+
# Run application
|
|
225
|
+
docker run -p 3000:3000 myapp:dev
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### Docker Compose Development
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
# Start all services
|
|
232
|
+
docker-compose up -d
|
|
233
|
+
|
|
234
|
+
# Watch logs
|
|
235
|
+
docker-compose logs -f app
|
|
236
|
+
|
|
237
|
+
# Rebuild specific service
|
|
238
|
+
docker-compose up -d --build app
|
|
239
|
+
|
|
240
|
+
# Run command in service
|
|
241
|
+
docker-compose exec app bash
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
## Related Overlays
|
|
245
|
+
|
|
246
|
+
- **docker-in-docker** - Conflicts with this overlay (use one or the other)
|
|
247
|
+
- **kubectl-helm** - For Kubernetes development
|
|
248
|
+
- **nodejs/python/dotnet** - Build containerized applications
|
|
249
|
+
- **postgres/redis** - Database services (can run via Docker)
|
|
250
|
+
|
|
251
|
+
## Notes
|
|
252
|
+
|
|
253
|
+
- This overlay conflicts with **docker-in-docker** - only one can be selected
|
|
254
|
+
- Requires Docker Desktop (or Docker daemon) running on host
|
|
255
|
+
- Does **not** work in GitHub Codespaces (use docker-in-docker instead)
|
|
256
|
+
- Socket mount path: `/var/run/docker-host.sock`
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
id: docker-sock
|
|
2
|
+
name: Docker (host socket)
|
|
3
|
+
description: Access host Docker daemon via socket mount (fast, local-only)
|
|
4
|
+
category: dev
|
|
5
|
+
supports: []
|
|
6
|
+
requires: []
|
|
7
|
+
suggests: []
|
|
8
|
+
conflicts:
|
|
9
|
+
- docker-in-docker
|
|
10
|
+
tags:
|
|
11
|
+
- dev
|
|
12
|
+
- docker
|
|
13
|
+
ports: []
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# .NET Overlay
|
|
2
|
+
|
|
3
|
+
Adds .NET 10 SDK with C# development tools and common global tools.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **.NET 10 SDK** with C# compiler
|
|
8
|
+
- **VS Code Extensions:**
|
|
9
|
+
- C# Dev Kit (ms-dotnettools.csdevkit)
|
|
10
|
+
- C# (ms-dotnettools.csharp)
|
|
11
|
+
- GUID Generator
|
|
12
|
+
- Nuke Build
|
|
13
|
+
- REST Client
|
|
14
|
+
- **Global Tools:** Configured via `global-tools.txt`
|
|
15
|
+
- **Automatic restore:** Runs `dotnet restore` on container creation
|
|
16
|
+
|
|
17
|
+
## Customizing Global Tools
|
|
18
|
+
|
|
19
|
+
The overlay includes a customizable `global-tools.txt` file in `.devcontainer/`:
|
|
20
|
+
|
|
21
|
+
**`.devcontainer/global-tools.txt`:**
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
# .NET Global Tools
|
|
25
|
+
# Format: one tool per line, with optional version
|
|
26
|
+
# Example: dotnet-ef::8.0.0
|
|
27
|
+
|
|
28
|
+
# Entity Framework Core CLI
|
|
29
|
+
dotnet-ef
|
|
30
|
+
|
|
31
|
+
# Code formatter
|
|
32
|
+
dotnet-format
|
|
33
|
+
|
|
34
|
+
# Dependency updater
|
|
35
|
+
dotnet-outdated-tool
|
|
36
|
+
|
|
37
|
+
# Add your custom tools here
|
|
38
|
+
cake.tool
|
|
39
|
+
dotnet-reportgenerator-globaltool
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Version Pinning
|
|
43
|
+
|
|
44
|
+
Pin specific versions using `::`:
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
dotnet-ef::8.0.0
|
|
48
|
+
dotnet-format::5.1.0
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**Rebuild container** after editing to install new tools.
|
|
52
|
+
|
|
53
|
+
## Common Global Tools
|
|
54
|
+
|
|
55
|
+
### Development
|
|
56
|
+
|
|
57
|
+
- `dotnet-ef` - Entity Framework Core migrations
|
|
58
|
+
- `dotnet-format` - Code formatter
|
|
59
|
+
- `dotnet-outdated-tool` - Check for outdated packages
|
|
60
|
+
- `dotnet-reportgenerator-globaltool` - Coverage reports
|
|
61
|
+
|
|
62
|
+
### Build & Deploy
|
|
63
|
+
|
|
64
|
+
- `cake.tool` - Cake build system
|
|
65
|
+
- `nuke.globaltool` - Nuke build system
|
|
66
|
+
- `dotnet-sonarscanner` - SonarQube scanner
|
|
67
|
+
|
|
68
|
+
### Testing & Quality
|
|
69
|
+
|
|
70
|
+
- `dotnet-stryker` - Mutation testing
|
|
71
|
+
- `dotnet-coverage` - Code coverage
|
|
72
|
+
- `dotnet-depends` - Dependency analyzer
|
|
73
|
+
|
|
74
|
+
## Project Structure
|
|
75
|
+
|
|
76
|
+
Works with:
|
|
77
|
+
|
|
78
|
+
- **.NET solutions** (`.sln`)
|
|
79
|
+
- **Projects** (`.csproj`, `.fsproj`, `.vbproj`)
|
|
80
|
+
- **Global.json** for SDK version pinning
|
|
81
|
+
|
|
82
|
+
## Automatic Setup
|
|
83
|
+
|
|
84
|
+
On container creation:
|
|
85
|
+
|
|
86
|
+
1. ✅ Installs global tools from `global-tools.txt`
|
|
87
|
+
2. ✅ Runs `dotnet restore` (if solution/project exists)
|
|
88
|
+
3. ✅ Lists installed global tools for verification
|
|
89
|
+
|
|
90
|
+
## Common Workflows
|
|
91
|
+
|
|
92
|
+
### Web API Development
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
dotnet new webapi -n MyApi
|
|
96
|
+
dotnet run
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Adding EF Migrations
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
dotnet ef migrations add InitialCreate
|
|
103
|
+
dotnet ef database update
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Running Tests with Coverage
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
dotnet test /p:CollectCoverage=true
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Best Practices
|
|
113
|
+
|
|
114
|
+
1. **Use global.json** to pin SDK version
|
|
115
|
+
2. **Version control global-tools.txt** for team consistency
|
|
116
|
+
3. **Pin tool versions** for reproducibility
|
|
117
|
+
4. **Add .gitignore** for bin/, obj/, .vs/
|
|
118
|
+
|
|
119
|
+
## Troubleshooting
|
|
120
|
+
|
|
121
|
+
### Tool not found after adding to global-tools.txt
|
|
122
|
+
|
|
123
|
+
Rebuild the container:
|
|
124
|
+
|
|
125
|
+
- **VS Code:** `Cmd+Shift+P` → "Dev Containers: Rebuild Container"
|
|
126
|
+
|
|
127
|
+
### Restore fails
|
|
128
|
+
|
|
129
|
+
Check .NET SDK version in `global.json` matches container.
|
|
130
|
+
|
|
131
|
+
### Want to use local tools instead?
|
|
132
|
+
|
|
133
|
+
Create `.config/dotnet-tools.json`:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
dotnet new tool-manifest
|
|
137
|
+
dotnet tool install dotnet-ef
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Local tools are project-specific and preferred for reproducibility.
|
|
141
|
+
|
|
142
|
+
## Related Overlays
|
|
143
|
+
|
|
144
|
+
- **sqlserver** - SQL Server for .NET apps
|
|
145
|
+
- **postgres** - PostgreSQL with EF Core
|
|
146
|
+
- **redis** - Caching layer
|
|
147
|
+
- **otel-collector** - OpenTelemetry for instrumentation
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
|
|
3
|
+
"features": {
|
|
4
|
+
"./features/cross-distro-packages": {
|
|
5
|
+
"apt": "xdg-utils pass sshpass build-essential netcat-traditional iputils-ping dnsutils git-lfs sqlite3",
|
|
6
|
+
"apk": "xdg-utils pass sshpass build-base netcat-openbsd iputils bind-tools git-lfs sqlite"
|
|
7
|
+
},
|
|
8
|
+
"ghcr.io/devcontainers/features/dotnet:2": {
|
|
9
|
+
"version": "10.0"
|
|
10
|
+
},
|
|
11
|
+
"ghcr.io/eitsupi/devcontainer-features/jq-likes:2": {
|
|
12
|
+
"jq": "latest",
|
|
13
|
+
"yq": "latest"
|
|
14
|
+
},
|
|
15
|
+
"ghcr.io/devcontainers/features/github-cli:1": {}
|
|
16
|
+
},
|
|
17
|
+
"customizations": {
|
|
18
|
+
"vscode": {
|
|
19
|
+
"extensions": [
|
|
20
|
+
"ms-dotnettools.csdevkit",
|
|
21
|
+
"heaths.vscode-guid",
|
|
22
|
+
"nuke.support",
|
|
23
|
+
"humao.rest-client"
|
|
24
|
+
],
|
|
25
|
+
"settings": {
|
|
26
|
+
"[csharp]": {
|
|
27
|
+
"editor.formatOnSave": true
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"forwardPorts": [5000, 5001, 8080],
|
|
33
|
+
"portsAttributes": {
|
|
34
|
+
"5000": {
|
|
35
|
+
"label": "HTTP",
|
|
36
|
+
"onAutoForward": "notify"
|
|
37
|
+
},
|
|
38
|
+
"5001": {
|
|
39
|
+
"label": "HTTPS",
|
|
40
|
+
"onAutoForward": "notify"
|
|
41
|
+
},
|
|
42
|
+
"8080": {
|
|
43
|
+
"label": "Web App",
|
|
44
|
+
"onAutoForward": "openBrowser"
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"remoteEnv": {
|
|
48
|
+
"PATH": "${containerEnv:HOME}/.dotnet/tools:${containerEnv:PATH}",
|
|
49
|
+
"TESTCONTAINERS_HOST_OVERRIDE": "host.docker.internal"
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# .NET Global Tools
|
|
2
|
+
# Customize this file to add or remove .NET global tools
|
|
3
|
+
# Format: one tool per line, with optional version
|
|
4
|
+
# Example: dotnet-ef::8.0.0
|
|
5
|
+
|
|
6
|
+
# Entity Framework Core CLI
|
|
7
|
+
dotnet-ef
|
|
8
|
+
|
|
9
|
+
# Code formatter
|
|
10
|
+
dotnet-format
|
|
11
|
+
|
|
12
|
+
# Dependency updater
|
|
13
|
+
dotnet-outdated-tool
|
|
14
|
+
|
|
15
|
+
# Report generator for code coverage
|
|
16
|
+
# dotnet-reportgenerator-globaltool
|
|
17
|
+
|
|
18
|
+
# Cake build tool
|
|
19
|
+
# cake.tool
|
|
20
|
+
|
|
21
|
+
# .NET Aspire workload
|
|
22
|
+
# Microsoft.NET.Sdk.Aspire.Manifest-8.0.100
|
|
23
|
+
|
|
24
|
+
# Add your custom tools here
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# .NET setup script - Install global tools and configure environment
|
|
3
|
+
|
|
4
|
+
set -e
|
|
5
|
+
|
|
6
|
+
# Extract overlay name from script filename (setup-<overlay>.sh -> <overlay>)
|
|
7
|
+
OVERLAY_NAME=$(basename "$0" | sed 's/setup-//;s/\.sh$//')
|
|
8
|
+
|
|
9
|
+
echo "🔧 Installing .NET global tools..."
|
|
10
|
+
|
|
11
|
+
# Read tools from configuration file if it exists
|
|
12
|
+
if [ -f ".devcontainer/global-tools-${OVERLAY_NAME}.txt" ]; then
|
|
13
|
+
echo "📦 Installing tools from global-tools-${OVERLAY_NAME}.txt..."
|
|
14
|
+
|
|
15
|
+
while IFS= read -r line || [ -n "$line" ]; do
|
|
16
|
+
# Skip comments and empty lines
|
|
17
|
+
[[ "$line" =~ ^#.*$ ]] && continue
|
|
18
|
+
[[ -z "$line" ]] && continue
|
|
19
|
+
|
|
20
|
+
# Parse tool name and optional version (format: tool::version)
|
|
21
|
+
if [[ "$line" =~ ^(.+)::(.+)$ ]]; then
|
|
22
|
+
tool="${BASH_REMATCH[1]}"
|
|
23
|
+
version="${BASH_REMATCH[2]}"
|
|
24
|
+
echo " Installing $tool version $version..."
|
|
25
|
+
dotnet tool install --global "$tool" --version "$version" || echo " ⚠️ $tool already installed or failed"
|
|
26
|
+
else
|
|
27
|
+
tool="$line"
|
|
28
|
+
echo " Installing $tool..."
|
|
29
|
+
dotnet tool install --global "$tool" || echo " ⚠️ $tool already installed or failed"
|
|
30
|
+
fi
|
|
31
|
+
done < ".devcontainer/global-tools-${OVERLAY_NAME}.txt"
|
|
32
|
+
else
|
|
33
|
+
# Fallback to hardcoded list
|
|
34
|
+
echo "📦 Installing default .NET global tools..."
|
|
35
|
+
dotnet tool install --global dotnet-ef || echo "dotnet-ef already installed"
|
|
36
|
+
dotnet tool install --global dotnet-format || echo "dotnet-format already installed"
|
|
37
|
+
dotnet tool install --global dotnet-outdated-tool || echo "dotnet-outdated-tool already installed"
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
# Verify installations
|
|
41
|
+
echo "✓ .NET global tools installed:"
|
|
42
|
+
dotnet tool list --global
|
|
43
|
+
|
|
44
|
+
# Restore project dependencies if solution/project exists
|
|
45
|
+
if [ -f "*.sln" ] || [ -f "*.csproj" ] || [ -f "*.fsproj" ]; then
|
|
46
|
+
echo "📦 Restoring .NET dependencies..."
|
|
47
|
+
dotnet restore || true
|
|
48
|
+
echo "✓ .NET dependencies restored"
|
|
49
|
+
fi
|
|
50
|
+
|
|
51
|
+
echo "✓ .NET setup complete"
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Verification script for .NET overlay
|
|
3
|
+
# Confirms .NET SDK is installed
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
echo "🔍 Verifying .NET overlay..."
|
|
8
|
+
echo ""
|
|
9
|
+
|
|
10
|
+
# Check dotnet is installed
|
|
11
|
+
echo "1️⃣ Checking .NET SDK..."
|
|
12
|
+
if command -v dotnet &> /dev/null; then
|
|
13
|
+
dotnet --version
|
|
14
|
+
echo " ✅ .NET SDK found"
|
|
15
|
+
else
|
|
16
|
+
echo " ❌ .NET SDK not found"
|
|
17
|
+
exit 1
|
|
18
|
+
fi
|
|
19
|
+
|
|
20
|
+
# List installed SDKs
|
|
21
|
+
echo ""
|
|
22
|
+
echo "2️⃣ Installed .NET SDKs:"
|
|
23
|
+
dotnet --list-sdks
|
|
24
|
+
|
|
25
|
+
echo ""
|
|
26
|
+
echo "✅ .NET overlay verification complete"
|