container-superposition 0.1.1 â 0.1.4
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 +569 -8
- package/dist/scripts/init.js +436 -254
- package/dist/scripts/init.js.map +1 -1
- package/dist/tool/commands/doctor.d.ts +15 -0
- package/dist/tool/commands/doctor.d.ts.map +1 -0
- package/dist/tool/commands/doctor.js +862 -0
- package/dist/tool/commands/doctor.js.map +1 -0
- package/dist/tool/commands/explain.d.ts +13 -0
- package/dist/tool/commands/explain.d.ts.map +1 -0
- package/dist/tool/commands/explain.js +299 -0
- package/dist/tool/commands/explain.js.map +1 -0
- package/dist/tool/commands/list.d.ts +16 -0
- package/dist/tool/commands/list.d.ts.map +1 -0
- package/dist/tool/commands/list.js +121 -0
- package/dist/tool/commands/list.js.map +1 -0
- package/dist/tool/commands/plan.d.ts +67 -0
- package/dist/tool/commands/plan.d.ts.map +1 -0
- package/dist/tool/commands/plan.js +851 -0
- package/dist/tool/commands/plan.js.map +1 -0
- package/dist/tool/questionnaire/composer.d.ts +16 -2
- package/dist/tool/questionnaire/composer.d.ts.map +1 -1
- package/dist/tool/questionnaire/composer.js +411 -200
- package/dist/tool/questionnaire/composer.js.map +1 -1
- package/dist/tool/readme/markdown-parser.d.ts.map +1 -1
- package/dist/tool/readme/markdown-parser.js.map +1 -1
- package/dist/tool/readme/readme-generator.d.ts.map +1 -1
- package/dist/tool/readme/readme-generator.js +11 -6
- package/dist/tool/readme/readme-generator.js.map +1 -1
- package/dist/tool/schema/deployment-targets.d.ts +77 -0
- package/dist/tool/schema/deployment-targets.d.ts.map +1 -0
- package/dist/tool/schema/deployment-targets.js +91 -0
- package/dist/tool/schema/deployment-targets.js.map +1 -0
- package/dist/tool/schema/manifest-migrations.d.ts +51 -0
- package/dist/tool/schema/manifest-migrations.d.ts.map +1 -0
- package/dist/tool/schema/manifest-migrations.js +159 -0
- package/dist/tool/schema/manifest-migrations.js.map +1 -0
- package/dist/tool/schema/overlay-loader.d.ts +1 -1
- package/dist/tool/schema/overlay-loader.d.ts.map +1 -1
- package/dist/tool/schema/overlay-loader.js +42 -14
- package/dist/tool/schema/overlay-loader.js.map +1 -1
- package/dist/tool/schema/types.d.ts +62 -2
- package/dist/tool/schema/types.d.ts.map +1 -1
- package/dist/tool/utils/gitignore.d.ts +15 -0
- package/dist/tool/utils/gitignore.d.ts.map +1 -0
- package/dist/tool/utils/gitignore.js +41 -0
- package/dist/tool/utils/gitignore.js.map +1 -0
- package/dist/tool/utils/merge.d.ts +134 -0
- package/dist/tool/utils/merge.d.ts.map +1 -0
- package/dist/tool/utils/merge.js +277 -0
- package/dist/tool/utils/merge.js.map +1 -0
- package/dist/tool/utils/port-utils.d.ts +29 -0
- package/dist/tool/utils/port-utils.d.ts.map +1 -0
- package/dist/tool/utils/port-utils.js +128 -0
- package/dist/tool/utils/port-utils.js.map +1 -0
- package/dist/tool/utils/services-export.d.ts +14 -0
- package/dist/tool/utils/services-export.d.ts.map +1 -0
- package/dist/tool/utils/services-export.js +478 -0
- package/dist/tool/utils/services-export.js.map +1 -0
- package/dist/tool/utils/summary.d.ts +69 -0
- package/dist/tool/utils/summary.d.ts.map +1 -0
- package/dist/tool/utils/summary.js +260 -0
- package/dist/tool/utils/summary.js.map +1 -0
- package/dist/tool/utils/version.d.ts +9 -0
- package/dist/tool/utils/version.d.ts.map +1 -0
- package/dist/tool/utils/version.js +32 -0
- package/dist/tool/utils/version.js.map +1 -0
- package/docs/architecture.md +25 -21
- package/docs/deployment-targets.md +150 -0
- package/docs/discovery-commands.md +442 -0
- package/docs/merge-strategy.md +700 -0
- package/docs/minimal-and-editor.md +265 -0
- package/docs/overlay-imports.md +209 -0
- package/docs/overlay-manifest-refactoring.md +2 -2
- package/docs/overlay-metadata-archive.md +1 -1
- package/docs/overlays.md +139 -28
- package/docs/presets-architecture.md +3 -3
- package/docs/presets.md +1 -1
- package/docs/publishing.md +36 -35
- package/docs/team-workflow.md +540 -0
- package/overlays/.presets/data-engineering.yml +392 -0
- package/overlays/.presets/event-sourced-service.yml +262 -0
- package/overlays/.presets/frontend.yml +287 -0
- package/overlays/.presets/k8s-operator-dev.yml +462 -0
- package/overlays/{presets â .presets}/microservice.yml +32 -6
- package/overlays/.presets/web-api.yml +129 -0
- package/overlays/.registry/README.md +1 -1
- package/overlays/.registry/deployment-targets.yml +54 -0
- package/overlays/.shared/README.md +43 -0
- package/overlays/.shared/compose/common-healthchecks.yml +38 -0
- package/overlays/.shared/otel/instrumentation.env +20 -0
- package/overlays/.shared/otel/otel-base-config.yaml +30 -0
- package/overlays/.shared/vscode/recommended-extensions.json +14 -0
- package/overlays/README.md +1 -1
- package/overlays/cloudflared/README.md +190 -0
- package/overlays/cloudflared/devcontainer.patch.json +3 -0
- package/overlays/cloudflared/overlay.yml +15 -0
- package/overlays/cloudflared/setup.sh +49 -0
- package/overlays/cloudflared/verify.sh +21 -0
- package/overlays/codex/overlay.yml +1 -0
- package/overlays/direnv/README.md +6 -4
- package/overlays/direnv/setup.sh +0 -12
- package/overlays/duckdb/README.md +274 -0
- package/overlays/duckdb/devcontainer.patch.json +10 -0
- package/overlays/duckdb/overlay.yml +17 -0
- package/overlays/duckdb/setup.sh +45 -0
- package/overlays/duckdb/verify.sh +32 -0
- package/overlays/git-helpers/overlay.yml +1 -0
- package/overlays/grafana/README.md +5 -5
- package/overlays/grafana/dashboard-provider.yml +1 -1
- package/overlays/grafana/docker-compose.yml +2 -2
- package/overlays/grafana/overlay.yml +6 -1
- package/overlays/grpc-tools/README.md +242 -0
- package/overlays/grpc-tools/devcontainer.patch.json +14 -0
- package/overlays/grpc-tools/overlay.yml +14 -0
- package/overlays/grpc-tools/setup.sh +57 -0
- package/overlays/grpc-tools/verify.sh +47 -0
- package/overlays/jaeger/overlay.yml +16 -3
- package/overlays/jupyter/.env.example +6 -0
- package/overlays/jupyter/README.md +210 -0
- package/overlays/jupyter/devcontainer.patch.json +14 -0
- package/overlays/jupyter/docker-compose.yml +23 -0
- package/overlays/jupyter/overlay.yml +18 -0
- package/overlays/jupyter/verify.sh +35 -0
- package/overlays/keycloak/.env.example +5 -0
- package/overlays/keycloak/README.md +238 -0
- package/overlays/keycloak/devcontainer.patch.json +17 -0
- package/overlays/keycloak/docker-compose.yml +32 -0
- package/overlays/keycloak/overlay.yml +23 -0
- package/overlays/keycloak/verify.sh +54 -0
- package/overlays/kind/README.md +221 -0
- package/overlays/kind/devcontainer.patch.json +10 -0
- package/overlays/kind/overlay.yml +18 -0
- package/overlays/kind/setup.sh +43 -0
- package/overlays/kind/verify.sh +40 -0
- package/overlays/localstack/.env.example +6 -0
- package/overlays/localstack/README.md +188 -0
- package/overlays/localstack/devcontainer.patch.json +21 -0
- package/overlays/localstack/docker-compose.yml +25 -0
- package/overlays/localstack/overlay.yml +18 -0
- package/overlays/localstack/verify.sh +47 -0
- package/overlays/loki/overlay.yml +6 -1
- package/overlays/mailpit/.env.example +4 -0
- package/overlays/mailpit/README.md +191 -0
- package/overlays/mailpit/devcontainer.patch.json +20 -0
- package/overlays/mailpit/docker-compose.yml +17 -0
- package/overlays/mailpit/overlay.yml +26 -0
- package/overlays/mailpit/verify.sh +52 -0
- package/overlays/modern-cli-tools/overlay.yml +1 -0
- package/overlays/mongodb/overlay.yml +12 -2
- package/overlays/mysql/overlay.yml +12 -2
- package/overlays/nats/overlay.yml +12 -2
- package/overlays/ngrok/overlay.yml +2 -1
- package/overlays/openapi-tools/README.md +243 -0
- package/overlays/openapi-tools/devcontainer.patch.json +10 -0
- package/overlays/openapi-tools/overlay.yml +16 -0
- package/overlays/openapi-tools/setup.sh +45 -0
- package/overlays/openapi-tools/verify.sh +51 -0
- package/overlays/otel-collector/overlay.yml.example +26 -0
- package/overlays/postgres/overlay.yml +6 -1
- package/overlays/prometheus/overlay.yml +6 -1
- package/overlays/python/README.md +51 -35
- package/overlays/python/devcontainer.patch.json +7 -4
- package/overlays/python/setup.sh +50 -23
- package/overlays/python/verify.sh +29 -1
- package/overlays/rabbitmq/overlay.yml +12 -2
- package/overlays/redis/overlay.yml +6 -1
- package/overlays/tilt/README.md +259 -0
- package/overlays/tilt/devcontainer.patch.json +17 -0
- package/overlays/tilt/overlay.yml +19 -0
- package/overlays/tilt/setup.sh +25 -0
- package/overlays/tilt/verify.sh +24 -0
- package/package.json +8 -6
- package/tool/README.md +12 -16
- package/tool/schema/overlay-manifest.schema.json +64 -4
- package/tool/schema/superposition-manifest.schema.json +104 -0
- package/overlays/presets/web-api.yml +0 -109
- /package/overlays/{presets â .presets}/docs-site.yml +0 -0
- /package/overlays/{presets â .presets}/fullstack.yml +0 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
|
|
3
|
+
"features": {
|
|
4
|
+
"./features/cross-distro-packages": {
|
|
5
|
+
"apt": "protobuf-compiler",
|
|
6
|
+
"apk": "protobuf"
|
|
7
|
+
}
|
|
8
|
+
},
|
|
9
|
+
"customizations": {
|
|
10
|
+
"vscode": {
|
|
11
|
+
"extensions": ["zxh404.vscode-proto3", "bufbuild.vscode-buf"]
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
id: grpc-tools
|
|
2
|
+
name: gRPC Tools
|
|
3
|
+
description: Protocol Buffers compiler, Buf, and grpcurl for gRPC development
|
|
4
|
+
category: dev
|
|
5
|
+
supports: []
|
|
6
|
+
requires: []
|
|
7
|
+
suggests: []
|
|
8
|
+
conflicts: []
|
|
9
|
+
tags:
|
|
10
|
+
- dev
|
|
11
|
+
- grpc
|
|
12
|
+
- protobuf
|
|
13
|
+
- api
|
|
14
|
+
ports: []
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# gRPC Tools setup script
|
|
3
|
+
# Installs buf CLI and grpcurl
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
echo "đ§ Setting up gRPC Tools..."
|
|
8
|
+
|
|
9
|
+
# Install buf CLI
|
|
10
|
+
echo "đĻ Installing buf CLI..."
|
|
11
|
+
BUF_VERSION="${BUF_VERSION:-1.47.2}"
|
|
12
|
+
|
|
13
|
+
# Detect architecture
|
|
14
|
+
ARCH=$(uname -m)
|
|
15
|
+
case "$ARCH" in
|
|
16
|
+
x86_64) BUF_ARCH="x86_64" ;;
|
|
17
|
+
aarch64 | arm64) BUF_ARCH="aarch64" ;;
|
|
18
|
+
*) echo " â ī¸ Unsupported architecture: $ARCH, skipping buf installation" ; BUF_ARCH="" ;;
|
|
19
|
+
esac
|
|
20
|
+
|
|
21
|
+
if [ -n "$BUF_ARCH" ]; then
|
|
22
|
+
BUF_URL="https://github.com/bufbuild/buf/releases/download/v${BUF_VERSION}/buf-Linux-${BUF_ARCH}"
|
|
23
|
+
curl -sSL "$BUF_URL" -o /tmp/buf
|
|
24
|
+
sudo install -m 755 /tmp/buf /usr/local/bin/buf
|
|
25
|
+
rm -f /tmp/buf
|
|
26
|
+
echo " â
buf installed: $(buf --version)"
|
|
27
|
+
fi
|
|
28
|
+
|
|
29
|
+
# Install grpcurl
|
|
30
|
+
echo "đĻ Installing grpcurl..."
|
|
31
|
+
GRPCURL_VERSION="${GRPCURL_VERSION:-1.9.2}"
|
|
32
|
+
|
|
33
|
+
GRPCURL_ARCH="$(uname -m)"
|
|
34
|
+
case "$GRPCURL_ARCH" in
|
|
35
|
+
x86_64) GRPCURL_ARCH="x86_64" ;;
|
|
36
|
+
aarch64 | arm64) GRPCURL_ARCH="arm64" ;;
|
|
37
|
+
*) echo " â ī¸ Unsupported architecture: $GRPCURL_ARCH, skipping grpcurl installation" ; GRPCURL_ARCH="" ;;
|
|
38
|
+
esac
|
|
39
|
+
|
|
40
|
+
if [ -n "$GRPCURL_ARCH" ]; then
|
|
41
|
+
GRPCURL_URL="https://github.com/fullstorydev/grpcurl/releases/download/v${GRPCURL_VERSION}/grpcurl_${GRPCURL_VERSION}_linux_${GRPCURL_ARCH}.tar.gz"
|
|
42
|
+
curl -sSL "$GRPCURL_URL" | sudo tar -xz -C /usr/local/bin grpcurl
|
|
43
|
+
echo " â
grpcurl installed: $(grpcurl --version 2>&1 | head -1)"
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
echo ""
|
|
47
|
+
echo "â
gRPC Tools setup complete"
|
|
48
|
+
echo ""
|
|
49
|
+
echo "đĄ Quick start:"
|
|
50
|
+
echo " protoc --version # Protocol Buffers compiler"
|
|
51
|
+
echo " buf --version # Buf CLI (schema management)"
|
|
52
|
+
echo " grpcurl --version # gRPC curl"
|
|
53
|
+
echo ""
|
|
54
|
+
echo "đ Resources:"
|
|
55
|
+
echo " https://protobuf.dev/ # Protocol Buffers documentation"
|
|
56
|
+
echo " https://buf.build/docs/ # Buf CLI documentation"
|
|
57
|
+
echo " https://github.com/fullstorydev/grpcurl # grpcurl documentation"
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Verification script for gRPC Tools overlay
|
|
3
|
+
# Confirms protoc, buf, and grpcurl are installed
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
echo "đ Verifying gRPC Tools overlay..."
|
|
8
|
+
echo ""
|
|
9
|
+
|
|
10
|
+
ALL_CHECKS_PASSED=true
|
|
11
|
+
|
|
12
|
+
# Check protoc
|
|
13
|
+
echo "1ī¸âŖ Checking protoc (Protocol Buffers compiler)..."
|
|
14
|
+
if command -v protoc &> /dev/null; then
|
|
15
|
+
echo " â
protoc found: $(protoc --version)"
|
|
16
|
+
else
|
|
17
|
+
echo " â protoc not found"
|
|
18
|
+
ALL_CHECKS_PASSED=false
|
|
19
|
+
fi
|
|
20
|
+
|
|
21
|
+
# Check buf
|
|
22
|
+
echo ""
|
|
23
|
+
echo "2ī¸âŖ Checking buf CLI..."
|
|
24
|
+
if command -v buf &> /dev/null; then
|
|
25
|
+
echo " â
buf found: $(buf --version)"
|
|
26
|
+
else
|
|
27
|
+
echo " â buf not found"
|
|
28
|
+
ALL_CHECKS_PASSED=false
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
# Check grpcurl
|
|
32
|
+
echo ""
|
|
33
|
+
echo "3ī¸âŖ Checking grpcurl..."
|
|
34
|
+
if command -v grpcurl &> /dev/null; then
|
|
35
|
+
echo " â
grpcurl found: $(grpcurl --version 2>&1 | head -1)"
|
|
36
|
+
else
|
|
37
|
+
echo " â grpcurl not found"
|
|
38
|
+
ALL_CHECKS_PASSED=false
|
|
39
|
+
fi
|
|
40
|
+
|
|
41
|
+
echo ""
|
|
42
|
+
if [ "$ALL_CHECKS_PASSED" = true ]; then
|
|
43
|
+
echo "â
gRPC Tools overlay verification complete"
|
|
44
|
+
else
|
|
45
|
+
echo "â Some gRPC tools are missing"
|
|
46
|
+
exit 1
|
|
47
|
+
fi
|
|
@@ -13,7 +13,20 @@ tags:
|
|
|
13
13
|
- tracing
|
|
14
14
|
- jaeger
|
|
15
15
|
ports:
|
|
16
|
-
- 16686
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
- port: 16686
|
|
17
|
+
service: jaeger
|
|
18
|
+
protocol: http
|
|
19
|
+
description: Jaeger UI
|
|
20
|
+
path: /
|
|
21
|
+
onAutoForward: openBrowser
|
|
22
|
+
- port: 14250
|
|
23
|
+
service: jaeger
|
|
24
|
+
protocol: grpc
|
|
25
|
+
description: Jaeger gRPC receiver
|
|
26
|
+
onAutoForward: ignore
|
|
27
|
+
- port: 14268
|
|
28
|
+
service: jaeger
|
|
29
|
+
protocol: http
|
|
30
|
+
description: Jaeger HTTP receiver
|
|
31
|
+
onAutoForward: ignore
|
|
19
32
|
order: 1
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
# Jupyter Overlay
|
|
2
|
+
|
|
3
|
+
Jupyter notebook server for interactive computing and data science.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Jupyter Notebook/Lab** - Interactive computing environment
|
|
8
|
+
- **Python kernel** - Run Python code interactively
|
|
9
|
+
- **Persistent notebooks** - Work saved across container restarts
|
|
10
|
+
- **Volume mounting** - Access notebooks from host filesystem
|
|
11
|
+
- **No authentication** - Pre-configured for development use
|
|
12
|
+
- **Docker Compose service** - Runs as separate container
|
|
13
|
+
|
|
14
|
+
## How It Works
|
|
15
|
+
|
|
16
|
+
This overlay adds Jupyter as a Docker Compose service running in its own container. Jupyter is accessible from your development container and your browser via port 8888.
|
|
17
|
+
|
|
18
|
+
**Dependencies:**
|
|
19
|
+
|
|
20
|
+
- `python` (required) - Python runtime for notebooks
|
|
21
|
+
|
|
22
|
+
**Architecture:**
|
|
23
|
+
|
|
24
|
+
- Jupyter service runs on port 8888
|
|
25
|
+
- Notebooks stored in Docker volume (`jupyter-data`)
|
|
26
|
+
- Optional local directory mounting for notebooks
|
|
27
|
+
- JupyterLab interface enabled by default
|
|
28
|
+
|
|
29
|
+
## Configuration
|
|
30
|
+
|
|
31
|
+
### Environment Variables
|
|
32
|
+
|
|
33
|
+
The overlay includes a `.env.example` file. Copy it to `.env` and customize:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
cd .devcontainer
|
|
37
|
+
cp .env.example .env
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Default values (.env.example):**
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# Jupyter Configuration
|
|
44
|
+
JUPYTER_VERSION=latest
|
|
45
|
+
JUPYTER_ENABLE_LAB=yes
|
|
46
|
+
JUPYTER_TOKEN=
|
|
47
|
+
JUPYTER_PORT=8888
|
|
48
|
+
JUPYTER_NOTEBOOKS_PATH=./notebooks
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Notebook Directory
|
|
52
|
+
|
|
53
|
+
By default, notebooks can be created in the Jupyter container. To use notebooks from your host:
|
|
54
|
+
|
|
55
|
+
1. Create a `notebooks` directory in your project root
|
|
56
|
+
2. Notebooks in this directory will be available at `/home/jovyan/notebooks` in Jupyter
|
|
57
|
+
|
|
58
|
+
### Authentication
|
|
59
|
+
|
|
60
|
+
By default, authentication is disabled for local development:
|
|
61
|
+
|
|
62
|
+
- No token required
|
|
63
|
+
- No password required
|
|
64
|
+
|
|
65
|
+
For production or shared environments, set `JUPYTER_TOKEN`:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
JUPYTER_TOKEN=your-secure-token
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Port Configuration
|
|
72
|
+
|
|
73
|
+
The default port (8888) can be changed via the `--port-offset` option:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
npm run init -- --port-offset 100 --stack compose --language python,jupyter
|
|
77
|
+
# Jupyter will be on port 8988
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Common Commands
|
|
81
|
+
|
|
82
|
+
### Accessing Jupyter
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
# Open in browser
|
|
86
|
+
http://localhost:8888
|
|
87
|
+
|
|
88
|
+
# Or use container hostname from dev container
|
|
89
|
+
curl http://jupyter:8888
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Notebook Management
|
|
93
|
+
|
|
94
|
+
Jupyter provides a web interface for all notebook operations:
|
|
95
|
+
|
|
96
|
+
- Create new notebooks
|
|
97
|
+
- Upload existing notebooks
|
|
98
|
+
- Download notebooks
|
|
99
|
+
- Organize in folders
|
|
100
|
+
- Run code cells
|
|
101
|
+
- Export to various formats (HTML, PDF, etc.)
|
|
102
|
+
|
|
103
|
+
### Using Python in Notebooks
|
|
104
|
+
|
|
105
|
+
```python
|
|
106
|
+
# Install packages
|
|
107
|
+
!pip install pandas numpy matplotlib seaborn
|
|
108
|
+
|
|
109
|
+
# Import and use
|
|
110
|
+
import pandas as pd
|
|
111
|
+
import numpy as np
|
|
112
|
+
import matplotlib.pyplot as plt
|
|
113
|
+
|
|
114
|
+
# Your analysis code
|
|
115
|
+
df = pd.read_csv('data.csv')
|
|
116
|
+
df.head()
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### JupyterLab Features
|
|
120
|
+
|
|
121
|
+
JupyterLab is enabled by default and provides:
|
|
122
|
+
|
|
123
|
+
- Multiple tabs
|
|
124
|
+
- File browser
|
|
125
|
+
- Terminal
|
|
126
|
+
- Text editor
|
|
127
|
+
- Markdown preview
|
|
128
|
+
- Extension manager
|
|
129
|
+
|
|
130
|
+
## Use Cases
|
|
131
|
+
|
|
132
|
+
- **Data analysis** - Explore and visualize datasets
|
|
133
|
+
- **Machine learning** - Develop and train models
|
|
134
|
+
- **Scientific computing** - Mathematical and statistical analysis
|
|
135
|
+
- **Documentation** - Create executable documentation
|
|
136
|
+
- **Teaching** - Interactive tutorials and examples
|
|
137
|
+
- **Prototyping** - Quick experimentation with code
|
|
138
|
+
|
|
139
|
+
**Integrates well with:**
|
|
140
|
+
|
|
141
|
+
- `python` - Python runtime (required)
|
|
142
|
+
- `postgres` - Database for data analysis
|
|
143
|
+
- `duckdb` - Analytics database
|
|
144
|
+
- `redis` - Caching and data structures
|
|
145
|
+
|
|
146
|
+
## Available Images
|
|
147
|
+
|
|
148
|
+
Jupyter provides different base images:
|
|
149
|
+
|
|
150
|
+
- `jupyter/minimal-notebook` - Minimal Jupyter with Python (default)
|
|
151
|
+
- `jupyter/scipy-notebook` - Scientific Python stack
|
|
152
|
+
- `jupyter/datascience-notebook` - Julia, Python, R
|
|
153
|
+
- `jupyter/tensorflow-notebook` - TensorFlow and Keras
|
|
154
|
+
- `jupyter/pyspark-notebook` - PySpark
|
|
155
|
+
|
|
156
|
+
Change via `JUPYTER_VERSION`:
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
JUPYTER_VERSION=scipy-notebook
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Troubleshooting
|
|
163
|
+
|
|
164
|
+
### Jupyter Not Starting
|
|
165
|
+
|
|
166
|
+
Check service logs:
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
docker-compose logs jupyter
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### Port Already in Use
|
|
173
|
+
|
|
174
|
+
Change the port in `.env`:
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
JUPYTER_PORT=8889
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Or use port offset when generating.
|
|
181
|
+
|
|
182
|
+
### Notebooks Not Persisting
|
|
183
|
+
|
|
184
|
+
Ensure you're saving notebooks to the mounted volume or directory:
|
|
185
|
+
|
|
186
|
+
- `/home/jovyan/work` - Persistent volume
|
|
187
|
+
- `/home/jovyan/notebooks` - Mounted from host
|
|
188
|
+
|
|
189
|
+
### Package Installation
|
|
190
|
+
|
|
191
|
+
Packages installed with `!pip install` are lost on container restart. To persist:
|
|
192
|
+
|
|
193
|
+
1. Create a `requirements.txt` in your notebooks directory
|
|
194
|
+
2. Install in a notebook: `!pip install -r /home/jovyan/notebooks/requirements.txt`
|
|
195
|
+
|
|
196
|
+
Or extend the Jupyter image with a custom Dockerfile.
|
|
197
|
+
|
|
198
|
+
## References
|
|
199
|
+
|
|
200
|
+
- [Jupyter Documentation](https://jupyter.org/documentation)
|
|
201
|
+
- [JupyterLab Documentation](https://jupyterlab.readthedocs.io/)
|
|
202
|
+
- [Jupyter Docker Stacks](https://jupyter-docker-stacks.readthedocs.io/)
|
|
203
|
+
- [Jupyter Notebook Basics](https://jupyter-notebook.readthedocs.io/en/stable/notebook.html)
|
|
204
|
+
|
|
205
|
+
**Related Overlays:**
|
|
206
|
+
|
|
207
|
+
- `python` - Python runtime (required)
|
|
208
|
+
- `postgres` - Database for analysis
|
|
209
|
+
- `duckdb` - Analytics database
|
|
210
|
+
- `redis` - Data structures
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
|
|
3
|
+
"runServices": ["jupyter"],
|
|
4
|
+
"forwardPorts": [8888],
|
|
5
|
+
"portsAttributes": {
|
|
6
|
+
"8888": {
|
|
7
|
+
"label": "Jupyter Notebook",
|
|
8
|
+
"onAutoForward": "openBrowser"
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
"remoteEnv": {
|
|
12
|
+
"JUPYTER_URL": "http://jupyter:8888"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
version: '3.8'
|
|
2
|
+
|
|
3
|
+
services:
|
|
4
|
+
jupyter:
|
|
5
|
+
image: jupyter/minimal-notebook:${JUPYTER_VERSION:-latest}
|
|
6
|
+
restart: unless-stopped
|
|
7
|
+
volumes:
|
|
8
|
+
- jupyter-data:/home/jovyan/work
|
|
9
|
+
- ${JUPYTER_NOTEBOOKS_PATH:-./notebooks}:/home/jovyan/notebooks
|
|
10
|
+
environment:
|
|
11
|
+
JUPYTER_ENABLE_LAB: ${JUPYTER_ENABLE_LAB:-yes}
|
|
12
|
+
JUPYTER_TOKEN: ${JUPYTER_TOKEN:-}
|
|
13
|
+
ports:
|
|
14
|
+
- '${JUPYTER_PORT:-8888}:8888'
|
|
15
|
+
networks:
|
|
16
|
+
- devnet
|
|
17
|
+
command: start-notebook.sh --NotebookApp.token='' --NotebookApp.password=''
|
|
18
|
+
|
|
19
|
+
volumes:
|
|
20
|
+
jupyter-data:
|
|
21
|
+
|
|
22
|
+
networks:
|
|
23
|
+
devnet:
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
id: jupyter
|
|
2
|
+
name: Jupyter
|
|
3
|
+
description: Jupyter notebook server for interactive computing and data science
|
|
4
|
+
category: language
|
|
5
|
+
supports:
|
|
6
|
+
- compose
|
|
7
|
+
requires:
|
|
8
|
+
- python
|
|
9
|
+
suggests: []
|
|
10
|
+
conflicts: []
|
|
11
|
+
tags:
|
|
12
|
+
- language
|
|
13
|
+
- jupyter
|
|
14
|
+
- python
|
|
15
|
+
- notebook
|
|
16
|
+
- data-science
|
|
17
|
+
ports:
|
|
18
|
+
- 8888
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Verification script for Jupyter overlay
|
|
3
|
+
# Confirms Jupyter is running
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
echo "đ Verifying Jupyter overlay..."
|
|
8
|
+
echo ""
|
|
9
|
+
|
|
10
|
+
# Check if Jupyter service is running
|
|
11
|
+
echo "1ī¸âŖ Checking Jupyter service..."
|
|
12
|
+
if command -v curl &> /dev/null; then
|
|
13
|
+
# Wait up to 30 seconds for Jupyter to be ready
|
|
14
|
+
JUPYTER_READY=false
|
|
15
|
+
for i in {1..30}; do
|
|
16
|
+
if curl -s http://jupyter:8888 &> /dev/null; then
|
|
17
|
+
echo " â
Jupyter service is ready"
|
|
18
|
+
JUPYTER_READY=true
|
|
19
|
+
break
|
|
20
|
+
fi
|
|
21
|
+
sleep 1
|
|
22
|
+
done
|
|
23
|
+
|
|
24
|
+
if [ "$JUPYTER_READY" = false ]; then
|
|
25
|
+
echo " â Jupyter service not ready after 30 seconds"
|
|
26
|
+
exit 1
|
|
27
|
+
fi
|
|
28
|
+
else
|
|
29
|
+
echo " â ī¸ curl not found, skipping service check"
|
|
30
|
+
fi
|
|
31
|
+
|
|
32
|
+
echo ""
|
|
33
|
+
echo "â
Jupyter overlay verification complete"
|
|
34
|
+
echo ""
|
|
35
|
+
echo "âšī¸ Access Jupyter at http://localhost:8888"
|