Sign inSign up

alexeye/devtools-polyglot

By alexeye

•Updated 8 months ago

Multi-language dev container - Python 3.10-3.12, Go 1.23, Node.js 22, .NET 9.0, Claude Code

Image
0

2.7K

alexeye/devtools-polyglot repository overview

⁠Polyglot Dev Container

Docker Pulls Docker Image Size GitHub Actions

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

⁠Why This Image?

ChallengeSolution
"Works on my machine"Identical environment for entire team
Slow onboardingNew developer productive in minutes
Tool version conflictsIsolated, reproducible toolchain
Lost config on rebuildNamed volumes persist everything
Credential managementVS Code handles git/SSH automatically

⁠Included Runtimes

RuntimeVersionManagerUse Case
Python3.10, 3.11, 3.12uv⁠Data engineering, ML, APIs
Go1.23go modulesMicroservices, CLIs
Node.js22 LTSnpmFrontend, tooling
.NET9.0dotnetEnterprise APIs

⁠Pre-installed Tools

⁠Python Ecosystem
ToolDescriptionDocumentation
uv⁠Fast Python package manager (10-100x faster than pip)Docs⁠
ruff⁠Fast Python linter and formatterDocs⁠
mypy⁠Static type checkerDocs⁠
pytest⁠Testing frameworkDocs⁠
ipython⁠Enhanced interactive shellDocs⁠
jupyter⁠Notebook supportDocs⁠
databricks-connect⁠Connect to Databricks clustersDocs⁠
⁠Go Ecosystem
ToolDescriptionDocumentation
gopls⁠Go language serverDocs⁠
dlv⁠Delve debuggerDocs⁠
golangci-lint⁠Meta-linterDocs⁠
pgmi⁠PostgreSQL deployment toolGitHub⁠
⁠Node.js Ecosystem
ToolDescription
typescript⁠TypeScript compiler
ts-node⁠TypeScript execution
eslint⁠JavaScript linter
prettier⁠Code formatter
⁠Database & Cloud
ToolVersionDescription
psql⁠17PostgreSQL client
databricks⁠latestDatabricks CLI

⁠Quick Start

⁠Option 1: Minimal Setup

Create .devcontainer/devcontainer.json in your project:

{
  "name": "My Project",
  "image": "alexeye/devtools-polyglot:latest"
}

Open in VS Code → "Reopen in Container" → Done.

⁠Option 2: Full Setup with Persistence
{
  "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"
}

⁠VS Code Extensions (21 Pre-configured)

The bundled devcontainer.json includes:

CategoryExtensions
AIClaude Code, GitHub Copilot, Copilot Chat
PythonPython, Pylance, Ruff
GoGo
TypeScriptESLint, Prettier
.NETC#, C# Dev Kit
AzureDocker, Azure Functions, Azure Account
DatabricksDatabricks
DatabaseSQLTools, PostgreSQL Driver
ProductivityGitLens, Error Lens, Todo Tree, Code Spell Checker

⁠Persistence (Zero-Friction Experience)

⁠What Survives Container Rebuilds
DataVolumePersists?
Databricks configpolyglot-databricks-config✅ Yes
Azure CLI loginpolyglot-azure-config✅ Yes
Shell historypolyglot-shell-history✅ Yes
Go modulespolyglot-go-cache✅ Yes
npm packagespolyglot-npm-cache✅ Yes
Python packagespolyglot-uv-cache✅ Yes
⁠What VS Code Handles Automatically
FeatureHow It Works
Git credentialsAutomatically shared⁠ from host
SSH keysSSH agent forwarding (no mount needed)
VS Code extensionsManaged in .vscode-server
VS Code settingsSynced via Settings Sync

⁠Working with Databricks

⁠First-Time Setup (Persists Forever)
databricks configure
# Enter workspace URL and token
# Saved to ~/.config/databricks/databrickscfg (persisted volume)
⁠Using Databricks Connect
from databricks.connect import DatabricksSession

spark = DatabricksSession.builder.getOrCreate()
df = spark.sql("SELECT * FROM my_catalog.my_schema.my_table")
df.show()
⁠CI/CD Setup (Environment Variables)
{
  "containerEnv": {
    "DATABRICKS_HOST": "${localEnv:DATABRICKS_HOST}",
    "DATABRICKS_TOKEN": "${localEnv:DATABRICKS_TOKEN}"
  }
}

⁠Working with PostgreSQL

⁠Using pgmi for Database Deployments

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.

⁠Using psql Client
psql -h localhost -U postgres -d mydb

⁠Working with Python

# 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
⁠Multiple Python Versions
# 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 Forwarding

PortDefault Service
5432PostgreSQL
3000Node.js / Vite
8000Python / FastAPI
8080Go / General

⁠Image Details

PropertyValue
Base Imagemcr.microsoft.com/devcontainers/base:1-bookworm
Architecturelinux/amd64, linux/arm64
Size~3.3 GB (compressed)
Uservscode (non-root)
Weekly UpdatesSundays 5:00 UTC

⁠Troubleshooting

⁠Databricks Config Lost After Rebuild

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"
}
⁠Git Credentials Not Working

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
⁠Slow First Start

First pull downloads ~3GB. Subsequent starts are fast due to Docker layer caching.


⁠Building From Source

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

⁠License

Apache-2.0


⁠Tool References

Tag summary

Content type

Image

Digest

sha256:0f36b6b64…

Size

1.1 GB

Last updated

8 months ago

docker pull alexeye/devtools-polyglot