Multi-language dev container - Python 3.10-3.12, Go 1.23, Node.js 22, .NET 9.0, Claude Code
2.7K
Production-ready multi-language development container for VS Code Remote Containers.
Optimized for teams building microservices, data pipelines, and cloud-native applications targeting Azure, Databricks, and containerized environments.
docker pull alexeye/devtools-polyglot:latest
| Challenge | Solution |
|---|---|
| "Works on my machine" | Identical environment for entire team |
| Slow onboarding | New developer productive in minutes |
| Tool version conflicts | Isolated, reproducible toolchain |
| Lost config on rebuild | Named volumes persist everything |
| Credential management | VS Code handles git/SSH automatically |
| Runtime | Version | Manager | Use Case |
|---|---|---|---|
| Python | 3.10, 3.11, 3.12 | uv | Data engineering, ML, APIs |
| Go | 1.23 | go modules | Microservices, CLIs |
| Node.js | 22 LTS | npm | Frontend, tooling |
| .NET | 9.0 | dotnet | Enterprise APIs |
| Tool | Description | Documentation |
|---|---|---|
| uv | Fast Python package manager (10-100x faster than pip) | Docs |
| ruff | Fast Python linter and formatter | Docs |
| mypy | Static type checker | Docs |
| pytest | Testing framework | Docs |
| ipython | Enhanced interactive shell | Docs |
| jupyter | Notebook support | Docs |
| databricks-connect | Connect to Databricks clusters | Docs |
| Tool | Description | Documentation |
|---|---|---|
| gopls | Go language server | Docs |
| dlv | Delve debugger | Docs |
| golangci-lint | Meta-linter | Docs |
| pgmi | PostgreSQL deployment tool | GitHub |
| Tool | Description |
|---|---|
| typescript | TypeScript compiler |
| ts-node | TypeScript execution |
| eslint | JavaScript linter |
| prettier | Code formatter |
| Tool | Version | Description |
|---|---|---|
| psql | 17 | PostgreSQL client |
| databricks | latest | Databricks CLI |
Create .devcontainer/devcontainer.json in your project:
{
"name": "My Project",
"image": "alexeye/devtools-polyglot:latest"
}
Open in VS Code → "Reopen in Container" → Done.
{
"name": "My Project",
"image": "alexeye/devtools-polyglot:latest",
"mounts": [
"source=polyglot-shell-history,target=/home/vscode/.shell_history,type=volume",
"source=polyglot-databricks-config,target=/home/vscode/.config/databricks,type=volume",
"source=polyglot-azure-config,target=/home/vscode/.azure,type=volume",
"source=polyglot-go-cache,target=/home/vscode/go/pkg,type=volume",
"source=polyglot-npm-cache,target=/home/vscode/.npm,type=volume",
"source=polyglot-uv-cache,target=/home/vscode/.cache/uv,type=volume"
],
"containerEnv": {
"DATABRICKS_CONFIG_FILE": "/home/vscode/.config/databricks/databrickscfg"
},
"postStartCommand": "uv sync 2>/dev/null || true",
"remoteUser": "vscode"
}
The bundled devcontainer.json includes:
| Category | Extensions |
|---|---|
| AI | Claude Code, GitHub Copilot, Copilot Chat |
| Python | Python, Pylance, Ruff |
| Go | Go |
| TypeScript | ESLint, Prettier |
| .NET | C#, C# Dev Kit |
| Azure | Docker, Azure Functions, Azure Account |
| Databricks | Databricks |
| Database | SQLTools, PostgreSQL Driver |
| Productivity | GitLens, Error Lens, Todo Tree, Code Spell Checker |
| Data | Volume | Persists? |
|---|---|---|
| Databricks config | polyglot-databricks-config | ✅ Yes |
| Azure CLI login | polyglot-azure-config | ✅ Yes |
| Shell history | polyglot-shell-history | ✅ Yes |
| Go modules | polyglot-go-cache | ✅ Yes |
| npm packages | polyglot-npm-cache | ✅ Yes |
| Python packages | polyglot-uv-cache | ✅ Yes |
| Feature | How It Works |
|---|---|
| Git credentials | Automatically shared from host |
| SSH keys | SSH agent forwarding (no mount needed) |
| VS Code extensions | Managed in .vscode-server |
| VS Code settings | Synced via Settings Sync |
databricks configure
# Enter workspace URL and token
# Saved to ~/.config/databricks/databrickscfg (persisted volume)
from databricks.connect import DatabricksSession
spark = DatabricksSession.builder.getOrCreate()
df = spark.sql("SELECT * FROM my_catalog.my_schema.my_table")
df.show()
{
"containerEnv": {
"DATABRICKS_HOST": "${localEnv:DATABRICKS_HOST}",
"DATABRICKS_TOKEN": "${localEnv:DATABRICKS_TOKEN}"
}
}
pgmi is a PostgreSQL-native deployment tool that lets you write deployment logic entirely in SQL.
# Initialize a new project with scaffolding
pgmi init myapp --template basic
# Deploy to database (reads pgmi.yaml for config)
pgmi deploy .
# Deploy with explicit connection
pgmi deploy . --connection "postgresql://user:pass@localhost/mydb"
# Deploy to specific database
pgmi deploy . --database staging_db
# Override parameters
pgmi deploy . --param env=production
Project structure uses deploy.sql for SQL logic and optional pgmi.yaml for configuration.
psql -h localhost -U postgres -d mydb
# Create new project
uv init my-project && cd my-project
# Add dependencies
uv add fastapi uvicorn sqlalchemy
# Add dev dependencies
uv add --dev pytest ruff mypy
# Run application
uv run python -m uvicorn main:app --reload
# Run tests
uv run pytest
# List available versions
uv python list
# Pin project to specific version
uv python pin 3.10
# Create venv with specific version
uv venv --python 3.11
| Port | Default Service |
|---|---|
| 5432 | PostgreSQL |
| 3000 | Node.js / Vite |
| 8000 | Python / FastAPI |
| 8080 | Go / General |
| Property | Value |
|---|---|
| Base Image | mcr.microsoft.com/devcontainers/base:1-bookworm |
| Architecture | linux/amd64, linux/arm64 |
| Size | ~3.3 GB (compressed) |
| User | vscode (non-root) |
| Weekly Updates | Sundays 5:00 UTC |
Ensure volume mount is configured:
"mounts": [
"source=polyglot-databricks-config,target=/home/vscode/.config/databricks,type=volume"
],
"containerEnv": {
"DATABRICKS_CONFIG_FILE": "/home/vscode/.config/databricks/databrickscfg"
}
VS Code handles this automatically. If issues persist:
# Check credential helper on host
git config --global credential.helper
# For SSH, verify agent is running
ssh-add -l
First pull downloads ~3GB. Subsequent starts are fast due to Docker layer caching.
git clone https://github.com/alexeye/custom-docker.git
cd custom-docker
# Build
make polyglot
# Test
make polyglot-test
# Interactive shell
make shell IMAGE=devtools/polyglot
Apache-2.0
Content type
Image
Digest
sha256:0f36b6b64…
Size
1.1 GB
Last updated
8 months ago
docker pull alexeye/devtools-polyglot