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,534 @@
|
|
|
1
|
+
# Docker-in-Docker Overlay
|
|
2
|
+
|
|
3
|
+
Run a fully isolated Docker daemon inside your development container. This is true Docker-in-Docker (DinD).
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Isolated Docker daemon** - Separate Docker environment inside the container
|
|
8
|
+
- **Portable** - Works in GitHub Codespaces and remote environments
|
|
9
|
+
- **Full Docker support** - Build, run, and manage containers independently
|
|
10
|
+
- **Network isolation** - Containers run in their own network namespace
|
|
11
|
+
- **Safe for multi-tenant** - No shared Docker daemon with host
|
|
12
|
+
|
|
13
|
+
## How It Works
|
|
14
|
+
|
|
15
|
+
This overlay runs a full Docker daemon inside the development container using the official `docker:dind` (Docker-in-Docker) feature from Microsoft. Unlike **docker-sock** which mounts the host's Docker socket, this creates a completely isolated Docker environment.
|
|
16
|
+
|
|
17
|
+
**Architecture:**
|
|
18
|
+
|
|
19
|
+
```mermaid
|
|
20
|
+
graph TD
|
|
21
|
+
A[Development Container] --> B[Docker Daemon DinD]
|
|
22
|
+
B --> C[Container 1]
|
|
23
|
+
B --> D[Container 2]
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Use Cases
|
|
27
|
+
|
|
28
|
+
### Required for These Environments
|
|
29
|
+
|
|
30
|
+
- **GitHub Codespaces** - No access to host Docker
|
|
31
|
+
- **Remote containers** - Cloud-based dev environments
|
|
32
|
+
- **Multi-tenant systems** - Shared development servers
|
|
33
|
+
- **CI/CD environments** - Isolated build environments
|
|
34
|
+
|
|
35
|
+
### Development Workflows
|
|
36
|
+
|
|
37
|
+
- **Container builds** - Build Docker images in isolated environment
|
|
38
|
+
- **Testing multi-container apps** - Use docker-compose for integration tests
|
|
39
|
+
- **Container experimentation** - Test without affecting host
|
|
40
|
+
- **Learning Docker** - Safe sandbox environment
|
|
41
|
+
|
|
42
|
+
### Security-Sensitive Scenarios
|
|
43
|
+
|
|
44
|
+
- **Untrusted code** - Run potentially malicious containers safely
|
|
45
|
+
- **Shared environments** - Multiple users without host access
|
|
46
|
+
- **Production-like isolation** - Closer to production container runtime
|
|
47
|
+
|
|
48
|
+
## Common Commands
|
|
49
|
+
|
|
50
|
+
All standard Docker commands work inside the container:
|
|
51
|
+
|
|
52
|
+
### Building Images
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# Build from Dockerfile
|
|
56
|
+
docker build -t myapp:latest .
|
|
57
|
+
|
|
58
|
+
# Build with build args
|
|
59
|
+
docker build --build-arg NODE_VERSION=20 -t myapp .
|
|
60
|
+
|
|
61
|
+
# Multi-stage build
|
|
62
|
+
docker build --target production -t myapp:prod .
|
|
63
|
+
|
|
64
|
+
# Build with cache from registry
|
|
65
|
+
docker build --cache-from myapp:latest -t myapp:latest .
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Running Containers
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
# Run container
|
|
72
|
+
docker run -d -p 8080:80 nginx
|
|
73
|
+
|
|
74
|
+
# Run with volume mount
|
|
75
|
+
docker run -v $(pwd):/app myapp
|
|
76
|
+
|
|
77
|
+
# Run with environment variables
|
|
78
|
+
docker run -e DATABASE_URL=postgres://... myapp
|
|
79
|
+
|
|
80
|
+
# Run interactively
|
|
81
|
+
docker run -it ubuntu bash
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Docker Compose
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
# Start services
|
|
88
|
+
docker-compose up -d
|
|
89
|
+
|
|
90
|
+
# View logs
|
|
91
|
+
docker-compose logs -f
|
|
92
|
+
|
|
93
|
+
# Stop services
|
|
94
|
+
docker-compose down
|
|
95
|
+
|
|
96
|
+
# Rebuild and restart
|
|
97
|
+
docker-compose up -d --build
|
|
98
|
+
|
|
99
|
+
# Scale services
|
|
100
|
+
docker-compose up -d --scale web=3
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Image Management
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# List images
|
|
107
|
+
docker images
|
|
108
|
+
|
|
109
|
+
# Tag image
|
|
110
|
+
docker tag myapp:latest myapp:v1.0.0
|
|
111
|
+
|
|
112
|
+
# Push to registry
|
|
113
|
+
docker push myapp:latest
|
|
114
|
+
|
|
115
|
+
# Pull image
|
|
116
|
+
docker pull nginx:latest
|
|
117
|
+
|
|
118
|
+
# Remove image
|
|
119
|
+
docker rmi myapp:latest
|
|
120
|
+
|
|
121
|
+
# Prune unused images
|
|
122
|
+
docker image prune -a
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Container Management
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
# List running containers
|
|
129
|
+
docker ps
|
|
130
|
+
|
|
131
|
+
# List all containers
|
|
132
|
+
docker ps -a
|
|
133
|
+
|
|
134
|
+
# Stop container
|
|
135
|
+
docker stop CONTAINER_ID
|
|
136
|
+
|
|
137
|
+
# Remove container
|
|
138
|
+
docker rm CONTAINER_ID
|
|
139
|
+
|
|
140
|
+
# Execute command in container
|
|
141
|
+
docker exec -it CONTAINER_ID bash
|
|
142
|
+
|
|
143
|
+
# View logs
|
|
144
|
+
docker logs CONTAINER_ID
|
|
145
|
+
|
|
146
|
+
# Follow logs
|
|
147
|
+
docker logs -f CONTAINER_ID
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Cleanup
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
# Remove all stopped containers
|
|
154
|
+
docker container prune
|
|
155
|
+
|
|
156
|
+
# Remove all unused images
|
|
157
|
+
docker image prune -a
|
|
158
|
+
|
|
159
|
+
# Remove all unused volumes
|
|
160
|
+
docker volume prune
|
|
161
|
+
|
|
162
|
+
# Remove everything
|
|
163
|
+
docker system prune -a --volumes
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## Docker-in-Docker vs Docker-outside-of-Docker
|
|
167
|
+
|
|
168
|
+
| Feature | Docker-in-Docker (This) | Docker-outside-of-Docker |
|
|
169
|
+
| ------------------ | ------------------------ | ------------------------ |
|
|
170
|
+
| **Isolation** | ✅ Fully isolated | ❌ Shares host daemon |
|
|
171
|
+
| **Performance** | ⚠️ Slower (nested) | ✅ Fast (native) |
|
|
172
|
+
| **Disk Usage** | ⚠️ Duplicates images | ✅ Shared image cache |
|
|
173
|
+
| **Portability** | ✅ Works everywhere | ❌ Requires host Docker |
|
|
174
|
+
| **Security** | ✅ Isolated | ⚠️ Host access |
|
|
175
|
+
| **Codespaces** | ✅ Supported | ❌ Not available |
|
|
176
|
+
| **Startup Time** | ⚠️ Slower (daemon start) | ✅ Instant |
|
|
177
|
+
| **Resource Usage** | ⚠️ Higher overhead | ✅ Minimal overhead |
|
|
178
|
+
|
|
179
|
+
## When to Use Docker-in-Docker
|
|
180
|
+
|
|
181
|
+
✅ **Use DinD when:**
|
|
182
|
+
|
|
183
|
+
- Working in GitHub Codespaces or cloud IDEs
|
|
184
|
+
- Need complete isolation from host
|
|
185
|
+
- Sharing dev environment with untrusted users
|
|
186
|
+
- Simulating CI/CD environments
|
|
187
|
+
- No access to host Docker daemon
|
|
188
|
+
- Security and isolation are priorities
|
|
189
|
+
|
|
190
|
+
❌ **Use docker-sock instead when:**
|
|
191
|
+
|
|
192
|
+
- Working on local machine with Docker Desktop
|
|
193
|
+
- Need maximum performance
|
|
194
|
+
- Building large images frequently
|
|
195
|
+
- Want to share images with host
|
|
196
|
+
- Resource efficiency is critical
|
|
197
|
+
|
|
198
|
+
## Configuration
|
|
199
|
+
|
|
200
|
+
### Storage Driver
|
|
201
|
+
|
|
202
|
+
The DinD daemon uses `overlay2` storage driver by default. For production-like environments:
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
# Check storage driver
|
|
206
|
+
docker info | grep "Storage Driver"
|
|
207
|
+
|
|
208
|
+
# Expected output:
|
|
209
|
+
# Storage Driver: overlay2
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Registry Authentication
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
# Login to Docker Hub
|
|
216
|
+
docker login
|
|
217
|
+
|
|
218
|
+
# Login to private registry
|
|
219
|
+
docker login registry.example.com
|
|
220
|
+
|
|
221
|
+
# Login to GitHub Container Registry
|
|
222
|
+
echo $GITHUB_TOKEN | docker login ghcr.io -u USERNAME --password-stdin
|
|
223
|
+
|
|
224
|
+
# Login to AWS ECR (requires aws-cli overlay)
|
|
225
|
+
aws ecr get-login-password --region us-east-1 | \
|
|
226
|
+
docker login --username AWS --password-stdin 123456789012.dkr.ecr.us-east-1.amazonaws.com
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### Docker Daemon Configuration
|
|
230
|
+
|
|
231
|
+
The Docker daemon inside the container can be configured via the devcontainer feature settings. Advanced users can modify daemon settings.
|
|
232
|
+
|
|
233
|
+
## Networking
|
|
234
|
+
|
|
235
|
+
### Container Networking
|
|
236
|
+
|
|
237
|
+
Containers created inside DinD use their own network namespace:
|
|
238
|
+
|
|
239
|
+
```bash
|
|
240
|
+
# Create custom network
|
|
241
|
+
docker network create mynetwork
|
|
242
|
+
|
|
243
|
+
# Run containers on network
|
|
244
|
+
docker run -d --name db --network mynetwork postgres
|
|
245
|
+
docker run -d --name app --network mynetwork myapp
|
|
246
|
+
|
|
247
|
+
# Containers can communicate by name
|
|
248
|
+
# app can connect to db:5432
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### Port Publishing
|
|
252
|
+
|
|
253
|
+
```bash
|
|
254
|
+
# Publish port from DinD container
|
|
255
|
+
docker run -d -p 8080:80 nginx
|
|
256
|
+
|
|
257
|
+
# Access from dev container
|
|
258
|
+
curl http://localhost:8080
|
|
259
|
+
|
|
260
|
+
# Access from host (requires port forwarding)
|
|
261
|
+
# VS Code automatically forwards ports
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
### Accessing Services from Host
|
|
265
|
+
|
|
266
|
+
When running containers inside DinD, published ports need to be accessible:
|
|
267
|
+
|
|
268
|
+
1. **VS Code** - Automatically detects and forwards ports
|
|
269
|
+
2. **Manual** - Use VS Code port forwarding UI
|
|
270
|
+
3. **devcontainer.json** - Pre-configure port forwarding
|
|
271
|
+
|
|
272
|
+
## Performance Considerations
|
|
273
|
+
|
|
274
|
+
### Image Caching
|
|
275
|
+
|
|
276
|
+
DinD has its own image cache. To optimize:
|
|
277
|
+
|
|
278
|
+
```bash
|
|
279
|
+
# Pull base images once
|
|
280
|
+
docker pull node:20
|
|
281
|
+
docker pull postgres:16
|
|
282
|
+
docker pull redis:7
|
|
283
|
+
|
|
284
|
+
# Use multi-stage builds to reduce size
|
|
285
|
+
# Use .dockerignore to exclude files
|
|
286
|
+
# Layer Dockerfile commands for optimal caching
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
### Storage Management
|
|
290
|
+
|
|
291
|
+
DinD storage is ephemeral by default (lost on rebuild):
|
|
292
|
+
|
|
293
|
+
```bash
|
|
294
|
+
# Check disk usage
|
|
295
|
+
docker system df
|
|
296
|
+
|
|
297
|
+
# Clean up regularly
|
|
298
|
+
docker system prune -a
|
|
299
|
+
|
|
300
|
+
# Monitor space
|
|
301
|
+
df -h
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
### Resource Limits
|
|
305
|
+
|
|
306
|
+
The Docker daemon inherits resource limits from the dev container. For resource-intensive builds:
|
|
307
|
+
|
|
308
|
+
```json
|
|
309
|
+
// In devcontainer.json
|
|
310
|
+
{
|
|
311
|
+
"hostRequirements": {
|
|
312
|
+
"cpus": 4,
|
|
313
|
+
"memory": "8gb"
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
## Building for Multiple Platforms
|
|
319
|
+
|
|
320
|
+
```bash
|
|
321
|
+
# Enable buildx
|
|
322
|
+
docker buildx create --use
|
|
323
|
+
|
|
324
|
+
# Build for multiple architectures
|
|
325
|
+
docker buildx build \
|
|
326
|
+
--platform linux/amd64,linux/arm64 \
|
|
327
|
+
-t myapp:latest \
|
|
328
|
+
--push \
|
|
329
|
+
.
|
|
330
|
+
|
|
331
|
+
# Build for specific platform
|
|
332
|
+
docker buildx build \
|
|
333
|
+
--platform linux/amd64 \
|
|
334
|
+
-t myapp:amd64 \
|
|
335
|
+
.
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
## Troubleshooting
|
|
339
|
+
|
|
340
|
+
### Docker daemon not running
|
|
341
|
+
|
|
342
|
+
The daemon should start automatically. If not:
|
|
343
|
+
|
|
344
|
+
```bash
|
|
345
|
+
# Check if Docker is available
|
|
346
|
+
docker info
|
|
347
|
+
|
|
348
|
+
# If not available, rebuild container
|
|
349
|
+
# VS Code: Cmd+Shift+P → "Dev Containers: Rebuild Container"
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
### Permission denied errors
|
|
353
|
+
|
|
354
|
+
```bash
|
|
355
|
+
# Verify user is in docker group
|
|
356
|
+
groups
|
|
357
|
+
|
|
358
|
+
# Expected: docker group should be listed
|
|
359
|
+
# The devcontainer feature handles this automatically
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
### Out of disk space
|
|
363
|
+
|
|
364
|
+
```bash
|
|
365
|
+
# Check disk usage
|
|
366
|
+
docker system df
|
|
367
|
+
|
|
368
|
+
# Clean up
|
|
369
|
+
docker system prune -a --volumes
|
|
370
|
+
|
|
371
|
+
# Remove specific images
|
|
372
|
+
docker rmi $(docker images -q -f dangling=true)
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
### Slow build times
|
|
376
|
+
|
|
377
|
+
```bash
|
|
378
|
+
# Use BuildKit for faster builds
|
|
379
|
+
export DOCKER_BUILDKIT=1
|
|
380
|
+
|
|
381
|
+
# Use build cache
|
|
382
|
+
docker build --cache-from myapp:latest -t myapp:latest .
|
|
383
|
+
|
|
384
|
+
# Optimize Dockerfile layer ordering
|
|
385
|
+
# Put frequently changing layers last
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
### Cannot connect to containers
|
|
389
|
+
|
|
390
|
+
```bash
|
|
391
|
+
# Verify port publishing
|
|
392
|
+
docker ps
|
|
393
|
+
|
|
394
|
+
# Check port is published (0.0.0.0:8080->80/tcp)
|
|
395
|
+
docker port CONTAINER_NAME
|
|
396
|
+
|
|
397
|
+
# Verify VS Code port forwarding
|
|
398
|
+
# Check Ports tab in VS Code
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
### Registry authentication fails
|
|
402
|
+
|
|
403
|
+
```bash
|
|
404
|
+
# Re-login to registry
|
|
405
|
+
docker logout
|
|
406
|
+
docker login
|
|
407
|
+
|
|
408
|
+
# Check credentials
|
|
409
|
+
cat ~/.docker/config.json
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
## Security Considerations
|
|
413
|
+
|
|
414
|
+
### Privileged Mode
|
|
415
|
+
|
|
416
|
+
⚠️ **DinD requires privileged mode to run nested containers**
|
|
417
|
+
|
|
418
|
+
This is handled by the devcontainer feature but means:
|
|
419
|
+
|
|
420
|
+
- Container has elevated permissions
|
|
421
|
+
- Not recommended for untrusted code execution
|
|
422
|
+
- Still safer than docker-sock (no host access)
|
|
423
|
+
|
|
424
|
+
### Image Security
|
|
425
|
+
|
|
426
|
+
```bash
|
|
427
|
+
# Scan images for vulnerabilities
|
|
428
|
+
docker scan myapp:latest
|
|
429
|
+
|
|
430
|
+
# Use official base images
|
|
431
|
+
FROM node:20-alpine # Better than node:20
|
|
432
|
+
|
|
433
|
+
# Keep images updated
|
|
434
|
+
docker pull node:20-alpine
|
|
435
|
+
docker build --no-cache -t myapp .
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
### Secrets Management
|
|
439
|
+
|
|
440
|
+
⚠️ **Never bake secrets into images**
|
|
441
|
+
|
|
442
|
+
```bash
|
|
443
|
+
# Use build secrets (not in final image)
|
|
444
|
+
docker build --secret id=mysecret,src=/path/to/secret .
|
|
445
|
+
|
|
446
|
+
# Use multi-stage builds
|
|
447
|
+
# Secrets only in build stage, not final image
|
|
448
|
+
|
|
449
|
+
# Use environment variables at runtime
|
|
450
|
+
docker run -e API_KEY=$API_KEY myapp
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
## Best Practices
|
|
454
|
+
|
|
455
|
+
1. **Clean up regularly** - Run `docker system prune` to free space
|
|
456
|
+
2. **Use .dockerignore** - Exclude unnecessary files from build context
|
|
457
|
+
3. **Multi-stage builds** - Reduce final image size
|
|
458
|
+
4. **Layer ordering** - Put frequently changing layers last
|
|
459
|
+
5. **Pin versions** - Use specific tags, not `latest`
|
|
460
|
+
6. **Scan images** - Check for vulnerabilities
|
|
461
|
+
7. **Use BuildKit** - Enable for better caching and performance
|
|
462
|
+
8. **Limit privileges** - Run containers as non-root when possible
|
|
463
|
+
|
|
464
|
+
## Common Workflows
|
|
465
|
+
|
|
466
|
+
### Local Development with Docker Compose
|
|
467
|
+
|
|
468
|
+
```bash
|
|
469
|
+
# Create docker-compose.yml
|
|
470
|
+
cat > docker-compose.yml <<EOF
|
|
471
|
+
version: '3.8'
|
|
472
|
+
services:
|
|
473
|
+
app:
|
|
474
|
+
build: .
|
|
475
|
+
ports:
|
|
476
|
+
- "3000:3000"
|
|
477
|
+
environment:
|
|
478
|
+
- DATABASE_URL=postgres://db:5432/mydb
|
|
479
|
+
depends_on:
|
|
480
|
+
- db
|
|
481
|
+
db:
|
|
482
|
+
image: postgres:16
|
|
483
|
+
environment:
|
|
484
|
+
- POSTGRES_PASSWORD=password
|
|
485
|
+
EOF
|
|
486
|
+
|
|
487
|
+
# Start services
|
|
488
|
+
docker-compose up -d
|
|
489
|
+
|
|
490
|
+
# View logs
|
|
491
|
+
docker-compose logs -f
|
|
492
|
+
|
|
493
|
+
# Stop services
|
|
494
|
+
docker-compose down
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
### Building and Testing
|
|
498
|
+
|
|
499
|
+
```bash
|
|
500
|
+
# Build application
|
|
501
|
+
docker build -t myapp:dev .
|
|
502
|
+
|
|
503
|
+
# Run tests
|
|
504
|
+
docker run --rm myapp:dev npm test
|
|
505
|
+
|
|
506
|
+
# Run application
|
|
507
|
+
docker run -p 3000:3000 myapp:dev
|
|
508
|
+
|
|
509
|
+
# Build production image
|
|
510
|
+
docker build --target production -t myapp:prod .
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
## Related Overlays
|
|
514
|
+
|
|
515
|
+
- **docker-sock** - Conflicts with this overlay (use one or the other)
|
|
516
|
+
- **kubectl-helm** - For deploying to Kubernetes
|
|
517
|
+
- **nodejs/python/dotnet** - Build containerized applications
|
|
518
|
+
- **postgres/redis** - Database services (can run via Docker)
|
|
519
|
+
|
|
520
|
+
## Additional Resources
|
|
521
|
+
|
|
522
|
+
- [Docker-in-Docker Official Documentation](https://github.com/devcontainers/features/tree/main/src/docker-in-docker)
|
|
523
|
+
- [Docker Documentation](https://docs.docker.com/)
|
|
524
|
+
- [Docker Compose Documentation](https://docs.docker.com/compose/)
|
|
525
|
+
- [Best practices for writing Dockerfiles](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/)
|
|
526
|
+
- [Docker BuildKit](https://docs.docker.com/build/buildkit/)
|
|
527
|
+
|
|
528
|
+
## Notes
|
|
529
|
+
|
|
530
|
+
- This overlay **conflicts** with **docker-sock** - only one can be selected
|
|
531
|
+
- Works in **all environments** including GitHub Codespaces
|
|
532
|
+
- DinD storage is **ephemeral** (reset on container rebuild)
|
|
533
|
+
- Daemon starts automatically when container starts
|
|
534
|
+
- Performance is slower than docker-sock but more portable
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
|
|
3
|
+
"features": {
|
|
4
|
+
"ghcr.io/devcontainers/features/docker-in-docker:2": {
|
|
5
|
+
"version": "latest",
|
|
6
|
+
"moby": false,
|
|
7
|
+
"dockerDashComposeVersion": "v2"
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
id: docker-in-docker
|
|
2
|
+
name: Docker-in-Docker
|
|
3
|
+
description: Isolated Docker daemon inside container (portable, works in Codespaces)
|
|
4
|
+
category: dev
|
|
5
|
+
supports: []
|
|
6
|
+
requires: []
|
|
7
|
+
suggests: []
|
|
8
|
+
conflicts:
|
|
9
|
+
- docker-sock
|
|
10
|
+
tags:
|
|
11
|
+
- dev
|
|
12
|
+
- docker
|
|
13
|
+
ports: []
|