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,592 @@
1
+ # SQL Server Overlay
2
+
3
+ Microsoft SQL Server 2022 for Linux - enterprise-grade relational database for .NET and Microsoft stack development.
4
+
5
+ ## Features
6
+
7
+ - **SQL Server 2022** - Latest version with modern T-SQL features
8
+ - **Developer Edition** - Full-featured free edition for development/testing
9
+ - **Docker Compose service** - Runs as separate container
10
+ - **Persistent storage** - Data survives container restarts
11
+ - **Health checks** - Ensures service is ready before use
12
+ - **VS Code Extension:** SQL Server (mssql) by Microsoft (ms-mssql.mssql)
13
+
14
+ ## How It Works
15
+
16
+ This overlay adds Microsoft SQL Server 2022 for Linux as a Docker Compose service. The database runs in its own container and is accessible from your development container via the hostname `sqlserver`.
17
+
18
+ **Architecture:**
19
+
20
+ ```mermaid
21
+ graph TD
22
+ A[Development Container<br/>Your application code<br/>VS Code mssql extension<br/>Connects to sqlserver:1433] -->|Docker network devnet| B[SQL Server Container<br/>SQL Server 2022<br/>Port 1433<br/>Data volume]
23
+ ```
24
+
25
+ ## Configuration
26
+
27
+ ### Environment Variables
28
+
29
+ The overlay includes a `.env.example` file. Copy it to `.env` and customize:
30
+
31
+ ```bash
32
+ cd .devcontainer
33
+ cp .env.example .env
34
+ ```
35
+
36
+ **Default values (.env.example):**
37
+
38
+ ```bash
39
+ # SQL Server Configuration
40
+ MSSQL_VERSION=2022-latest
41
+ MSSQL_SA_PASSWORD=YourStrong@Passw0rd
42
+ MSSQL_PID=Developer
43
+ MSSQL_PORT=1433
44
+ ```
45
+
46
+ ⚠️ **Password Requirements:** SQL Server requires passwords with:
47
+
48
+ - At least 8 characters
49
+ - At least one uppercase letter
50
+ - At least one lowercase letter
51
+ - At least one digit
52
+ - At least one special character
53
+
54
+ ⚠️ **SECURITY:** Change the SA password for production use. The `.env` file is git-ignored.
55
+
56
+ ### Port Configuration
57
+
58
+ The default port (1433) can be changed via the `--port-offset` option when initializing:
59
+
60
+ ```bash
61
+ # Offset all ports by 100
62
+ container-superposition --port-offset 100
63
+
64
+ # SQL Server will be on 1533 instead of 1433
65
+ ```
66
+
67
+ ## Connection Information
68
+
69
+ ### From Development Container
70
+
71
+ ```bash
72
+ # Hostname: sqlserver (Docker Compose service name)
73
+ # Port: 1433
74
+ # Username: sa
75
+ # Password: YourStrong@Passw0rd (or value from .env)
76
+
77
+ # Connection string (ADO.NET)
78
+ Server=sqlserver,1433;Database=master;User Id=sa;Password=YourStrong@Passw0rd;TrustServerCertificate=True;
79
+
80
+ # Connection string (ODBC)
81
+ Driver={ODBC Driver 18 for SQL Server};Server=sqlserver,1433;Database=master;Uid=sa;Pwd=YourStrong@Passw0rd;TrustServerCertificate=yes;
82
+ ```
83
+
84
+ ### From Host Machine
85
+
86
+ ```bash
87
+ # Hostname: localhost
88
+ # Port: 1433 (or 1433 + port-offset)
89
+ # Username: sa
90
+ # Password: YourStrong@Passw0rd
91
+
92
+ # Connection string
93
+ Server=localhost,1433;Database=master;User Id=sa;Password=YourStrong@Passw0rd;TrustServerCertificate=True;
94
+ ```
95
+
96
+ ### Using VS Code mssql Extension
97
+
98
+ 1. Open Command Palette (Ctrl+Shift+P / Cmd+Shift+P)
99
+ 2. Select "MS SQL: Connect"
100
+ 3. Create a new connection profile:
101
+ - **Server:** sqlserver,1433
102
+ - **Database:** master (or your database name)
103
+ - **Authentication:** SQL Login
104
+ - **User:** sa
105
+ - **Password:** YourStrong@Passw0rd
106
+ - **Save Password:** Yes
107
+ - **Profile Name:** SQL Server Dev
108
+
109
+ ## Common Commands
110
+
111
+ ### Using VS Code Extension
112
+
113
+ The MS SQL extension provides:
114
+
115
+ - Query editor with IntelliSense
116
+ - Execute queries (Ctrl+Shift+E / Cmd+Shift+E)
117
+ - View databases and tables in sidebar
118
+ - Generate CREATE scripts
119
+ - Export results to CSV/JSON
120
+
121
+ ### Using sqlcmd (in SQL Server container)
122
+
123
+ ```bash
124
+ # Execute query via docker exec
125
+ docker exec -it $(docker ps -qf "name=sqlserver") \
126
+ /opt/mssql-tools/bin/sqlcmd \
127
+ -S localhost -U sa -P 'YourStrong@Passw0rd' \
128
+ -Q "SELECT @@VERSION"
129
+
130
+ # Interactive session
131
+ docker exec -it $(docker ps -qf "name=sqlserver") \
132
+ /opt/mssql-tools/bin/sqlcmd \
133
+ -S localhost -U sa -P 'YourStrong@Passw0rd'
134
+ ```
135
+
136
+ ### Database Operations
137
+
138
+ ```sql
139
+ -- Show databases
140
+ SELECT name FROM sys.databases;
141
+
142
+ -- Create database
143
+ CREATE DATABASE MyApp;
144
+
145
+ -- Use database
146
+ USE MyApp;
147
+
148
+ -- Create table
149
+ CREATE TABLE Users (
150
+ Id INT IDENTITY(1,1) PRIMARY KEY,
151
+ Name NVARCHAR(100),
152
+ Email NVARCHAR(100) UNIQUE
153
+ );
154
+
155
+ -- Insert data
156
+ INSERT INTO Users (Name, Email) VALUES ('Alice', 'alice@example.com');
157
+
158
+ -- Query data
159
+ SELECT * FROM Users;
160
+
161
+ -- Drop database
162
+ DROP DATABASE MyApp;
163
+ ```
164
+
165
+ ### Backup and Restore
166
+
167
+ ```sql
168
+ -- Backup database
169
+ BACKUP DATABASE MyApp
170
+ TO DISK = '/var/opt/mssql/data/MyApp.bak'
171
+ WITH FORMAT;
172
+
173
+ -- Restore database
174
+ RESTORE DATABASE MyApp
175
+ FROM DISK = '/var/opt/mssql/data/MyApp.bak'
176
+ WITH REPLACE;
177
+ ```
178
+
179
+ ### Container Management
180
+
181
+ ```bash
182
+ # Check service status
183
+ docker-compose ps
184
+
185
+ # View SQL Server logs
186
+ docker-compose logs -f sqlserver
187
+
188
+ # Restart service
189
+ docker-compose restart sqlserver
190
+
191
+ # Stop service
192
+ docker-compose stop sqlserver
193
+
194
+ # Remove data (WARNING: destroys all data)
195
+ docker-compose down -v
196
+ ```
197
+
198
+ ## Application Integration
199
+
200
+ ### .NET (C#)
201
+
202
+ ```bash
203
+ # Install SQL Server client
204
+ dotnet add package Microsoft.Data.SqlClient
205
+ ```
206
+
207
+ ```csharp
208
+ using Microsoft.Data.SqlClient;
209
+
210
+ var connectionString = "Server=sqlserver,1433;Database=MyApp;User Id=sa;Password=YourStrong@Passw0rd;TrustServerCertificate=True;";
211
+
212
+ using var connection = new SqlConnection(connectionString);
213
+ await connection.OpenAsync();
214
+
215
+ // Query
216
+ using var command = new SqlCommand("SELECT * FROM Users", connection);
217
+ using var reader = await command.ExecuteReaderAsync();
218
+ while (await reader.ReadAsync())
219
+ {
220
+ Console.WriteLine($"{reader["Name"]}: {reader["Email"]}");
221
+ }
222
+
223
+ // Insert
224
+ var insertCmd = new SqlCommand(
225
+ "INSERT INTO Users (Name, Email) VALUES (@Name, @Email)",
226
+ connection
227
+ );
228
+ insertCmd.Parameters.AddWithValue("@Name", "Alice");
229
+ insertCmd.Parameters.AddWithValue("@Email", "alice@example.com");
230
+ await insertCmd.ExecuteNonQueryAsync();
231
+ ```
232
+
233
+ ### .NET (Entity Framework Core)
234
+
235
+ ```bash
236
+ # Install EF Core SQL Server provider
237
+ dotnet add package Microsoft.EntityFrameworkCore.SqlServer
238
+ dotnet add package Microsoft.EntityFrameworkCore.Tools
239
+ ```
240
+
241
+ ```csharp
242
+ using Microsoft.EntityFrameworkCore;
243
+
244
+ public class AppDbContext : DbContext
245
+ {
246
+ public DbSet<User> Users { get; set; }
247
+
248
+ protected override void OnConfiguring(DbContextOptionsBuilder options)
249
+ {
250
+ options.UseSqlServer(
251
+ "Server=sqlserver,1433;Database=MyApp;User Id=sa;Password=YourStrong@Passw0rd;TrustServerCertificate=True;"
252
+ );
253
+ }
254
+ }
255
+
256
+ public class User
257
+ {
258
+ public int Id { get; set; }
259
+ public string Name { get; set; }
260
+ public string Email { get; set; }
261
+ }
262
+
263
+ // Usage
264
+ using var db = new AppDbContext();
265
+ await db.Database.EnsureCreatedAsync();
266
+
267
+ db.Users.Add(new User { Name = "Alice", Email = "alice@example.com" });
268
+ await db.SaveChangesAsync();
269
+
270
+ var users = await db.Users.ToListAsync();
271
+ ```
272
+
273
+ ### Node.js
274
+
275
+ ```bash
276
+ # Install SQL Server driver
277
+ npm install mssql
278
+ ```
279
+
280
+ ```javascript
281
+ const sql = require('mssql');
282
+
283
+ const config = {
284
+ server: 'sqlserver',
285
+ port: 1433,
286
+ database: 'MyApp',
287
+ user: 'sa',
288
+ password: 'YourStrong@Passw0rd',
289
+ options: {
290
+ trustServerCertificate: true,
291
+ enableArithAbort: true,
292
+ },
293
+ };
294
+
295
+ async function main() {
296
+ const pool = await sql.connect(config);
297
+
298
+ // Query
299
+ const result = await pool.request().query('SELECT * FROM Users');
300
+ console.log(result.recordset);
301
+
302
+ // Insert
303
+ await pool
304
+ .request()
305
+ .input('name', sql.NVarChar, 'Alice')
306
+ .input('email', sql.NVarChar, 'alice@example.com')
307
+ .query('INSERT INTO Users (Name, Email) VALUES (@name, @email)');
308
+
309
+ await pool.close();
310
+ }
311
+
312
+ main();
313
+ ```
314
+
315
+ ### Python
316
+
317
+ ```bash
318
+ # Install pyodbc
319
+ pip install pyodbc
320
+ ```
321
+
322
+ ```python
323
+ import pyodbc
324
+
325
+ # Connect
326
+ conn = pyodbc.connect(
327
+ 'DRIVER={ODBC Driver 18 for SQL Server};'
328
+ 'SERVER=sqlserver,1433;'
329
+ 'DATABASE=MyApp;'
330
+ 'UID=sa;'
331
+ 'PWD=YourStrong@Passw0rd;'
332
+ 'TrustServerCertificate=yes;'
333
+ )
334
+
335
+ cursor = conn.cursor()
336
+
337
+ # Query
338
+ cursor.execute('SELECT * FROM Users')
339
+ for row in cursor.fetchall():
340
+ print(row)
341
+
342
+ # Insert
343
+ cursor.execute(
344
+ 'INSERT INTO Users (Name, Email) VALUES (?, ?)',
345
+ 'Alice', 'alice@example.com'
346
+ )
347
+ conn.commit()
348
+
349
+ # Close
350
+ cursor.close()
351
+ conn.close()
352
+ ```
353
+
354
+ ### Go
355
+
356
+ ```bash
357
+ # Install SQL Server driver
358
+ go get github.com/denisenkom/go-mssqldb
359
+ ```
360
+
361
+ ```go
362
+ package main
363
+
364
+ import (
365
+ "database/sql"
366
+ _ "github.com/denisenkom/go-mssqldb"
367
+ )
368
+
369
+ func main() {
370
+ connString := "sqlserver://sa:YourStrong@Passw0rd@sqlserver:1433?database=MyApp&TrustServerCertificate=true"
371
+
372
+ db, _ := sql.Open("sqlserver", connString)
373
+ defer db.Close()
374
+
375
+ // Query
376
+ rows, _ := db.Query("SELECT * FROM Users")
377
+ defer rows.Close()
378
+
379
+ for rows.Next() {
380
+ var name, email string
381
+ rows.Scan(&name, &email)
382
+ println(name, email)
383
+ }
384
+
385
+ // Insert
386
+ db.Exec("INSERT INTO Users (Name, Email) VALUES (@p1, @p2)",
387
+ "Alice", "alice@example.com")
388
+ }
389
+ ```
390
+
391
+ ## Use Cases
392
+
393
+ - **.NET applications** - First-class integration with .NET ecosystem
394
+ - **Enterprise applications** - Proven for large-scale deployments
395
+ - **Microsoft stack** - Azure, Power BI, SSIS integration
396
+ - **Windows legacy apps** - Compatibility with existing systems
397
+ - **Stored procedures** - Advanced T-SQL programming
398
+ - **Business intelligence** - SSRS, SSAS integration
399
+
400
+ **Integrates well with:**
401
+
402
+ - .NET (dotnet overlay) - Primary development platform
403
+ - Azure CLI (azure-cli overlay) - Cloud deployment
404
+ - Grafana (grafana overlay) - Database metrics visualization
405
+ - OTEL Collector (otel-collector overlay) - Performance monitoring
406
+
407
+ ## Troubleshooting
408
+
409
+ ### Issue: Cannot connect to SQL Server
410
+
411
+ **Symptoms:**
412
+
413
+ - Connection refused errors
414
+ - Timeout when connecting
415
+
416
+ **Solution:**
417
+
418
+ ```bash
419
+ # Check if service is running
420
+ docker-compose ps
421
+
422
+ # SQL Server can take 30-60 seconds to start
423
+ # Check logs for "SQL Server is now ready for client connections"
424
+ docker-compose logs sqlserver | grep "ready for client connections"
425
+
426
+ # Wait for health check to pass
427
+ docker-compose ps | grep sqlserver
428
+ # Look for "healthy" status
429
+
430
+ # Test connection via docker exec
431
+ docker exec -it $(docker ps -qf "name=sqlserver") \
432
+ /opt/mssql-tools/bin/sqlcmd \
433
+ -S localhost -U sa -P 'YourStrong@Passw0rd' \
434
+ -Q "SELECT 1"
435
+ ```
436
+
437
+ ### Issue: Login failed for user 'sa'
438
+
439
+ **Symptoms:**
440
+
441
+ - "Login failed for user 'sa'"
442
+ - Authentication errors
443
+
444
+ **Solution:**
445
+
446
+ ```bash
447
+ # Verify password in .env file
448
+ cat .devcontainer/.env
449
+
450
+ # Ensure password meets requirements (8+ chars, uppercase, lowercase, digit, special)
451
+
452
+ # If changing password, recreate containers
453
+ docker-compose down -v
454
+ docker-compose up -d
455
+ ```
456
+
457
+ ### Issue: TrustServerCertificate error
458
+
459
+ **Symptoms:**
460
+
461
+ - "The certificate chain was issued by an authority that is not trusted"
462
+
463
+ **Solution:**
464
+
465
+ ```bash
466
+ # Add TrustServerCertificate=True to connection string
467
+ # Or use TrustServerCertificate=yes for ODBC
468
+
469
+ # Example:
470
+ # Server=sqlserver,1433;Database=MyApp;User Id=sa;Password=YourStrong@Passw0rd;TrustServerCertificate=True;
471
+ ```
472
+
473
+ ### Issue: Database not found
474
+
475
+ **Symptoms:**
476
+
477
+ - "Cannot open database 'MyApp' requested by the login"
478
+
479
+ **Solution:**
480
+
481
+ ```sql
482
+ -- Connect to master database first
483
+ -- Then create your database
484
+ CREATE DATABASE MyApp;
485
+ USE MyApp;
486
+ ```
487
+
488
+ ### Issue: Data not persisting
489
+
490
+ **Symptoms:**
491
+
492
+ - Data lost after container restart
493
+
494
+ **Solution:**
495
+
496
+ ```bash
497
+ # Verify volumes exist
498
+ docker volume ls | grep sqlserver
499
+
500
+ # Check volume mounts in docker-compose.yml
501
+ docker-compose config
502
+
503
+ # Don't use 'docker-compose down -v' unless you want to delete data
504
+ # Use 'docker-compose down' or 'docker-compose stop' instead
505
+ ```
506
+
507
+ ### Issue: Container exits immediately
508
+
509
+ **Symptoms:**
510
+
511
+ - SQL Server container keeps restarting
512
+
513
+ **Solution:**
514
+
515
+ ```bash
516
+ # Check logs for error messages
517
+ docker-compose logs sqlserver
518
+
519
+ # Common issue: EULA not accepted
520
+ # Solution: ACCEPT_EULA=Y is already set in docker-compose.yml
521
+
522
+ # Common issue: Insufficient resources
523
+ # SQL Server requires at least 2GB RAM
524
+ # Check Docker Desktop resource settings
525
+ ```
526
+
527
+ ## Security Considerations
528
+
529
+ ⚠️ **Development-only defaults:**
530
+
531
+ - Default SA password is intentionally visible for development
532
+ - SQL Server is exposed on host port (accessible from host machine)
533
+ - TrustServerCertificate is enabled (skips certificate validation)
534
+
535
+ **For production:**
536
+
537
+ 1. **Change SA password:**
538
+
539
+ ```bash
540
+ # Use strong password meeting complexity requirements
541
+ MSSQL_SA_PASSWORD=<ComplexPassword123!>
542
+ ```
543
+
544
+ 2. **Create application-specific users:**
545
+
546
+ ```sql
547
+ -- Don't use SA for applications
548
+ CREATE LOGIN appuser WITH PASSWORD = 'ComplexPassword123!';
549
+ CREATE USER appuser FOR LOGIN appuser;
550
+ GRANT SELECT, INSERT, UPDATE, DELETE ON DATABASE::MyApp TO appuser;
551
+ ```
552
+
553
+ 3. **Restrict network access:**
554
+ - Don't expose ports publicly
555
+ - Use firewall rules
556
+ - Enable TLS/SSL encryption
557
+
558
+ 4. **Use Windows Authentication (if applicable):**
559
+ - Configure Active Directory integration
560
+ - Disable SQL authentication for production
561
+
562
+ 5. **Enable auditing:**
563
+ ```sql
564
+ -- Enable server audit
565
+ CREATE SERVER AUDIT MyAudit TO FILE (FILEPATH = '/var/opt/mssql/audit/');
566
+ ALTER SERVER AUDIT MyAudit WITH (STATE = ON);
567
+ ```
568
+
569
+ ## Related Overlays
570
+
571
+ - **dotnet** - .NET SDK with C# DevKit (recommended)
572
+ - **azure-cli** - Azure deployment and management
573
+ - **grafana** - Visualize SQL Server metrics
574
+ - **otel-collector** - Monitor SQL Server performance
575
+
576
+ ## Additional Resources
577
+
578
+ - [Official SQL Server on Linux Documentation](https://docs.microsoft.com/en-us/sql/linux/)
579
+ - [SQL Server Docker Image](https://hub.docker.com/_/microsoft-mssql-server)
580
+ - [VS Code mssql Extension](https://marketplace.visualstudio.com/items?itemName=ms-mssql.mssql)
581
+ - [T-SQL Reference](https://docs.microsoft.com/en-us/sql/t-sql/)
582
+ - [Entity Framework Core](https://docs.microsoft.com/en-us/ef/core/)
583
+
584
+ ## Notes
585
+
586
+ - SQL Server uses the hostname `sqlserver` (the service name) for container-to-container communication
587
+ - Data is persisted in a Docker volume (`sqlserver-data`)
588
+ - The Developer Edition is fully featured and free for development/testing
589
+ - SQL Server 2022 for Linux has excellent performance and feature parity with Windows
590
+ - Health checks include a 30-second start period as SQL Server takes time to initialize
591
+ - The VS Code mssql extension provides an excellent development experience
592
+ - **Inevitable for .NET developers** - SQL Server is the natural choice for .NET applications
@@ -0,0 +1,22 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
3
+ "customizations": {
4
+ "vscode": {
5
+ "extensions": ["ms-mssql.mssql"]
6
+ }
7
+ },
8
+ "runServices": ["sqlserver"],
9
+ "forwardPorts": [1433],
10
+ "portsAttributes": {
11
+ "1433": {
12
+ "label": "SQL Server",
13
+ "onAutoForward": "notify"
14
+ }
15
+ },
16
+ "remoteEnv": {
17
+ "MSSQL_HOST": "sqlserver",
18
+ "MSSQL_PORT": "1433",
19
+ "MSSQL_SA_PASSWORD": "YourStrong@Passw0rd",
20
+ "MSSQL_DATABASE": "master"
21
+ }
22
+ }
@@ -0,0 +1,32 @@
1
+ version: '3.8'
2
+
3
+ services:
4
+ sqlserver:
5
+ image: mcr.microsoft.com/mssql/server:${MSSQL_VERSION:-2022-latest}
6
+ restart: unless-stopped
7
+ volumes:
8
+ - sqlserver-data:/var/opt/mssql
9
+ environment:
10
+ ACCEPT_EULA: Y
11
+ MSSQL_SA_PASSWORD: ${MSSQL_SA_PASSWORD:-YourStrong@Passw0rd}
12
+ MSSQL_PID: ${MSSQL_PID:-Developer}
13
+ ports:
14
+ - '${MSSQL_PORT:-1433}:1433'
15
+ networks:
16
+ - devnet
17
+ healthcheck:
18
+ test:
19
+ [
20
+ 'CMD-SHELL',
21
+ "/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P '${MSSQL_SA_PASSWORD:-YourStrong@Passw0rd}' -Q 'SELECT 1' || exit 1",
22
+ ]
23
+ interval: 10s
24
+ timeout: 5s
25
+ retries: 5
26
+ start_period: 30s
27
+
28
+ volumes:
29
+ sqlserver-data:
30
+
31
+ networks:
32
+ devnet:
@@ -0,0 +1,17 @@
1
+ id: sqlserver
2
+ name: SQL Server
3
+ description: SQL Server 2022 for Linux
4
+ category: database
5
+ supports:
6
+ - compose
7
+ requires: []
8
+ suggests:
9
+ - dotnet
10
+ conflicts: []
11
+ tags:
12
+ - database
13
+ - sql
14
+ - sqlserver
15
+ - microsoft
16
+ ports:
17
+ - 1433
@@ -0,0 +1,30 @@
1
+ #!/bin/bash
2
+ # Verification script for SQL Server overlay
3
+ # Confirms SQL Server service is accessible
4
+
5
+ set -e
6
+
7
+ echo "🔍 Verifying SQL Server overlay..."
8
+ echo ""
9
+
10
+ # Check if SQL Server service is running
11
+ echo "1️⃣ Checking SQL Server service..."
12
+ SQLSERVER_READY=false
13
+ for i in {1..30}; do
14
+ # Try to connect using docker exec (sqlcmd is in the container, not necessarily in dev container)
15
+ if docker exec $(docker ps -qf "name=sqlserver") /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'YourStrong@Passw0rd' -Q "SELECT 1" &> /dev/null; then
16
+ echo " ✅ SQL Server service is ready"
17
+ SQLSERVER_READY=true
18
+ break
19
+ fi
20
+ sleep 2
21
+ done
22
+
23
+ if [ "$SQLSERVER_READY" = false ]; then
24
+ echo " ❌ SQL Server service not ready after 60 seconds"
25
+ echo " ⚠️ SQL Server can take 30-60 seconds to start"
26
+ exit 1
27
+ fi
28
+
29
+ echo ""
30
+ echo "✅ SQL Server overlay verification complete"
@@ -0,0 +1,5 @@
1
+ # Tempo version
2
+ TEMPO_VERSION=latest
3
+
4
+ # Tempo HTTP port
5
+ TEMPO_HTTP_PORT=3200