container-superposition 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +843 -0
- package/dist/scripts/init.d.ts +3 -0
- package/dist/scripts/init.d.ts.map +1 -0
- package/dist/scripts/init.js +1190 -0
- package/dist/scripts/init.js.map +1 -0
- package/dist/scripts/migrate-to-manifests.d.ts +12 -0
- package/dist/scripts/migrate-to-manifests.d.ts.map +1 -0
- package/dist/scripts/migrate-to-manifests.js +230 -0
- package/dist/scripts/migrate-to-manifests.js.map +1 -0
- package/dist/tool/questionnaire/composer.d.ts +6 -0
- package/dist/tool/questionnaire/composer.d.ts.map +1 -0
- package/dist/tool/questionnaire/composer.js +1232 -0
- package/dist/tool/questionnaire/composer.js.map +1 -0
- package/dist/tool/readme/markdown-parser.d.ts +30 -0
- package/dist/tool/readme/markdown-parser.d.ts.map +1 -0
- package/dist/tool/readme/markdown-parser.js +139 -0
- package/dist/tool/readme/markdown-parser.js.map +1 -0
- package/dist/tool/readme/readme-generator.d.ts +9 -0
- package/dist/tool/readme/readme-generator.d.ts.map +1 -0
- package/dist/tool/readme/readme-generator.js +422 -0
- package/dist/tool/readme/readme-generator.js.map +1 -0
- package/dist/tool/schema/custom-loader.d.ts +17 -0
- package/dist/tool/schema/custom-loader.d.ts.map +1 -0
- package/dist/tool/schema/custom-loader.js +149 -0
- package/dist/tool/schema/custom-loader.js.map +1 -0
- package/dist/tool/schema/overlay-loader.d.ts +47 -0
- package/dist/tool/schema/overlay-loader.d.ts.map +1 -0
- package/dist/tool/schema/overlay-loader.js +252 -0
- package/dist/tool/schema/overlay-loader.js.map +1 -0
- package/dist/tool/schema/types.d.ts +212 -0
- package/dist/tool/schema/types.d.ts.map +1 -0
- package/dist/tool/schema/types.js +5 -0
- package/dist/tool/schema/types.js.map +1 -0
- package/docs/README.md +308 -0
- package/docs/architecture.md +233 -0
- package/docs/creating-overlays.md +549 -0
- package/docs/custom-patches.md +540 -0
- package/docs/dependencies.md +279 -0
- package/docs/examples/custom-patches-example.md +85 -0
- package/docs/examples.md +576 -0
- package/docs/messaging-comparison.md +265 -0
- package/docs/messaging-quick-start.md +385 -0
- package/docs/observability-workflow.md +537 -0
- package/docs/overlay-manifest-refactoring.md +214 -0
- package/docs/overlay-metadata-archive.md +54 -0
- package/docs/overlays.md +523 -0
- package/docs/presets-architecture.md +498 -0
- package/docs/presets.md +366 -0
- package/docs/publishing.md +476 -0
- package/docs/quick-reference.md +326 -0
- package/docs/ux.md +170 -0
- package/features/README.md +85 -0
- package/features/cross-distro-packages/README.md +146 -0
- package/features/cross-distro-packages/devcontainer-feature.json +20 -0
- package/features/cross-distro-packages/install.sh +58 -0
- package/features/local-secrets-manager/devcontainer-feature.json +18 -0
- package/features/local-secrets-manager/install.sh +127 -0
- package/features/project-scaffolder/devcontainer-feature.json +24 -0
- package/features/project-scaffolder/install.sh +100 -0
- package/features/team-conventions/devcontainer-feature.json +24 -0
- package/features/team-conventions/install.sh +93 -0
- package/overlays/.registry/README.md +14 -0
- package/overlays/.registry/base-images.yml +26 -0
- package/overlays/.registry/base-templates.yml +7 -0
- package/overlays/README.md +155 -0
- package/overlays/alertmanager/.env.example +5 -0
- package/overlays/alertmanager/README.md +465 -0
- package/overlays/alertmanager/alert-rules.yml +56 -0
- package/overlays/alertmanager/alertmanager.yml +42 -0
- package/overlays/alertmanager/devcontainer.patch.json +12 -0
- package/overlays/alertmanager/docker-compose.yml +20 -0
- package/overlays/alertmanager/overlay.yml +17 -0
- package/overlays/alertmanager/setup.sh +53 -0
- package/overlays/alertmanager/verify.sh +31 -0
- package/overlays/aws-cli/README.md +473 -0
- package/overlays/aws-cli/devcontainer.patch.json +13 -0
- package/overlays/aws-cli/overlay.yml +13 -0
- package/overlays/azure-cli/README.md +551 -0
- package/overlays/azure-cli/devcontainer.patch.json +8 -0
- package/overlays/azure-cli/overlay.yml +13 -0
- package/overlays/bun/README.md +312 -0
- package/overlays/bun/devcontainer.patch.json +41 -0
- package/overlays/bun/overlay.yml +16 -0
- package/overlays/bun/setup.sh +79 -0
- package/overlays/bun/verify.sh +30 -0
- package/overlays/codex/README.md +128 -0
- package/overlays/codex/devcontainer.patch.json +3 -0
- package/overlays/codex/overlay.yml +14 -0
- package/overlays/codex/setup.sh +24 -0
- package/overlays/codex/verify.sh +30 -0
- package/overlays/commitlint/README.md +333 -0
- package/overlays/commitlint/devcontainer.patch.json +8 -0
- package/overlays/commitlint/overlay.yml +16 -0
- package/overlays/commitlint/setup.sh +234 -0
- package/overlays/direnv/README.md +504 -0
- package/overlays/direnv/devcontainer.patch.json +6 -0
- package/overlays/direnv/overlay.yml +13 -0
- package/overlays/direnv/setup.sh +139 -0
- package/overlays/docker-in-docker/README.md +534 -0
- package/overlays/docker-in-docker/devcontainer.patch.json +10 -0
- package/overlays/docker-in-docker/overlay.yml +13 -0
- package/overlays/docker-sock/README.md +256 -0
- package/overlays/docker-sock/devcontainer.patch.json +9 -0
- package/overlays/docker-sock/docker-compose.yml +8 -0
- package/overlays/docker-sock/overlay.yml +13 -0
- package/overlays/dotnet/README.md +147 -0
- package/overlays/dotnet/devcontainer.patch.json +51 -0
- package/overlays/dotnet/global-tools.txt +24 -0
- package/overlays/dotnet/overlay.yml +13 -0
- package/overlays/dotnet/setup.sh +51 -0
- package/overlays/dotnet/verify.sh +26 -0
- package/overlays/gcloud/README.md +269 -0
- package/overlays/gcloud/devcontainer.patch.json +14 -0
- package/overlays/gcloud/overlay.yml +14 -0
- package/overlays/gcloud/verify.sh +52 -0
- package/overlays/git-helpers/README.md +168 -0
- package/overlays/git-helpers/devcontainer.patch.json +33 -0
- package/overlays/git-helpers/overlay.yml +15 -0
- package/overlays/git-helpers/setup.sh +91 -0
- package/overlays/go/README.md +293 -0
- package/overlays/go/devcontainer.patch.json +43 -0
- package/overlays/go/overlay.yml +15 -0
- package/overlays/go/setup.sh +33 -0
- package/overlays/go/verify.sh +40 -0
- package/overlays/grafana/.env.example +9 -0
- package/overlays/grafana/README.md +462 -0
- package/overlays/grafana/dashboard-provider.yml +11 -0
- package/overlays/grafana/dashboards/observability-overview.json +263 -0
- package/overlays/grafana/devcontainer.patch.json +12 -0
- package/overlays/grafana/docker-compose.yml +27 -0
- package/overlays/grafana/grafana-datasources.yml +57 -0
- package/overlays/grafana/overlay.yml +21 -0
- package/overlays/grafana/verify.sh +34 -0
- package/overlays/jaeger/.env.example +7 -0
- package/overlays/jaeger/README.md +867 -0
- package/overlays/jaeger/devcontainer.patch.json +12 -0
- package/overlays/jaeger/docker-compose.yml +17 -0
- package/overlays/jaeger/overlay.yml +19 -0
- package/overlays/java/README.md +267 -0
- package/overlays/java/devcontainer.patch.json +44 -0
- package/overlays/java/overlay.yml +16 -0
- package/overlays/java/setup.sh +41 -0
- package/overlays/java/verify.sh +42 -0
- package/overlays/just/README.md +443 -0
- package/overlays/just/devcontainer.patch.json +3 -0
- package/overlays/just/overlay.yml +13 -0
- package/overlays/just/setup.sh +182 -0
- package/overlays/kubectl-helm/README.md +660 -0
- package/overlays/kubectl-helm/devcontainer.patch.json +10 -0
- package/overlays/kubectl-helm/overlay.yml +13 -0
- package/overlays/loki/.env.example +5 -0
- package/overlays/loki/README.md +1156 -0
- package/overlays/loki/devcontainer.patch.json +12 -0
- package/overlays/loki/docker-compose.yml +18 -0
- package/overlays/loki/loki-config.yaml +45 -0
- package/overlays/loki/overlay.yml +17 -0
- package/overlays/minio/.env.example +9 -0
- package/overlays/minio/README.md +639 -0
- package/overlays/minio/devcontainer.patch.json +30 -0
- package/overlays/minio/docker-compose.yml +28 -0
- package/overlays/minio/overlay.yml +18 -0
- package/overlays/minio/setup.sh +61 -0
- package/overlays/minio/verify.sh +64 -0
- package/overlays/mkdocs/README.md +309 -0
- package/overlays/mkdocs/devcontainer.patch.json +24 -0
- package/overlays/mkdocs/overlay.yml +15 -0
- package/overlays/modern-cli-tools/README.md +556 -0
- package/overlays/modern-cli-tools/devcontainer.patch.json +3 -0
- package/overlays/modern-cli-tools/overlay.yml +13 -0
- package/overlays/modern-cli-tools/setup.sh +153 -0
- package/overlays/mongodb/.env.example +9 -0
- package/overlays/mongodb/README.md +481 -0
- package/overlays/mongodb/devcontainer.patch.json +32 -0
- package/overlays/mongodb/docker-compose.yml +44 -0
- package/overlays/mongodb/overlay.yml +17 -0
- package/overlays/mongodb/verify.sh +48 -0
- package/overlays/mysql/.env.example +11 -0
- package/overlays/mysql/README.md +542 -0
- package/overlays/mysql/devcontainer.patch.json +34 -0
- package/overlays/mysql/docker-compose.yml +55 -0
- package/overlays/mysql/overlay.yml +16 -0
- package/overlays/mysql/verify.sh +48 -0
- package/overlays/nats/.env.example +5 -0
- package/overlays/nats/README.md +762 -0
- package/overlays/nats/devcontainer.patch.json +24 -0
- package/overlays/nats/docker-compose.yml +31 -0
- package/overlays/nats/overlay.yml +18 -0
- package/overlays/nats/verify.sh +50 -0
- package/overlays/ngrok/README.md +503 -0
- package/overlays/ngrok/devcontainer.patch.json +3 -0
- package/overlays/ngrok/overlay.yml +14 -0
- package/overlays/ngrok/setup.sh +125 -0
- package/overlays/nodejs/README.md +192 -0
- package/overlays/nodejs/devcontainer.patch.json +49 -0
- package/overlays/nodejs/global-packages.txt +16 -0
- package/overlays/nodejs/overlay.yml +14 -0
- package/overlays/nodejs/setup.sh +46 -0
- package/overlays/nodejs/verify.sh +32 -0
- package/overlays/otel-collector/.env.example +9 -0
- package/overlays/otel-collector/README.md +1257 -0
- package/overlays/otel-collector/devcontainer.patch.json +28 -0
- package/overlays/otel-collector/docker-compose.yml +22 -0
- package/overlays/otel-collector/otel-collector-config.yaml +68 -0
- package/overlays/otel-collector/overlay.yml +21 -0
- package/overlays/otel-collector/setup.sh +49 -0
- package/overlays/otel-demo-nodejs/.env.example +2 -0
- package/overlays/otel-demo-nodejs/Dockerfile-otel-demo-nodejs +17 -0
- package/overlays/otel-demo-nodejs/README.md +409 -0
- package/overlays/otel-demo-nodejs/devcontainer.patch.json +12 -0
- package/overlays/otel-demo-nodejs/docker-compose.yml +19 -0
- package/overlays/otel-demo-nodejs/overlay.yml +23 -0
- package/overlays/otel-demo-nodejs/package-otel-demo-nodejs.json +20 -0
- package/overlays/otel-demo-nodejs/server-otel-demo-nodejs.js +259 -0
- package/overlays/otel-demo-nodejs/tracing-otel-demo-nodejs.js +57 -0
- package/overlays/otel-demo-nodejs/verify.sh +31 -0
- package/overlays/otel-demo-python/.env.example +2 -0
- package/overlays/otel-demo-python/Dockerfile-otel-demo-python +16 -0
- package/overlays/otel-demo-python/README.md +82 -0
- package/overlays/otel-demo-python/app-otel-demo-python.py +208 -0
- package/overlays/otel-demo-python/devcontainer.patch.json +12 -0
- package/overlays/otel-demo-python/docker-compose.yml +19 -0
- package/overlays/otel-demo-python/overlay.yml +23 -0
- package/overlays/otel-demo-python/requirements-otel-demo-python.txt +4 -0
- package/overlays/otel-demo-python/verify.sh +31 -0
- package/overlays/playwright/README.md +629 -0
- package/overlays/playwright/devcontainer.patch.json +9 -0
- package/overlays/playwright/overlay.yml +13 -0
- package/overlays/postgres/.env.example +6 -0
- package/overlays/postgres/README.md +602 -0
- package/overlays/postgres/devcontainer.patch.json +21 -0
- package/overlays/postgres/docker-compose.yml +22 -0
- package/overlays/postgres/overlay.yml +15 -0
- package/overlays/postgres/verify.sh +45 -0
- package/overlays/powershell/README.md +314 -0
- package/overlays/powershell/devcontainer.patch.json +22 -0
- package/overlays/powershell/overlay.yml +13 -0
- package/overlays/powershell/setup.sh +29 -0
- package/overlays/powershell/verify.sh +38 -0
- package/overlays/pre-commit/README.md +263 -0
- package/overlays/pre-commit/devcontainer.patch.json +9 -0
- package/overlays/pre-commit/overlay.yml +16 -0
- package/overlays/pre-commit/setup.sh +129 -0
- package/overlays/presets/docs-site.yml +118 -0
- package/overlays/presets/fullstack.yml +181 -0
- package/overlays/presets/microservice.yml +118 -0
- package/overlays/presets/web-api.yml +109 -0
- package/overlays/prometheus/.env.example +5 -0
- package/overlays/prometheus/README.md +1246 -0
- package/overlays/prometheus/devcontainer.patch.json +12 -0
- package/overlays/prometheus/docker-compose.yml +22 -0
- package/overlays/prometheus/overlay.yml +17 -0
- package/overlays/prometheus/prometheus.yml +12 -0
- package/overlays/prometheus/verify.sh +34 -0
- package/overlays/promtail/.env.example +2 -0
- package/overlays/promtail/README.md +357 -0
- package/overlays/promtail/devcontainer.patch.json +5 -0
- package/overlays/promtail/docker-compose.yml +16 -0
- package/overlays/promtail/overlay.yml +17 -0
- package/overlays/promtail/promtail-config.yaml +60 -0
- package/overlays/promtail/verify.sh +31 -0
- package/overlays/pulumi/README.md +472 -0
- package/overlays/pulumi/devcontainer.patch.json +13 -0
- package/overlays/pulumi/overlay.yml +14 -0
- package/overlays/pulumi/verify.sh +31 -0
- package/overlays/python/README.md +919 -0
- package/overlays/python/devcontainer.patch.json +41 -0
- package/overlays/python/overlay.yml +12 -0
- package/overlays/python/requirements-overlay.txt +13 -0
- package/overlays/python/setup.sh +47 -0
- package/overlays/python/verify.sh +32 -0
- package/overlays/rabbitmq/.env.example +7 -0
- package/overlays/rabbitmq/README.md +680 -0
- package/overlays/rabbitmq/devcontainer.patch.json +28 -0
- package/overlays/rabbitmq/docker-compose.yml +30 -0
- package/overlays/rabbitmq/overlay.yml +18 -0
- package/overlays/rabbitmq/verify.sh +41 -0
- package/overlays/redis/.env.example +4 -0
- package/overlays/redis/README.md +776 -0
- package/overlays/redis/devcontainer.patch.json +21 -0
- package/overlays/redis/docker-compose.yml +21 -0
- package/overlays/redis/overlay.yml +15 -0
- package/overlays/redis/verify.sh +41 -0
- package/overlays/redpanda/.env.example +10 -0
- package/overlays/redpanda/README.md +703 -0
- package/overlays/redpanda/devcontainer.patch.json +37 -0
- package/overlays/redpanda/docker-compose.yml +67 -0
- package/overlays/redpanda/overlay.yml +21 -0
- package/overlays/redpanda/verify.sh +48 -0
- package/overlays/rust/README.md +299 -0
- package/overlays/rust/devcontainer.patch.json +39 -0
- package/overlays/rust/overlay.yml +15 -0
- package/overlays/rust/setup.sh +36 -0
- package/overlays/rust/verify.sh +51 -0
- package/overlays/sqlite/README.md +584 -0
- package/overlays/sqlite/devcontainer.patch.json +14 -0
- package/overlays/sqlite/overlay.yml +15 -0
- package/overlays/sqlite/setup.sh +27 -0
- package/overlays/sqlite/verify.sh +43 -0
- package/overlays/sqlserver/.env.example +6 -0
- package/overlays/sqlserver/README.md +592 -0
- package/overlays/sqlserver/devcontainer.patch.json +22 -0
- package/overlays/sqlserver/docker-compose.yml +32 -0
- package/overlays/sqlserver/overlay.yml +17 -0
- package/overlays/sqlserver/verify.sh +30 -0
- package/overlays/tempo/.env.example +5 -0
- package/overlays/tempo/README.md +273 -0
- package/overlays/tempo/devcontainer.patch.json +12 -0
- package/overlays/tempo/docker-compose.yml +20 -0
- package/overlays/tempo/overlay.yml +20 -0
- package/overlays/tempo/tempo-config.yaml +32 -0
- package/overlays/tempo/verify.sh +31 -0
- package/overlays/terraform/README.md +389 -0
- package/overlays/terraform/devcontainer.patch.json +15 -0
- package/overlays/terraform/overlay.yml +14 -0
- package/overlays/terraform/verify.sh +63 -0
- package/package.json +74 -0
- package/templates/README.md +285 -0
- package/templates/compose/.devcontainer/devcontainer.json +46 -0
- package/templates/compose/.devcontainer/docker-compose.yml +12 -0
- package/templates/compose/README.md +20 -0
- package/templates/plain/.devcontainer/devcontainer.json +35 -0
- package/templates/plain/README.md +21 -0
- package/tool/README.md +281 -0
- package/tool/schema/base-images.schema.json +43 -0
- package/tool/schema/base-templates.schema.json +34 -0
- package/tool/schema/config.schema.json +71 -0
- package/tool/schema/overlay-manifest.schema.json +86 -0
|
@@ -0,0 +1,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,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"
|