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.
Files changed (327) hide show
  1. package/README.md +843 -0
  2. package/dist/scripts/init.d.ts +3 -0
  3. package/dist/scripts/init.d.ts.map +1 -0
  4. package/dist/scripts/init.js +1190 -0
  5. package/dist/scripts/init.js.map +1 -0
  6. package/dist/scripts/migrate-to-manifests.d.ts +12 -0
  7. package/dist/scripts/migrate-to-manifests.d.ts.map +1 -0
  8. package/dist/scripts/migrate-to-manifests.js +230 -0
  9. package/dist/scripts/migrate-to-manifests.js.map +1 -0
  10. package/dist/tool/questionnaire/composer.d.ts +6 -0
  11. package/dist/tool/questionnaire/composer.d.ts.map +1 -0
  12. package/dist/tool/questionnaire/composer.js +1232 -0
  13. package/dist/tool/questionnaire/composer.js.map +1 -0
  14. package/dist/tool/readme/markdown-parser.d.ts +30 -0
  15. package/dist/tool/readme/markdown-parser.d.ts.map +1 -0
  16. package/dist/tool/readme/markdown-parser.js +139 -0
  17. package/dist/tool/readme/markdown-parser.js.map +1 -0
  18. package/dist/tool/readme/readme-generator.d.ts +9 -0
  19. package/dist/tool/readme/readme-generator.d.ts.map +1 -0
  20. package/dist/tool/readme/readme-generator.js +422 -0
  21. package/dist/tool/readme/readme-generator.js.map +1 -0
  22. package/dist/tool/schema/custom-loader.d.ts +17 -0
  23. package/dist/tool/schema/custom-loader.d.ts.map +1 -0
  24. package/dist/tool/schema/custom-loader.js +149 -0
  25. package/dist/tool/schema/custom-loader.js.map +1 -0
  26. package/dist/tool/schema/overlay-loader.d.ts +47 -0
  27. package/dist/tool/schema/overlay-loader.d.ts.map +1 -0
  28. package/dist/tool/schema/overlay-loader.js +252 -0
  29. package/dist/tool/schema/overlay-loader.js.map +1 -0
  30. package/dist/tool/schema/types.d.ts +212 -0
  31. package/dist/tool/schema/types.d.ts.map +1 -0
  32. package/dist/tool/schema/types.js +5 -0
  33. package/dist/tool/schema/types.js.map +1 -0
  34. package/docs/README.md +308 -0
  35. package/docs/architecture.md +233 -0
  36. package/docs/creating-overlays.md +549 -0
  37. package/docs/custom-patches.md +540 -0
  38. package/docs/dependencies.md +279 -0
  39. package/docs/examples/custom-patches-example.md +85 -0
  40. package/docs/examples.md +576 -0
  41. package/docs/messaging-comparison.md +265 -0
  42. package/docs/messaging-quick-start.md +385 -0
  43. package/docs/observability-workflow.md +537 -0
  44. package/docs/overlay-manifest-refactoring.md +214 -0
  45. package/docs/overlay-metadata-archive.md +54 -0
  46. package/docs/overlays.md +523 -0
  47. package/docs/presets-architecture.md +498 -0
  48. package/docs/presets.md +366 -0
  49. package/docs/publishing.md +476 -0
  50. package/docs/quick-reference.md +326 -0
  51. package/docs/ux.md +170 -0
  52. package/features/README.md +85 -0
  53. package/features/cross-distro-packages/README.md +146 -0
  54. package/features/cross-distro-packages/devcontainer-feature.json +20 -0
  55. package/features/cross-distro-packages/install.sh +58 -0
  56. package/features/local-secrets-manager/devcontainer-feature.json +18 -0
  57. package/features/local-secrets-manager/install.sh +127 -0
  58. package/features/project-scaffolder/devcontainer-feature.json +24 -0
  59. package/features/project-scaffolder/install.sh +100 -0
  60. package/features/team-conventions/devcontainer-feature.json +24 -0
  61. package/features/team-conventions/install.sh +93 -0
  62. package/overlays/.registry/README.md +14 -0
  63. package/overlays/.registry/base-images.yml +26 -0
  64. package/overlays/.registry/base-templates.yml +7 -0
  65. package/overlays/README.md +155 -0
  66. package/overlays/alertmanager/.env.example +5 -0
  67. package/overlays/alertmanager/README.md +465 -0
  68. package/overlays/alertmanager/alert-rules.yml +56 -0
  69. package/overlays/alertmanager/alertmanager.yml +42 -0
  70. package/overlays/alertmanager/devcontainer.patch.json +12 -0
  71. package/overlays/alertmanager/docker-compose.yml +20 -0
  72. package/overlays/alertmanager/overlay.yml +17 -0
  73. package/overlays/alertmanager/setup.sh +53 -0
  74. package/overlays/alertmanager/verify.sh +31 -0
  75. package/overlays/aws-cli/README.md +473 -0
  76. package/overlays/aws-cli/devcontainer.patch.json +13 -0
  77. package/overlays/aws-cli/overlay.yml +13 -0
  78. package/overlays/azure-cli/README.md +551 -0
  79. package/overlays/azure-cli/devcontainer.patch.json +8 -0
  80. package/overlays/azure-cli/overlay.yml +13 -0
  81. package/overlays/bun/README.md +312 -0
  82. package/overlays/bun/devcontainer.patch.json +41 -0
  83. package/overlays/bun/overlay.yml +16 -0
  84. package/overlays/bun/setup.sh +79 -0
  85. package/overlays/bun/verify.sh +30 -0
  86. package/overlays/codex/README.md +128 -0
  87. package/overlays/codex/devcontainer.patch.json +3 -0
  88. package/overlays/codex/overlay.yml +14 -0
  89. package/overlays/codex/setup.sh +24 -0
  90. package/overlays/codex/verify.sh +30 -0
  91. package/overlays/commitlint/README.md +333 -0
  92. package/overlays/commitlint/devcontainer.patch.json +8 -0
  93. package/overlays/commitlint/overlay.yml +16 -0
  94. package/overlays/commitlint/setup.sh +234 -0
  95. package/overlays/direnv/README.md +504 -0
  96. package/overlays/direnv/devcontainer.patch.json +6 -0
  97. package/overlays/direnv/overlay.yml +13 -0
  98. package/overlays/direnv/setup.sh +139 -0
  99. package/overlays/docker-in-docker/README.md +534 -0
  100. package/overlays/docker-in-docker/devcontainer.patch.json +10 -0
  101. package/overlays/docker-in-docker/overlay.yml +13 -0
  102. package/overlays/docker-sock/README.md +256 -0
  103. package/overlays/docker-sock/devcontainer.patch.json +9 -0
  104. package/overlays/docker-sock/docker-compose.yml +8 -0
  105. package/overlays/docker-sock/overlay.yml +13 -0
  106. package/overlays/dotnet/README.md +147 -0
  107. package/overlays/dotnet/devcontainer.patch.json +51 -0
  108. package/overlays/dotnet/global-tools.txt +24 -0
  109. package/overlays/dotnet/overlay.yml +13 -0
  110. package/overlays/dotnet/setup.sh +51 -0
  111. package/overlays/dotnet/verify.sh +26 -0
  112. package/overlays/gcloud/README.md +269 -0
  113. package/overlays/gcloud/devcontainer.patch.json +14 -0
  114. package/overlays/gcloud/overlay.yml +14 -0
  115. package/overlays/gcloud/verify.sh +52 -0
  116. package/overlays/git-helpers/README.md +168 -0
  117. package/overlays/git-helpers/devcontainer.patch.json +33 -0
  118. package/overlays/git-helpers/overlay.yml +15 -0
  119. package/overlays/git-helpers/setup.sh +91 -0
  120. package/overlays/go/README.md +293 -0
  121. package/overlays/go/devcontainer.patch.json +43 -0
  122. package/overlays/go/overlay.yml +15 -0
  123. package/overlays/go/setup.sh +33 -0
  124. package/overlays/go/verify.sh +40 -0
  125. package/overlays/grafana/.env.example +9 -0
  126. package/overlays/grafana/README.md +462 -0
  127. package/overlays/grafana/dashboard-provider.yml +11 -0
  128. package/overlays/grafana/dashboards/observability-overview.json +263 -0
  129. package/overlays/grafana/devcontainer.patch.json +12 -0
  130. package/overlays/grafana/docker-compose.yml +27 -0
  131. package/overlays/grafana/grafana-datasources.yml +57 -0
  132. package/overlays/grafana/overlay.yml +21 -0
  133. package/overlays/grafana/verify.sh +34 -0
  134. package/overlays/jaeger/.env.example +7 -0
  135. package/overlays/jaeger/README.md +867 -0
  136. package/overlays/jaeger/devcontainer.patch.json +12 -0
  137. package/overlays/jaeger/docker-compose.yml +17 -0
  138. package/overlays/jaeger/overlay.yml +19 -0
  139. package/overlays/java/README.md +267 -0
  140. package/overlays/java/devcontainer.patch.json +44 -0
  141. package/overlays/java/overlay.yml +16 -0
  142. package/overlays/java/setup.sh +41 -0
  143. package/overlays/java/verify.sh +42 -0
  144. package/overlays/just/README.md +443 -0
  145. package/overlays/just/devcontainer.patch.json +3 -0
  146. package/overlays/just/overlay.yml +13 -0
  147. package/overlays/just/setup.sh +182 -0
  148. package/overlays/kubectl-helm/README.md +660 -0
  149. package/overlays/kubectl-helm/devcontainer.patch.json +10 -0
  150. package/overlays/kubectl-helm/overlay.yml +13 -0
  151. package/overlays/loki/.env.example +5 -0
  152. package/overlays/loki/README.md +1156 -0
  153. package/overlays/loki/devcontainer.patch.json +12 -0
  154. package/overlays/loki/docker-compose.yml +18 -0
  155. package/overlays/loki/loki-config.yaml +45 -0
  156. package/overlays/loki/overlay.yml +17 -0
  157. package/overlays/minio/.env.example +9 -0
  158. package/overlays/minio/README.md +639 -0
  159. package/overlays/minio/devcontainer.patch.json +30 -0
  160. package/overlays/minio/docker-compose.yml +28 -0
  161. package/overlays/minio/overlay.yml +18 -0
  162. package/overlays/minio/setup.sh +61 -0
  163. package/overlays/minio/verify.sh +64 -0
  164. package/overlays/mkdocs/README.md +309 -0
  165. package/overlays/mkdocs/devcontainer.patch.json +24 -0
  166. package/overlays/mkdocs/overlay.yml +15 -0
  167. package/overlays/modern-cli-tools/README.md +556 -0
  168. package/overlays/modern-cli-tools/devcontainer.patch.json +3 -0
  169. package/overlays/modern-cli-tools/overlay.yml +13 -0
  170. package/overlays/modern-cli-tools/setup.sh +153 -0
  171. package/overlays/mongodb/.env.example +9 -0
  172. package/overlays/mongodb/README.md +481 -0
  173. package/overlays/mongodb/devcontainer.patch.json +32 -0
  174. package/overlays/mongodb/docker-compose.yml +44 -0
  175. package/overlays/mongodb/overlay.yml +17 -0
  176. package/overlays/mongodb/verify.sh +48 -0
  177. package/overlays/mysql/.env.example +11 -0
  178. package/overlays/mysql/README.md +542 -0
  179. package/overlays/mysql/devcontainer.patch.json +34 -0
  180. package/overlays/mysql/docker-compose.yml +55 -0
  181. package/overlays/mysql/overlay.yml +16 -0
  182. package/overlays/mysql/verify.sh +48 -0
  183. package/overlays/nats/.env.example +5 -0
  184. package/overlays/nats/README.md +762 -0
  185. package/overlays/nats/devcontainer.patch.json +24 -0
  186. package/overlays/nats/docker-compose.yml +31 -0
  187. package/overlays/nats/overlay.yml +18 -0
  188. package/overlays/nats/verify.sh +50 -0
  189. package/overlays/ngrok/README.md +503 -0
  190. package/overlays/ngrok/devcontainer.patch.json +3 -0
  191. package/overlays/ngrok/overlay.yml +14 -0
  192. package/overlays/ngrok/setup.sh +125 -0
  193. package/overlays/nodejs/README.md +192 -0
  194. package/overlays/nodejs/devcontainer.patch.json +49 -0
  195. package/overlays/nodejs/global-packages.txt +16 -0
  196. package/overlays/nodejs/overlay.yml +14 -0
  197. package/overlays/nodejs/setup.sh +46 -0
  198. package/overlays/nodejs/verify.sh +32 -0
  199. package/overlays/otel-collector/.env.example +9 -0
  200. package/overlays/otel-collector/README.md +1257 -0
  201. package/overlays/otel-collector/devcontainer.patch.json +28 -0
  202. package/overlays/otel-collector/docker-compose.yml +22 -0
  203. package/overlays/otel-collector/otel-collector-config.yaml +68 -0
  204. package/overlays/otel-collector/overlay.yml +21 -0
  205. package/overlays/otel-collector/setup.sh +49 -0
  206. package/overlays/otel-demo-nodejs/.env.example +2 -0
  207. package/overlays/otel-demo-nodejs/Dockerfile-otel-demo-nodejs +17 -0
  208. package/overlays/otel-demo-nodejs/README.md +409 -0
  209. package/overlays/otel-demo-nodejs/devcontainer.patch.json +12 -0
  210. package/overlays/otel-demo-nodejs/docker-compose.yml +19 -0
  211. package/overlays/otel-demo-nodejs/overlay.yml +23 -0
  212. package/overlays/otel-demo-nodejs/package-otel-demo-nodejs.json +20 -0
  213. package/overlays/otel-demo-nodejs/server-otel-demo-nodejs.js +259 -0
  214. package/overlays/otel-demo-nodejs/tracing-otel-demo-nodejs.js +57 -0
  215. package/overlays/otel-demo-nodejs/verify.sh +31 -0
  216. package/overlays/otel-demo-python/.env.example +2 -0
  217. package/overlays/otel-demo-python/Dockerfile-otel-demo-python +16 -0
  218. package/overlays/otel-demo-python/README.md +82 -0
  219. package/overlays/otel-demo-python/app-otel-demo-python.py +208 -0
  220. package/overlays/otel-demo-python/devcontainer.patch.json +12 -0
  221. package/overlays/otel-demo-python/docker-compose.yml +19 -0
  222. package/overlays/otel-demo-python/overlay.yml +23 -0
  223. package/overlays/otel-demo-python/requirements-otel-demo-python.txt +4 -0
  224. package/overlays/otel-demo-python/verify.sh +31 -0
  225. package/overlays/playwright/README.md +629 -0
  226. package/overlays/playwright/devcontainer.patch.json +9 -0
  227. package/overlays/playwright/overlay.yml +13 -0
  228. package/overlays/postgres/.env.example +6 -0
  229. package/overlays/postgres/README.md +602 -0
  230. package/overlays/postgres/devcontainer.patch.json +21 -0
  231. package/overlays/postgres/docker-compose.yml +22 -0
  232. package/overlays/postgres/overlay.yml +15 -0
  233. package/overlays/postgres/verify.sh +45 -0
  234. package/overlays/powershell/README.md +314 -0
  235. package/overlays/powershell/devcontainer.patch.json +22 -0
  236. package/overlays/powershell/overlay.yml +13 -0
  237. package/overlays/powershell/setup.sh +29 -0
  238. package/overlays/powershell/verify.sh +38 -0
  239. package/overlays/pre-commit/README.md +263 -0
  240. package/overlays/pre-commit/devcontainer.patch.json +9 -0
  241. package/overlays/pre-commit/overlay.yml +16 -0
  242. package/overlays/pre-commit/setup.sh +129 -0
  243. package/overlays/presets/docs-site.yml +118 -0
  244. package/overlays/presets/fullstack.yml +181 -0
  245. package/overlays/presets/microservice.yml +118 -0
  246. package/overlays/presets/web-api.yml +109 -0
  247. package/overlays/prometheus/.env.example +5 -0
  248. package/overlays/prometheus/README.md +1246 -0
  249. package/overlays/prometheus/devcontainer.patch.json +12 -0
  250. package/overlays/prometheus/docker-compose.yml +22 -0
  251. package/overlays/prometheus/overlay.yml +17 -0
  252. package/overlays/prometheus/prometheus.yml +12 -0
  253. package/overlays/prometheus/verify.sh +34 -0
  254. package/overlays/promtail/.env.example +2 -0
  255. package/overlays/promtail/README.md +357 -0
  256. package/overlays/promtail/devcontainer.patch.json +5 -0
  257. package/overlays/promtail/docker-compose.yml +16 -0
  258. package/overlays/promtail/overlay.yml +17 -0
  259. package/overlays/promtail/promtail-config.yaml +60 -0
  260. package/overlays/promtail/verify.sh +31 -0
  261. package/overlays/pulumi/README.md +472 -0
  262. package/overlays/pulumi/devcontainer.patch.json +13 -0
  263. package/overlays/pulumi/overlay.yml +14 -0
  264. package/overlays/pulumi/verify.sh +31 -0
  265. package/overlays/python/README.md +919 -0
  266. package/overlays/python/devcontainer.patch.json +41 -0
  267. package/overlays/python/overlay.yml +12 -0
  268. package/overlays/python/requirements-overlay.txt +13 -0
  269. package/overlays/python/setup.sh +47 -0
  270. package/overlays/python/verify.sh +32 -0
  271. package/overlays/rabbitmq/.env.example +7 -0
  272. package/overlays/rabbitmq/README.md +680 -0
  273. package/overlays/rabbitmq/devcontainer.patch.json +28 -0
  274. package/overlays/rabbitmq/docker-compose.yml +30 -0
  275. package/overlays/rabbitmq/overlay.yml +18 -0
  276. package/overlays/rabbitmq/verify.sh +41 -0
  277. package/overlays/redis/.env.example +4 -0
  278. package/overlays/redis/README.md +776 -0
  279. package/overlays/redis/devcontainer.patch.json +21 -0
  280. package/overlays/redis/docker-compose.yml +21 -0
  281. package/overlays/redis/overlay.yml +15 -0
  282. package/overlays/redis/verify.sh +41 -0
  283. package/overlays/redpanda/.env.example +10 -0
  284. package/overlays/redpanda/README.md +703 -0
  285. package/overlays/redpanda/devcontainer.patch.json +37 -0
  286. package/overlays/redpanda/docker-compose.yml +67 -0
  287. package/overlays/redpanda/overlay.yml +21 -0
  288. package/overlays/redpanda/verify.sh +48 -0
  289. package/overlays/rust/README.md +299 -0
  290. package/overlays/rust/devcontainer.patch.json +39 -0
  291. package/overlays/rust/overlay.yml +15 -0
  292. package/overlays/rust/setup.sh +36 -0
  293. package/overlays/rust/verify.sh +51 -0
  294. package/overlays/sqlite/README.md +584 -0
  295. package/overlays/sqlite/devcontainer.patch.json +14 -0
  296. package/overlays/sqlite/overlay.yml +15 -0
  297. package/overlays/sqlite/setup.sh +27 -0
  298. package/overlays/sqlite/verify.sh +43 -0
  299. package/overlays/sqlserver/.env.example +6 -0
  300. package/overlays/sqlserver/README.md +592 -0
  301. package/overlays/sqlserver/devcontainer.patch.json +22 -0
  302. package/overlays/sqlserver/docker-compose.yml +32 -0
  303. package/overlays/sqlserver/overlay.yml +17 -0
  304. package/overlays/sqlserver/verify.sh +30 -0
  305. package/overlays/tempo/.env.example +5 -0
  306. package/overlays/tempo/README.md +273 -0
  307. package/overlays/tempo/devcontainer.patch.json +12 -0
  308. package/overlays/tempo/docker-compose.yml +20 -0
  309. package/overlays/tempo/overlay.yml +20 -0
  310. package/overlays/tempo/tempo-config.yaml +32 -0
  311. package/overlays/tempo/verify.sh +31 -0
  312. package/overlays/terraform/README.md +389 -0
  313. package/overlays/terraform/devcontainer.patch.json +15 -0
  314. package/overlays/terraform/overlay.yml +14 -0
  315. package/overlays/terraform/verify.sh +63 -0
  316. package/package.json +74 -0
  317. package/templates/README.md +285 -0
  318. package/templates/compose/.devcontainer/devcontainer.json +46 -0
  319. package/templates/compose/.devcontainer/docker-compose.yml +12 -0
  320. package/templates/compose/README.md +20 -0
  321. package/templates/plain/.devcontainer/devcontainer.json +35 -0
  322. package/templates/plain/README.md +21 -0
  323. package/tool/README.md +281 -0
  324. package/tool/schema/base-images.schema.json +43 -0
  325. package/tool/schema/base-templates.schema.json +34 -0
  326. package/tool/schema/config.schema.json +71 -0
  327. 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: []