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,481 @@
|
|
|
1
|
+
# MongoDB Overlay
|
|
2
|
+
|
|
3
|
+
MongoDB document database with Mongo Express web UI for development and testing.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **MongoDB 8** - Latest stable version with modern document store features
|
|
8
|
+
- **Mongo Express** - Web-based MongoDB admin interface (port 8081)
|
|
9
|
+
- **mongosh** - Modern MongoDB Shell for database operations
|
|
10
|
+
- **Docker Compose services** - Runs as separate containers
|
|
11
|
+
- **Persistent storage** - Data and config survive container restarts
|
|
12
|
+
- **Health checks** - Ensures services are ready before use
|
|
13
|
+
- **VS Code Extension:** MongoDB for VS Code (mongodb.mongodb-vscode)
|
|
14
|
+
|
|
15
|
+
## How It Works
|
|
16
|
+
|
|
17
|
+
This overlay adds MongoDB 8 and Mongo Express as separate Docker Compose services. The database runs in its own container and is accessible from your development container via the hostname `mongodb`.
|
|
18
|
+
|
|
19
|
+
**Architecture:**
|
|
20
|
+
|
|
21
|
+
```mermaid
|
|
22
|
+
graph TD
|
|
23
|
+
A[Development Container<br/>Your application code<br/>mongosh client<br/>Connects to mongodb:27017] -->|Docker network devnet| B[MongoDB Container<br/>MongoDB 8 server<br/>Port 27017<br/>Data volumes]
|
|
24
|
+
B --> C[Mongo Express Container<br/>Web UI on port 8081<br/>Connected to MongoDB]
|
|
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
|
+
# MongoDB Configuration
|
|
42
|
+
MONGODB_VERSION=8
|
|
43
|
+
MONGODB_USER=root
|
|
44
|
+
MONGODB_PASSWORD=example
|
|
45
|
+
MONGODB_PORT=27017
|
|
46
|
+
|
|
47
|
+
# Mongo Express Configuration
|
|
48
|
+
MONGO_EXPRESS_VERSION=latest
|
|
49
|
+
MONGO_EXPRESS_PORT=8081
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
⚠️ **SECURITY:** Change the default password for production use. The `.env` file is git-ignored.
|
|
53
|
+
|
|
54
|
+
### Port Configuration
|
|
55
|
+
|
|
56
|
+
Default ports can be changed via the `--port-offset` option when initializing:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# Offset all ports by 100
|
|
60
|
+
container-superposition --port-offset 100
|
|
61
|
+
|
|
62
|
+
# MongoDB will be on 27117, Mongo Express on 8181
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Connection Information
|
|
66
|
+
|
|
67
|
+
### From Development Container
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# Hostname: mongodb (Docker Compose service name)
|
|
71
|
+
# Port: 27017
|
|
72
|
+
# Username: root (or value from .env)
|
|
73
|
+
# Password: example (or value from .env)
|
|
74
|
+
|
|
75
|
+
# Connection string
|
|
76
|
+
mongodb://root:example@mongodb:27017/
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### From Host Machine
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
# Hostname: localhost
|
|
83
|
+
# Port: 27017 (or 27017 + port-offset)
|
|
84
|
+
# Username: root
|
|
85
|
+
# Password: example
|
|
86
|
+
|
|
87
|
+
# Connection string
|
|
88
|
+
mongodb://root:example@localhost:27017/
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Mongo Express Web UI
|
|
92
|
+
|
|
93
|
+
Access the web interface from your host machine:
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
http://localhost:8081
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
(or port 8081 + port-offset if using offset)
|
|
100
|
+
|
|
101
|
+
## Common Commands
|
|
102
|
+
|
|
103
|
+
### Using mongosh (MongoDB Shell)
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# Connect to MongoDB
|
|
107
|
+
mongosh --host mongodb --port 27017 -u root -p example
|
|
108
|
+
|
|
109
|
+
# Or with connection string
|
|
110
|
+
mongosh "mongodb://root:example@mongodb:27017/"
|
|
111
|
+
|
|
112
|
+
# Connect to specific database
|
|
113
|
+
mongosh "mongodb://root:example@mongodb:27017/myapp"
|
|
114
|
+
|
|
115
|
+
# Run command directly
|
|
116
|
+
mongosh --host mongodb -u root -p example --eval "db.version()"
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Database Operations
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
# Show databases
|
|
123
|
+
mongosh mongodb://root:example@mongodb:27017/ --eval "show dbs"
|
|
124
|
+
|
|
125
|
+
# Create/use database
|
|
126
|
+
mongosh mongodb://root:example@mongodb:27017/ --eval "use myapp"
|
|
127
|
+
|
|
128
|
+
# Show collections
|
|
129
|
+
mongosh mongodb://root:example@mongodb:27017/myapp --eval "show collections"
|
|
130
|
+
|
|
131
|
+
# Insert document
|
|
132
|
+
mongosh mongodb://root:example@mongodb:27017/myapp --eval 'db.users.insertOne({name: "Alice", email: "alice@example.com"})'
|
|
133
|
+
|
|
134
|
+
# Query documents
|
|
135
|
+
mongosh mongodb://root:example@mongodb:27017/myapp --eval 'db.users.find()'
|
|
136
|
+
|
|
137
|
+
# Drop database
|
|
138
|
+
mongosh mongodb://root:example@mongodb:27017/ --eval "db.dropDatabase()"
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Container Management
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
# Check service status
|
|
145
|
+
docker-compose ps
|
|
146
|
+
|
|
147
|
+
# View MongoDB logs
|
|
148
|
+
docker-compose logs -f mongodb
|
|
149
|
+
|
|
150
|
+
# View Mongo Express logs
|
|
151
|
+
docker-compose logs -f mongo-express
|
|
152
|
+
|
|
153
|
+
# Restart services
|
|
154
|
+
docker-compose restart mongodb mongo-express
|
|
155
|
+
|
|
156
|
+
# Stop services
|
|
157
|
+
docker-compose stop mongodb mongo-express
|
|
158
|
+
|
|
159
|
+
# Remove data (WARNING: destroys all data)
|
|
160
|
+
docker-compose down -v
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## Application Integration
|
|
164
|
+
|
|
165
|
+
### Node.js
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
# Install MongoDB driver
|
|
169
|
+
npm install mongodb
|
|
170
|
+
|
|
171
|
+
# Or use Mongoose ODM
|
|
172
|
+
npm install mongoose
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
```javascript
|
|
176
|
+
// Using native MongoDB driver
|
|
177
|
+
const { MongoClient } = require('mongodb');
|
|
178
|
+
|
|
179
|
+
const url = 'mongodb://root:example@mongodb:27017/';
|
|
180
|
+
const client = new MongoClient(url);
|
|
181
|
+
|
|
182
|
+
async function main() {
|
|
183
|
+
await client.connect();
|
|
184
|
+
const db = client.db('myapp');
|
|
185
|
+
const collection = db.collection('users');
|
|
186
|
+
|
|
187
|
+
// Insert
|
|
188
|
+
await collection.insertOne({ name: 'Alice', email: 'alice@example.com' });
|
|
189
|
+
|
|
190
|
+
// Find
|
|
191
|
+
const users = await collection.find({}).toArray();
|
|
192
|
+
console.log(users);
|
|
193
|
+
|
|
194
|
+
await client.close();
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
main();
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
```javascript
|
|
201
|
+
// Using Mongoose
|
|
202
|
+
const mongoose = require('mongoose');
|
|
203
|
+
|
|
204
|
+
mongoose.connect('mongodb://root:example@mongodb:27017/myapp');
|
|
205
|
+
|
|
206
|
+
const UserSchema = new mongoose.Schema({
|
|
207
|
+
name: String,
|
|
208
|
+
email: String,
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
const User = mongoose.model('User', UserSchema);
|
|
212
|
+
|
|
213
|
+
// Create
|
|
214
|
+
const user = new User({ name: 'Alice', email: 'alice@example.com' });
|
|
215
|
+
await user.save();
|
|
216
|
+
|
|
217
|
+
// Find
|
|
218
|
+
const users = await User.find();
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### Python
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
# Install PyMongo driver
|
|
225
|
+
pip install pymongo
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
```python
|
|
229
|
+
from pymongo import MongoClient
|
|
230
|
+
|
|
231
|
+
# Connect
|
|
232
|
+
client = MongoClient('mongodb://root:example@mongodb:27017/')
|
|
233
|
+
db = client.myapp
|
|
234
|
+
collection = db.users
|
|
235
|
+
|
|
236
|
+
# Insert
|
|
237
|
+
collection.insert_one({'name': 'Alice', 'email': 'alice@example.com'})
|
|
238
|
+
|
|
239
|
+
# Find
|
|
240
|
+
users = collection.find()
|
|
241
|
+
for user in users:
|
|
242
|
+
print(user)
|
|
243
|
+
|
|
244
|
+
# Close
|
|
245
|
+
client.close()
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### .NET
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
# Install MongoDB driver
|
|
252
|
+
dotnet add package MongoDB.Driver
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
```csharp
|
|
256
|
+
using MongoDB.Driver;
|
|
257
|
+
using MongoDB.Bson;
|
|
258
|
+
|
|
259
|
+
var client = new MongoClient("mongodb://root:example@mongodb:27017/");
|
|
260
|
+
var database = client.GetDatabase("myapp");
|
|
261
|
+
var collection = database.GetCollection<BsonDocument>("users");
|
|
262
|
+
|
|
263
|
+
// Insert
|
|
264
|
+
var document = new BsonDocument
|
|
265
|
+
{
|
|
266
|
+
{ "name", "Alice" },
|
|
267
|
+
{ "email", "alice@example.com" }
|
|
268
|
+
};
|
|
269
|
+
await collection.InsertOneAsync(document);
|
|
270
|
+
|
|
271
|
+
// Find
|
|
272
|
+
var users = await collection.Find(new BsonDocument()).ToListAsync();
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
### Go
|
|
276
|
+
|
|
277
|
+
```bash
|
|
278
|
+
# Install MongoDB driver
|
|
279
|
+
go get go.mongodb.org/mongo-driver/mongo
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
```go
|
|
283
|
+
package main
|
|
284
|
+
|
|
285
|
+
import (
|
|
286
|
+
"context"
|
|
287
|
+
"go.mongodb.org/mongo-driver/bson"
|
|
288
|
+
"go.mongodb.org/mongo-driver/mongo"
|
|
289
|
+
"go.mongodb.org/mongo-driver/mongo/options"
|
|
290
|
+
)
|
|
291
|
+
|
|
292
|
+
func main() {
|
|
293
|
+
ctx := context.Background()
|
|
294
|
+
|
|
295
|
+
client, _ := mongo.Connect(ctx, options.Client().
|
|
296
|
+
ApplyURI("mongodb://root:example@mongodb:27017/"))
|
|
297
|
+
defer client.Disconnect(ctx)
|
|
298
|
+
|
|
299
|
+
collection := client.Database("myapp").Collection("users")
|
|
300
|
+
|
|
301
|
+
// Insert
|
|
302
|
+
collection.InsertOne(ctx, bson.M{
|
|
303
|
+
"name": "Alice",
|
|
304
|
+
"email": "alice@example.com",
|
|
305
|
+
})
|
|
306
|
+
|
|
307
|
+
// Find
|
|
308
|
+
cursor, _ := collection.Find(ctx, bson.M{})
|
|
309
|
+
defer cursor.Close(ctx)
|
|
310
|
+
|
|
311
|
+
for cursor.Next(ctx) {
|
|
312
|
+
var result bson.M
|
|
313
|
+
cursor.Decode(&result)
|
|
314
|
+
println(result)
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
## Use Cases
|
|
320
|
+
|
|
321
|
+
- **Document-oriented applications** - JSON-based data with flexible schemas
|
|
322
|
+
- **Node.js/Python backends** - Native JSON support, popular in MEAN/MERN stacks
|
|
323
|
+
- **Rapid prototyping** - No rigid schema required, fast iteration
|
|
324
|
+
- **Real-time applications** - Change streams for reactive updates
|
|
325
|
+
- **Content management** - Flexible document structure for CMS
|
|
326
|
+
- **Catalog/inventory systems** - Nested data and arrays
|
|
327
|
+
|
|
328
|
+
**Integrates well with:**
|
|
329
|
+
|
|
330
|
+
- Node.js, Python, .NET, Go (application development)
|
|
331
|
+
- Grafana (database metrics visualization)
|
|
332
|
+
- OTEL Collector (query performance monitoring)
|
|
333
|
+
|
|
334
|
+
## Troubleshooting
|
|
335
|
+
|
|
336
|
+
### Issue: Cannot connect to MongoDB
|
|
337
|
+
|
|
338
|
+
**Symptoms:**
|
|
339
|
+
|
|
340
|
+
- Connection refused errors
|
|
341
|
+
- Timeout when connecting
|
|
342
|
+
|
|
343
|
+
**Solution:**
|
|
344
|
+
|
|
345
|
+
```bash
|
|
346
|
+
# Check if service is running
|
|
347
|
+
docker-compose ps
|
|
348
|
+
|
|
349
|
+
# Check MongoDB logs
|
|
350
|
+
docker-compose logs mongodb
|
|
351
|
+
|
|
352
|
+
# Wait for health check to pass
|
|
353
|
+
docker-compose ps | grep mongodb
|
|
354
|
+
# Look for "healthy" status
|
|
355
|
+
|
|
356
|
+
# Test connection
|
|
357
|
+
mongosh --host mongodb --port 27017 -u root -p example --eval "db.adminCommand('ping')"
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
### Issue: Authentication failed
|
|
361
|
+
|
|
362
|
+
**Symptoms:**
|
|
363
|
+
|
|
364
|
+
- "Authentication failed" error
|
|
365
|
+
- Invalid credentials
|
|
366
|
+
|
|
367
|
+
**Solution:**
|
|
368
|
+
|
|
369
|
+
```bash
|
|
370
|
+
# Verify credentials in .env file
|
|
371
|
+
cat .devcontainer/.env
|
|
372
|
+
|
|
373
|
+
# Ensure credentials match in connection string
|
|
374
|
+
# mongodb://USERNAME:PASSWORD@mongodb:27017/
|
|
375
|
+
|
|
376
|
+
# If changing credentials, recreate containers
|
|
377
|
+
docker-compose down -v
|
|
378
|
+
docker-compose up -d
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
### Issue: Mongo Express not accessible
|
|
382
|
+
|
|
383
|
+
**Symptoms:**
|
|
384
|
+
|
|
385
|
+
- Cannot access http://localhost:8081
|
|
386
|
+
- Page not loading
|
|
387
|
+
|
|
388
|
+
**Solution:**
|
|
389
|
+
|
|
390
|
+
```bash
|
|
391
|
+
# Check Mongo Express logs
|
|
392
|
+
docker-compose logs mongo-express
|
|
393
|
+
|
|
394
|
+
# Verify MongoDB is healthy first
|
|
395
|
+
docker-compose ps mongodb
|
|
396
|
+
|
|
397
|
+
# Restart Mongo Express
|
|
398
|
+
docker-compose restart mongo-express
|
|
399
|
+
|
|
400
|
+
# Check port forwarding in VS Code
|
|
401
|
+
# Dev Containers: Forward Ports... (port 8081)
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
### Issue: Data not persisting
|
|
405
|
+
|
|
406
|
+
**Symptoms:**
|
|
407
|
+
|
|
408
|
+
- Data lost after container restart
|
|
409
|
+
|
|
410
|
+
**Solution:**
|
|
411
|
+
|
|
412
|
+
```bash
|
|
413
|
+
# Verify volumes exist
|
|
414
|
+
docker volume ls | grep mongodb
|
|
415
|
+
|
|
416
|
+
# Check volume mounts in docker-compose.yml
|
|
417
|
+
docker-compose config
|
|
418
|
+
|
|
419
|
+
# Don't use 'docker-compose down -v' unless you want to delete data
|
|
420
|
+
# Use 'docker-compose down' or 'docker-compose stop' instead
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
## Security Considerations
|
|
424
|
+
|
|
425
|
+
⚠️ **Development-only defaults:**
|
|
426
|
+
|
|
427
|
+
- Default credentials (`root/example`) are intentionally weak for development
|
|
428
|
+
- Mongo Express has authentication disabled (`ME_CONFIG_BASICAUTH: false`)
|
|
429
|
+
- MongoDB is exposed on host port (accessible from host machine)
|
|
430
|
+
|
|
431
|
+
**For production:**
|
|
432
|
+
|
|
433
|
+
1. **Change credentials:**
|
|
434
|
+
|
|
435
|
+
```bash
|
|
436
|
+
# Use strong passwords
|
|
437
|
+
MONGODB_PASSWORD=<strong-password>
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
2. **Enable Mongo Express authentication:**
|
|
441
|
+
|
|
442
|
+
```yaml
|
|
443
|
+
# In docker-compose.yml
|
|
444
|
+
ME_CONFIG_BASICAUTH: true
|
|
445
|
+
ME_CONFIG_BASICAUTH_USERNAME: admin
|
|
446
|
+
ME_CONFIG_BASICAUTH_PASSWORD: <strong-password>
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
3. **Restrict network access:**
|
|
450
|
+
- Don't expose ports publicly
|
|
451
|
+
- Use firewall rules
|
|
452
|
+
- Consider TLS/SSL for connections
|
|
453
|
+
|
|
454
|
+
4. **Use authentication databases:**
|
|
455
|
+
```bash
|
|
456
|
+
mongosh "mongodb://user:password@mongodb:27017/myapp?authSource=admin"
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
## Related Overlays
|
|
460
|
+
|
|
461
|
+
- **nodejs** - Node.js with native MongoDB support via drivers
|
|
462
|
+
- **python** - Python with PyMongo driver
|
|
463
|
+
- **dotnet** - .NET with MongoDB.Driver
|
|
464
|
+
- **grafana** - Visualize MongoDB metrics
|
|
465
|
+
- **otel-collector** - Monitor MongoDB query performance
|
|
466
|
+
|
|
467
|
+
## Additional Resources
|
|
468
|
+
|
|
469
|
+
- [Official MongoDB Documentation](https://www.mongodb.com/docs/)
|
|
470
|
+
- [MongoDB Shell (mongosh)](https://www.mongodb.com/docs/mongodb-shell/)
|
|
471
|
+
- [Mongo Express](https://github.com/mongo-express/mongo-express)
|
|
472
|
+
- [MongoDB Docker Image](https://hub.docker.com/_/mongo)
|
|
473
|
+
- [MongoDB Drivers](https://www.mongodb.com/docs/drivers/)
|
|
474
|
+
|
|
475
|
+
## Notes
|
|
476
|
+
|
|
477
|
+
- MongoDB uses the hostname `mongodb` (the service name) for container-to-container communication
|
|
478
|
+
- Data is persisted in Docker volumes (`mongodb-data` and `mongodb-config`)
|
|
479
|
+
- Mongo Express provides a convenient web UI for database management and debugging
|
|
480
|
+
- Default configuration uses MongoDB 8 which includes the latest features and performance improvements
|
|
481
|
+
- Health checks ensure MongoDB is ready before Mongo Express starts
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
|
|
3
|
+
"features": {
|
|
4
|
+
"./features/cross-distro-packages": {
|
|
5
|
+
"apt": "mongodb-mongosh",
|
|
6
|
+
"apk": "mongodb-tools"
|
|
7
|
+
}
|
|
8
|
+
},
|
|
9
|
+
"customizations": {
|
|
10
|
+
"vscode": {
|
|
11
|
+
"extensions": ["mongodb.mongodb-vscode"]
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"runServices": ["mongodb", "mongo-express"],
|
|
15
|
+
"forwardPorts": [27017, 8081],
|
|
16
|
+
"portsAttributes": {
|
|
17
|
+
"27017": {
|
|
18
|
+
"label": "MongoDB",
|
|
19
|
+
"onAutoForward": "notify"
|
|
20
|
+
},
|
|
21
|
+
"8081": {
|
|
22
|
+
"label": "Mongo Express",
|
|
23
|
+
"onAutoForward": "openBrowser"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"remoteEnv": {
|
|
27
|
+
"MONGODB_HOST": "mongodb",
|
|
28
|
+
"MONGODB_PORT": "27017",
|
|
29
|
+
"MONGODB_USER": "root",
|
|
30
|
+
"MONGODB_PASSWORD": "example"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
version: '3.8'
|
|
2
|
+
|
|
3
|
+
services:
|
|
4
|
+
mongodb:
|
|
5
|
+
image: mongo:${MONGODB_VERSION:-8}
|
|
6
|
+
restart: unless-stopped
|
|
7
|
+
volumes:
|
|
8
|
+
- mongodb-data:/data/db
|
|
9
|
+
- mongodb-config:/data/configdb
|
|
10
|
+
environment:
|
|
11
|
+
MONGO_INITDB_ROOT_USERNAME: ${MONGODB_USER:-root}
|
|
12
|
+
MONGO_INITDB_ROOT_PASSWORD: ${MONGODB_PASSWORD:-example}
|
|
13
|
+
ports:
|
|
14
|
+
- '${MONGODB_PORT:-27017}:27017'
|
|
15
|
+
networks:
|
|
16
|
+
- devnet
|
|
17
|
+
healthcheck:
|
|
18
|
+
test: ['CMD', 'mongosh', '--eval', "db.adminCommand('ping')"]
|
|
19
|
+
interval: 10s
|
|
20
|
+
timeout: 5s
|
|
21
|
+
retries: 5
|
|
22
|
+
|
|
23
|
+
mongo-express:
|
|
24
|
+
image: mongo-express:${MONGO_EXPRESS_VERSION:-latest}
|
|
25
|
+
restart: unless-stopped
|
|
26
|
+
environment:
|
|
27
|
+
ME_CONFIG_MONGODB_ADMINUSERNAME: ${MONGODB_USER:-root}
|
|
28
|
+
ME_CONFIG_MONGODB_ADMINPASSWORD: ${MONGODB_PASSWORD:-example}
|
|
29
|
+
ME_CONFIG_MONGODB_URL: mongodb://${MONGODB_USER:-root}:${MONGODB_PASSWORD:-example}@mongodb:27017/
|
|
30
|
+
ME_CONFIG_BASICAUTH: false
|
|
31
|
+
ports:
|
|
32
|
+
- '${MONGO_EXPRESS_PORT:-8081}:8081'
|
|
33
|
+
networks:
|
|
34
|
+
- devnet
|
|
35
|
+
depends_on:
|
|
36
|
+
mongodb:
|
|
37
|
+
condition: service_healthy
|
|
38
|
+
|
|
39
|
+
volumes:
|
|
40
|
+
mongodb-data:
|
|
41
|
+
mongodb-config:
|
|
42
|
+
|
|
43
|
+
networks:
|
|
44
|
+
devnet:
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
id: mongodb
|
|
2
|
+
name: MongoDB
|
|
3
|
+
description: MongoDB 8 with Mongo Express web UI
|
|
4
|
+
category: database
|
|
5
|
+
supports:
|
|
6
|
+
- compose
|
|
7
|
+
requires: []
|
|
8
|
+
suggests: []
|
|
9
|
+
conflicts: []
|
|
10
|
+
tags:
|
|
11
|
+
- database
|
|
12
|
+
- nosql
|
|
13
|
+
- mongodb
|
|
14
|
+
- document
|
|
15
|
+
ports:
|
|
16
|
+
- 27017
|
|
17
|
+
- 8081
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Verification script for MongoDB overlay
|
|
3
|
+
# Confirms MongoDB client and services are accessible
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
echo "🔍 Verifying MongoDB overlay..."
|
|
8
|
+
echo ""
|
|
9
|
+
|
|
10
|
+
# Check mongosh is installed
|
|
11
|
+
echo "1️⃣ Checking mongosh client..."
|
|
12
|
+
if command -v mongosh &> /dev/null; then
|
|
13
|
+
mongosh --version
|
|
14
|
+
echo " ✅ mongosh client found"
|
|
15
|
+
else
|
|
16
|
+
echo " ❌ mongosh client not found"
|
|
17
|
+
exit 1
|
|
18
|
+
fi
|
|
19
|
+
|
|
20
|
+
# Check if MongoDB service is running
|
|
21
|
+
echo ""
|
|
22
|
+
echo "2️⃣ Checking MongoDB service..."
|
|
23
|
+
MONGODB_READY=false
|
|
24
|
+
for i in {1..15}; do
|
|
25
|
+
if mongosh --host mongodb --port 27017 -u root -p example --eval "db.adminCommand('ping')" &> /dev/null; then
|
|
26
|
+
echo " ✅ MongoDB service is ready"
|
|
27
|
+
MONGODB_READY=true
|
|
28
|
+
break
|
|
29
|
+
fi
|
|
30
|
+
sleep 1
|
|
31
|
+
done
|
|
32
|
+
|
|
33
|
+
if [ "$MONGODB_READY" = false ]; then
|
|
34
|
+
echo " ❌ MongoDB service not ready after 15 seconds"
|
|
35
|
+
exit 1
|
|
36
|
+
fi
|
|
37
|
+
|
|
38
|
+
# Check Mongo Express
|
|
39
|
+
echo ""
|
|
40
|
+
echo "3️⃣ Checking Mongo Express web UI..."
|
|
41
|
+
if curl -s -o /dev/null -w "%{http_code}" http://mongo-express:8081 | grep -q "200"; then
|
|
42
|
+
echo " ✅ Mongo Express is accessible"
|
|
43
|
+
else
|
|
44
|
+
echo " ⚠️ Mongo Express may still be starting up"
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
echo ""
|
|
48
|
+
echo "✅ MongoDB overlay verification complete"
|