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,542 @@
1
+ # MySQL Overlay
2
+
3
+ MySQL 8 relational database with phpMyAdmin web UI for development and testing.
4
+
5
+ ## Features
6
+
7
+ - **MySQL 8** - Popular open-source relational database
8
+ - **phpMyAdmin** - Web-based MySQL administration interface (port 8080)
9
+ - **mysql CLI** - Command-line client for database operations
10
+ - **Docker Compose services** - Runs as separate containers
11
+ - **Persistent storage** - Data survives container restarts
12
+ - **Health checks** - Ensures services are ready before use
13
+ - **VS Code Extension:** MySQL Client (cweijan.vscode-mysql-client2)
14
+
15
+ ## How It Works
16
+
17
+ This overlay adds MySQL 8 and phpMyAdmin as separate Docker Compose services. The database runs in its own container and is accessible from your development container via the hostname `mysql`.
18
+
19
+ **Architecture:**
20
+
21
+ ```mermaid
22
+ graph TD
23
+ A[Development Container<br/>Your application code<br/>mysql client<br/>Connects to mysql:3306] -->|Docker network devnet| B[MySQL Container<br/>MySQL 8 server<br/>Port 3306<br/>Data volume]
24
+ B --> C[phpMyAdmin Container<br/>Web UI on port 8080<br/>Connected to MySQL]
25
+ ```
26
+
27
+ ## Configuration
28
+
29
+ ### Environment Variables
30
+
31
+ The overlay includes a `.env.example` file. Copy it to `.env` and customize:
32
+
33
+ ```bash
34
+ cd .devcontainer
35
+ cp .env.example .env
36
+ ```
37
+
38
+ **Default values (.env.example):**
39
+
40
+ ```bash
41
+ # MySQL Configuration
42
+ MYSQL_VERSION=8
43
+ MYSQL_ROOT_PASSWORD=rootpassword
44
+ MYSQL_DATABASE=devdb
45
+ MYSQL_USER=devuser
46
+ MYSQL_PASSWORD=devpassword
47
+ MYSQL_PORT=3306
48
+
49
+ # phpMyAdmin Configuration
50
+ PHPMYADMIN_VERSION=latest
51
+ PHPMYADMIN_PORT=8080
52
+ ```
53
+
54
+ ⚠️ **SECURITY:** Change default passwords for production use. The `.env` file is git-ignored.
55
+
56
+ ### Port Configuration
57
+
58
+ Default ports 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
+ # MySQL will be on 3406, phpMyAdmin on 8180
65
+ ```
66
+
67
+ ## Connection Information
68
+
69
+ ### From Development Container
70
+
71
+ ```bash
72
+ # Hostname: mysql (Docker Compose service name)
73
+ # Port: 3306
74
+ # Database: devdb (or value from .env)
75
+ # Username: devuser / root
76
+ # Password: devpassword / rootpassword (from .env)
77
+
78
+ # Connection string (non-root user)
79
+ mysql://devuser:devpassword@mysql:3306/devdb
80
+
81
+ # Connection string (root user)
82
+ mysql://root:rootpassword@mysql:3306/devdb
83
+ ```
84
+
85
+ ### From Host Machine
86
+
87
+ ```bash
88
+ # Hostname: localhost
89
+ # Port: 3306 (or 3306 + port-offset)
90
+ # Database: devdb
91
+ # Username: devuser / root
92
+ # Password: devpassword / rootpassword
93
+
94
+ # Connection string
95
+ mysql://devuser:devpassword@localhost:3306/devdb
96
+ ```
97
+
98
+ ### phpMyAdmin Web UI
99
+
100
+ Access the web interface from your host machine:
101
+
102
+ ```
103
+ http://localhost:8080
104
+ ```
105
+
106
+ Login with:
107
+
108
+ - **Server:** mysql
109
+ - **Username:** root (or devuser)
110
+ - **Password:** rootpassword (or devpassword)
111
+
112
+ ## Common Commands
113
+
114
+ ### Using mysql CLI
115
+
116
+ ```bash
117
+ # Connect as root user
118
+ mysql -h mysql -P 3306 -u root -prootpassword
119
+
120
+ # Connect as regular user
121
+ mysql -h mysql -P 3306 -u devuser -pdevpassword devdb
122
+
123
+ # Connect and run query
124
+ mysql -h mysql -u root -prootpassword -e "SHOW DATABASES;"
125
+
126
+ # Execute SQL file
127
+ mysql -h mysql -u root -prootpassword devdb < schema.sql
128
+
129
+ # Dump database
130
+ mysqldump -h mysql -u root -prootpassword devdb > backup.sql
131
+ ```
132
+
133
+ ### Database Operations
134
+
135
+ ```bash
136
+ # Show databases
137
+ mysql -h mysql -u root -prootpassword -e "SHOW DATABASES;"
138
+
139
+ # Create database
140
+ mysql -h mysql -u root -prootpassword -e "CREATE DATABASE myapp;"
141
+
142
+ # Use specific database
143
+ mysql -h mysql -u root -prootpassword myapp
144
+
145
+ # Show tables
146
+ mysql -h mysql -u root -prootpassword devdb -e "SHOW TABLES;"
147
+
148
+ # Create table
149
+ mysql -h mysql -u root -prootpassword devdb -e "
150
+ CREATE TABLE users (
151
+ id INT AUTO_INCREMENT PRIMARY KEY,
152
+ name VARCHAR(100),
153
+ email VARCHAR(100) UNIQUE
154
+ );"
155
+
156
+ # Insert data
157
+ mysql -h mysql -u root -prootpassword devdb -e "
158
+ INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');"
159
+
160
+ # Query data
161
+ mysql -h mysql -u root -prootpassword devdb -e "SELECT * FROM users;"
162
+
163
+ # Drop database
164
+ mysql -h mysql -u root -prootpassword -e "DROP DATABASE myapp;"
165
+ ```
166
+
167
+ ### Container Management
168
+
169
+ ```bash
170
+ # Check service status
171
+ docker-compose ps
172
+
173
+ # View MySQL logs
174
+ docker-compose logs -f mysql
175
+
176
+ # View phpMyAdmin logs
177
+ docker-compose logs -f phpmyadmin
178
+
179
+ # Restart services
180
+ docker-compose restart mysql phpmyadmin
181
+
182
+ # Stop services
183
+ docker-compose stop mysql phpmyadmin
184
+
185
+ # Remove data (WARNING: destroys all data)
186
+ docker-compose down -v
187
+ ```
188
+
189
+ ## Application Integration
190
+
191
+ ### Node.js
192
+
193
+ ```bash
194
+ # Install MySQL driver
195
+ npm install mysql2
196
+
197
+ # Or use an ORM like Sequelize
198
+ npm install sequelize mysql2
199
+ ```
200
+
201
+ ```javascript
202
+ // Using mysql2
203
+ const mysql = require('mysql2/promise');
204
+
205
+ async function main() {
206
+ const connection = await mysql.createConnection({
207
+ host: 'mysql',
208
+ port: 3306,
209
+ user: 'devuser',
210
+ password: 'devpassword',
211
+ database: 'devdb',
212
+ });
213
+
214
+ // Query
215
+ const [rows] = await connection.execute('SELECT * FROM users');
216
+ console.log(rows);
217
+
218
+ // Insert
219
+ await connection.execute('INSERT INTO users (name, email) VALUES (?, ?)', [
220
+ 'Alice',
221
+ 'alice@example.com',
222
+ ]);
223
+
224
+ await connection.end();
225
+ }
226
+
227
+ main();
228
+ ```
229
+
230
+ ### Python
231
+
232
+ ```bash
233
+ # Install MySQL connector
234
+ pip install mysql-connector-python
235
+
236
+ # Or use PyMySQL
237
+ pip install pymysql
238
+ ```
239
+
240
+ ```python
241
+ import mysql.connector
242
+
243
+ # Connect
244
+ conn = mysql.connector.connect(
245
+ host='mysql',
246
+ port=3306,
247
+ user='devuser',
248
+ password='devpassword',
249
+ database='devdb'
250
+ )
251
+
252
+ cursor = conn.cursor()
253
+
254
+ # Query
255
+ cursor.execute('SELECT * FROM users')
256
+ for row in cursor.fetchall():
257
+ print(row)
258
+
259
+ # Insert
260
+ cursor.execute(
261
+ 'INSERT INTO users (name, email) VALUES (%s, %s)',
262
+ ('Alice', 'alice@example.com')
263
+ )
264
+ conn.commit()
265
+
266
+ # Close
267
+ cursor.close()
268
+ conn.close()
269
+ ```
270
+
271
+ ### PHP
272
+
273
+ ```php
274
+ <?php
275
+ // Using PDO
276
+ $pdo = new PDO(
277
+ 'mysql:host=mysql;port=3306;dbname=devdb',
278
+ 'devuser',
279
+ 'devpassword'
280
+ );
281
+
282
+ // Query
283
+ $stmt = $pdo->query('SELECT * FROM users');
284
+ while ($row = $stmt->fetch()) {
285
+ print_r($row);
286
+ }
287
+
288
+ // Insert
289
+ $stmt = $pdo->prepare('INSERT INTO users (name, email) VALUES (?, ?)');
290
+ $stmt->execute(['Alice', 'alice@example.com']);
291
+ ?>
292
+ ```
293
+
294
+ ### .NET
295
+
296
+ ```bash
297
+ # Install MySQL connector
298
+ dotnet add package MySql.Data
299
+ ```
300
+
301
+ ```csharp
302
+ using MySql.Data.MySqlClient;
303
+
304
+ var connectionString = "Server=mysql;Port=3306;Database=devdb;Uid=devuser;Pwd=devpassword;";
305
+
306
+ using var connection = new MySqlConnection(connectionString);
307
+ await connection.OpenAsync();
308
+
309
+ // Query
310
+ using var command = new MySqlCommand("SELECT * FROM users", connection);
311
+ using var reader = await command.ExecuteReaderAsync();
312
+ while (await reader.ReadAsync())
313
+ {
314
+ Console.WriteLine($"{reader["name"]}: {reader["email"]}");
315
+ }
316
+
317
+ // Insert
318
+ var insertCmd = new MySqlCommand(
319
+ "INSERT INTO users (name, email) VALUES (@name, @email)",
320
+ connection
321
+ );
322
+ insertCmd.Parameters.AddWithValue("@name", "Alice");
323
+ insertCmd.Parameters.AddWithValue("@email", "alice@example.com");
324
+ await insertCmd.ExecuteNonQueryAsync();
325
+ ```
326
+
327
+ ### Go
328
+
329
+ ```bash
330
+ # Install MySQL driver
331
+ go get github.com/go-sql-driver/mysql
332
+ ```
333
+
334
+ ```go
335
+ package main
336
+
337
+ import (
338
+ "database/sql"
339
+ _ "github.com/go-sql-driver/mysql"
340
+ )
341
+
342
+ func main() {
343
+ db, _ := sql.Open("mysql", "devuser:devpassword@tcp(mysql:3306)/devdb")
344
+ defer db.Close()
345
+
346
+ // Query
347
+ rows, _ := db.Query("SELECT * FROM users")
348
+ defer rows.Close()
349
+
350
+ for rows.Next() {
351
+ var name, email string
352
+ rows.Scan(&name, &email)
353
+ println(name, email)
354
+ }
355
+
356
+ // Insert
357
+ db.Exec("INSERT INTO users (name, email) VALUES (?, ?)",
358
+ "Alice", "alice@example.com")
359
+ }
360
+ ```
361
+
362
+ ## Use Cases
363
+
364
+ - **Legacy compatibility** - Wide ecosystem support, established patterns
365
+ - **WordPress/PHP applications** - Traditional LAMP stack development
366
+ - **E-commerce platforms** - Proven for transactional workloads
367
+ - **CMS and blogging platforms** - Drupal, Joomla, WordPress
368
+ - **General web applications** - Mature, well-documented, reliable
369
+ - **Learning SQL** - Industry-standard relational database
370
+
371
+ **Integrates well with:**
372
+
373
+ - PHP, Node.js, Python, .NET, Go (application development)
374
+ - Grafana (database metrics visualization)
375
+ - OTEL Collector (query performance monitoring)
376
+
377
+ ## Troubleshooting
378
+
379
+ ### Issue: Cannot connect to MySQL
380
+
381
+ **Symptoms:**
382
+
383
+ - Connection refused errors
384
+ - Timeout when connecting
385
+
386
+ **Solution:**
387
+
388
+ ```bash
389
+ # Check if service is running
390
+ docker-compose ps
391
+
392
+ # Check MySQL logs
393
+ docker-compose logs mysql
394
+
395
+ # Wait for health check to pass
396
+ docker-compose ps | grep mysql
397
+ # Look for "healthy" status
398
+
399
+ # Test connection
400
+ mysql -h mysql -u root -prootpassword -e "SELECT 1"
401
+ ```
402
+
403
+ ### Issue: Access denied for user
404
+
405
+ **Symptoms:**
406
+
407
+ - "Access denied for user 'devuser'@'%'"
408
+ - Authentication errors
409
+
410
+ **Solution:**
411
+
412
+ ```bash
413
+ # Verify credentials in .env file
414
+ cat .devcontainer/.env
415
+
416
+ # Ensure credentials match in connection string
417
+ # mysql://USERNAME:PASSWORD@mysql:3306/DATABASE
418
+
419
+ # If changing credentials, recreate containers
420
+ docker-compose down -v
421
+ docker-compose up -d
422
+ ```
423
+
424
+ ### Issue: phpMyAdmin not accessible
425
+
426
+ **Symptoms:**
427
+
428
+ - Cannot access http://localhost:8080
429
+ - Page not loading
430
+
431
+ **Solution:**
432
+
433
+ ```bash
434
+ # Check phpMyAdmin logs
435
+ docker-compose logs phpmyadmin
436
+
437
+ # Verify MySQL is healthy first
438
+ docker-compose ps mysql
439
+
440
+ # Restart phpMyAdmin
441
+ docker-compose restart phpmyadmin
442
+
443
+ # Check port forwarding in VS Code
444
+ # Dev Containers: Forward Ports... (port 8080)
445
+ ```
446
+
447
+ ### Issue: Database not found
448
+
449
+ **Symptoms:**
450
+
451
+ - "Unknown database 'devdb'"
452
+
453
+ **Solution:**
454
+
455
+ ```bash
456
+ # Create database manually
457
+ mysql -h mysql -u root -prootpassword -e "CREATE DATABASE devdb;"
458
+
459
+ # Or recreate containers (uses MYSQL_DATABASE env var)
460
+ docker-compose down
461
+ docker-compose up -d
462
+ ```
463
+
464
+ ### Issue: Data not persisting
465
+
466
+ **Symptoms:**
467
+
468
+ - Data lost after container restart
469
+
470
+ **Solution:**
471
+
472
+ ```bash
473
+ # Verify volumes exist
474
+ docker volume ls | grep mysql
475
+
476
+ # Check volume mounts in docker-compose.yml
477
+ docker-compose config
478
+
479
+ # Don't use 'docker-compose down -v' unless you want to delete data
480
+ # Use 'docker-compose down' or 'docker-compose stop' instead
481
+ ```
482
+
483
+ ## Security Considerations
484
+
485
+ ⚠️ **Development-only defaults:**
486
+
487
+ - Default credentials are intentionally weak for development
488
+ - MySQL is exposed on host port (accessible from host machine)
489
+ - Root user has remote access enabled
490
+
491
+ **For production:**
492
+
493
+ 1. **Change credentials:**
494
+
495
+ ```bash
496
+ # Use strong passwords
497
+ MYSQL_ROOT_PASSWORD=<strong-password>
498
+ MYSQL_PASSWORD=<strong-password>
499
+ ```
500
+
501
+ 2. **Limit user privileges:**
502
+
503
+ ```sql
504
+ -- Create user with limited permissions
505
+ CREATE USER 'app'@'%' IDENTIFIED BY 'password';
506
+ GRANT SELECT, INSERT, UPDATE, DELETE ON devdb.* TO 'app'@'%';
507
+ ```
508
+
509
+ 3. **Restrict network access:**
510
+ - Don't expose ports publicly
511
+ - Use firewall rules
512
+ - Consider TLS/SSL for connections
513
+
514
+ 4. **Disable phpMyAdmin in production:**
515
+ ```yaml
516
+ # Comment out or remove phpmyadmin service
517
+ ```
518
+
519
+ ## Related Overlays
520
+
521
+ - **nodejs** - Node.js with MySQL drivers
522
+ - **python** - Python with MySQL connectors
523
+ - **dotnet** - .NET with MySQL.Data
524
+ - **grafana** - Visualize MySQL metrics
525
+ - **otel-collector** - Monitor MySQL query performance
526
+
527
+ ## Additional Resources
528
+
529
+ - [Official MySQL Documentation](https://dev.mysql.com/doc/)
530
+ - [MySQL Docker Image](https://hub.docker.com/_/mysql)
531
+ - [phpMyAdmin](https://www.phpmyadmin.net/)
532
+ - [MySQL Tutorial](https://www.mysqltutorial.org/)
533
+ - [MySQL Best Practices](https://dev.mysql.com/doc/refman/8.0/en/optimization.html)
534
+
535
+ ## Notes
536
+
537
+ - MySQL uses the hostname `mysql` (the service name) for container-to-container communication
538
+ - Data is persisted in a Docker volume (`mysql-data`)
539
+ - phpMyAdmin provides a convenient web UI for database management
540
+ - MySQL 8 includes modern features like window functions, CTEs, and JSON support
541
+ - Health checks ensure MySQL is ready before phpMyAdmin starts
542
+ - Default configuration creates both root and regular user accounts
@@ -0,0 +1,34 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
3
+ "features": {
4
+ "./features/cross-distro-packages": {
5
+ "apt": "default-mysql-client",
6
+ "apk": "mysql-client"
7
+ }
8
+ },
9
+ "customizations": {
10
+ "vscode": {
11
+ "extensions": ["cweijan.vscode-mysql-client2"]
12
+ }
13
+ },
14
+ "runServices": ["mysql", "phpmyadmin"],
15
+ "forwardPorts": [3306, 8080],
16
+ "portsAttributes": {
17
+ "3306": {
18
+ "label": "MySQL",
19
+ "onAutoForward": "notify"
20
+ },
21
+ "8080": {
22
+ "label": "phpMyAdmin",
23
+ "onAutoForward": "openBrowser"
24
+ }
25
+ },
26
+ "remoteEnv": {
27
+ "MYSQL_HOST": "mysql",
28
+ "MYSQL_PORT": "3306",
29
+ "MYSQL_DATABASE": "devdb",
30
+ "MYSQL_USER": "devuser",
31
+ "MYSQL_PASSWORD": "devpassword",
32
+ "MYSQL_ROOT_PASSWORD": "rootpassword"
33
+ }
34
+ }
@@ -0,0 +1,55 @@
1
+ version: '3.8'
2
+
3
+ services:
4
+ mysql:
5
+ image: mysql:${MYSQL_VERSION:-8}
6
+ restart: unless-stopped
7
+ volumes:
8
+ - mysql-data:/var/lib/mysql
9
+ environment:
10
+ MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-rootpassword}
11
+ MYSQL_DATABASE: ${MYSQL_DATABASE:-devdb}
12
+ MYSQL_USER: ${MYSQL_USER:-devuser}
13
+ MYSQL_PASSWORD: ${MYSQL_PASSWORD:-devpassword}
14
+ ports:
15
+ - '${MYSQL_PORT:-3306}:3306'
16
+ networks:
17
+ - devnet
18
+ healthcheck:
19
+ test:
20
+ [
21
+ 'CMD',
22
+ 'mysqladmin',
23
+ 'ping',
24
+ '-h',
25
+ 'localhost',
26
+ '-u',
27
+ 'root',
28
+ '-p${MYSQL_ROOT_PASSWORD:-rootpassword}',
29
+ ]
30
+ interval: 10s
31
+ timeout: 5s
32
+ retries: 5
33
+
34
+ phpmyadmin:
35
+ image: phpmyadmin:${PHPMYADMIN_VERSION:-latest}
36
+ restart: unless-stopped
37
+ environment:
38
+ PMA_HOST: mysql
39
+ PMA_PORT: 3306
40
+ PMA_USER: root
41
+ PMA_PASSWORD: ${MYSQL_ROOT_PASSWORD:-rootpassword}
42
+ UPLOAD_LIMIT: 100M
43
+ ports:
44
+ - '${PHPMYADMIN_PORT:-8080}:80'
45
+ networks:
46
+ - devnet
47
+ depends_on:
48
+ mysql:
49
+ condition: service_healthy
50
+
51
+ volumes:
52
+ mysql-data:
53
+
54
+ networks:
55
+ devnet:
@@ -0,0 +1,16 @@
1
+ id: mysql
2
+ name: MySQL
3
+ description: MySQL 8 with phpMyAdmin web UI
4
+ category: database
5
+ supports:
6
+ - compose
7
+ requires: []
8
+ suggests: []
9
+ conflicts: []
10
+ tags:
11
+ - database
12
+ - sql
13
+ - mysql
14
+ ports:
15
+ - 3306
16
+ - 8080
@@ -0,0 +1,48 @@
1
+ #!/bin/bash
2
+ # Verification script for MySQL overlay
3
+ # Confirms MySQL client and services are accessible
4
+
5
+ set -e
6
+
7
+ echo "🔍 Verifying MySQL overlay..."
8
+ echo ""
9
+
10
+ # Check mysql client is installed
11
+ echo "1️⃣ Checking mysql client..."
12
+ if command -v mysql &> /dev/null; then
13
+ mysql --version
14
+ echo " ✅ mysql client found"
15
+ else
16
+ echo " ❌ mysql client not found"
17
+ exit 1
18
+ fi
19
+
20
+ # Check if MySQL service is running
21
+ echo ""
22
+ echo "2️⃣ Checking MySQL service..."
23
+ MYSQL_READY=false
24
+ for i in {1..15}; do
25
+ if mysql -h mysql -P 3306 -u root -prootpassword -e "SELECT 1" &> /dev/null; then
26
+ echo " ✅ MySQL service is ready"
27
+ MYSQL_READY=true
28
+ break
29
+ fi
30
+ sleep 1
31
+ done
32
+
33
+ if [ "$MYSQL_READY" = false ]; then
34
+ echo " ❌ MySQL service not ready after 15 seconds"
35
+ exit 1
36
+ fi
37
+
38
+ # Check phpMyAdmin
39
+ echo ""
40
+ echo "3️⃣ Checking phpMyAdmin web UI..."
41
+ if curl -s -o /dev/null -w "%{http_code}" http://phpmyadmin:80 | grep -q "200"; then
42
+ echo " ✅ phpMyAdmin is accessible"
43
+ else
44
+ echo " ⚠️ phpMyAdmin may still be starting up"
45
+ fi
46
+
47
+ echo ""
48
+ echo "✅ MySQL overlay verification complete"
@@ -0,0 +1,5 @@
1
+ # NATS Configuration
2
+ NATS_VERSION=latest
3
+ NATS_CLIENT_PORT=4222
4
+ NATS_HTTP_PORT=8222
5
+ NATS_CLUSTER_PORT=6222