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,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,9 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
3
+ "features": {
4
+ "ghcr.io/devcontainers/features/docker-outside-of-docker:1": {
5
+ "version": "latest",
6
+ "moby": false
7
+ }
8
+ }
9
+ }
@@ -0,0 +1,8 @@
1
+ version: '3.8'
2
+
3
+ services:
4
+ devcontainer:
5
+ command: sleep infinity
6
+ volumes:
7
+ # Mount host Docker socket for docker-outside-of-docker
8
+ - /var/run/docker.sock:/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,13 @@
1
+ id: dotnet
2
+ name: .NET
3
+ description: .NET 10 SDK with C# DevKit
4
+ category: language
5
+ supports: []
6
+ requires: []
7
+ suggests: []
8
+ conflicts: []
9
+ tags:
10
+ - language
11
+ - dotnet
12
+ - csharp
13
+ ports: []
@@ -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"