Dev Containers ve VS Code: stejné vývojové prostředí pro celý tým
Nastavení Dev Containers – devcontainer.json, features, postCreateCommand, Docker Compose s databází a GitHub Codespaces. Nový kolega vyvíjí za pár minut.
„Nainstaluj si Python 3.12, PostgreSQL 16, Node 20, tyhle tři systémové knihovny a pak to snad poběží.“ Dev Containers tenhle rituál nahrazují jedním souborem v repozitáři. VS Code otevře projekt uvnitř Docker kontejneru, kde je vše připravené – pro každého člena týmu stejně.
Co potřebujete
- Docker (Docker Desktop na Windows/macOS, Docker Engine na Linuxu),
- VS Code s rozšířením Dev Containers (
ms-vscode-remote.remote-containers).
Na Windows doporučujeme mít repozitář naklonovaný uvnitř WSL 2 – souborové operace jsou pak výrazně rychlejší než přes C:\.
Nejjednodušší konfigurace
V kořeni projektu vytvořte .devcontainer/devcontainer.json:
{
"name": "Python projekt",
"image": "mcr.microsoft.com/devcontainers/python:3.12",
"features": {
"ghcr.io/devcontainers/features/node:1": { "version": "20" }
},
"postCreateCommand": "pip install -r requirements.txt",
"forwardPorts": [8000],
"customizations": {
"vscode": {
"extensions": [
"ms-python.python",
"charliermarsh.ruff"
],
"settings": {
"python.defaultInterpreterPath": "/usr/local/bin/python"
}
}
}
}
Pak F1 → Dev Containers: Reopen in Container. První spuštění stáhne image a nainstaluje závislosti, další starty jsou rychlé.
Co jednotlivé klíče dělají
| Klíč | Význam |
|---|---|
image |
základní image; Microsoft udržuje sadu mcr.microsoft.com/devcontainers/* (python, javascript-node, go, php…) |
features |
hotové doplňky instalované do kontejneru – Node, Docker CLI, GitHub CLI, AWS CLI… |
postCreateCommand |
příkaz po vytvoření kontejneru (instalace závislostí) |
postStartCommand |
příkaz při každém startu |
forwardPorts |
porty přesměrované na váš počítač |
customizations.vscode.extensions |
rozšíření nainstalovaná v kontejneru |
remoteUser |
uživatel, pod kterým pracujete (devcontainer image mají vscode) |
Seznam dostupných features najdete na containers.dev.
Vlastní Dockerfile
Potřebujete systémové balíčky? Místo image odkažte na Dockerfile:
{
"name": "App",
"build": { "dockerfile": "Dockerfile" },
"postCreateCommand": "pip install -r requirements.txt"
}
.devcontainer/Dockerfile:
FROM mcr.microsoft.com/devcontainers/python:3.12
RUN apt-get update && apt-get install -y --no-install-recommends \
libpq-dev gettext \
&& rm -rf /var/lib/apt/lists/*
Aplikace + databáze přes Docker Compose
Realistický projekt potřebuje databázi. Dev Containers umí použít Compose – VS Code se připojí do jedné ze služeb.
.devcontainer/compose.yaml:
services:
app:
build:
context: .
dockerfile: Dockerfile
volumes:
- ..:/workspaces/app:cached
command: sleep infinity
environment:
DATABASE_URL: postgres://app:app@db:5432/app
db:
image: postgres:16
restart: unless-stopped
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: app
POSTGRES_DB: app
volumes:
- devdb:/var/lib/postgresql/data
volumes:
devdb:
.devcontainer/devcontainer.json:
{
"name": "App + Postgres",
"dockerComposeFile": "compose.yaml",
"service": "app",
"workspaceFolder": "/workspaces/app",
"forwardPorts": [8000, 5432],
"postCreateCommand": "pip install -r requirements.txt && python manage.py migrate"
}
command: sleep infinity udrží kontejner app naživu – aplikaci spouštíte sami v terminálu VS Code. Databáze je dostupná pod jménem db, stejně jako v produkčním Compose. Heslo app je zde v pořádku, protože jde jen o lokální vývoj.
Užitečné příkazy (F1)
- Dev Containers: Rebuild Container – po změně
devcontainer.jsonnebo Dockerfile. - Dev Containers: Rebuild Without Cache – když se něco zasekne.
- Dev Containers: Clone Repository in Container Volume – kód je přímo v Docker volume; na Windows a macOS nejrychlejší varianta.
- Dev Containers: Reopen Folder Locally – návrat mimo kontejner.
Git a SSH klíče
Rozšíření automaticky přenese do kontejneru vaši Git identitu (user.name, user.email z lokálního .gitconfig) a přepošle SSH agenta, takže git push funguje bez kopírování klíčů. Podmínkou je běžící lokální ssh-agent s načteným klíčem (ssh-add).
Dev CLI bez VS Code
Stejnou konfiguraci lze použít v terminálu nebo v CI pomocí @devcontainers/cli:
npm install -g @devcontainers/cli
devcontainer up --workspace-folder .
devcontainer exec --workspace-folder . pytest
GitHub Codespaces
Tentýž devcontainer.json použije i GitHub Codespaces: na stránce repozitáře Code → Codespaces → Create codespace a za chvíli máte vývojové prostředí v cloudu v prohlížeči nebo ve VS Code. Hodí se pro rychlé review PR nebo slabší počítač. Codespaces jsou nad rámec bezplatné kvóty placené, podmínky ověřte na GitHubu.
Na co pozor
- Výkon na macOS/Windows: bind mount velkých složek (
node_modules) je pomalý. Dejte je do pojmenovaného volume nebo použijte Clone in Container Volume. - Velikost: devcontainer image bývají větší než produkční – jsou to nástroje pro vývoj, ne pro nasazení. Produkční image stavějte zvlášť (multi-stage build).
- Tajné údaje do
devcontainer.jsonnepište; použijte lokální.env, který je v.gitignore.
Kdy se Dev Containers vyplatí
- tým o více lidech nebo časté zapojování nových přispěvatelů,
- projekt se specifickými systémovými závislostmi,
- přepínání mezi projekty s různými verzemi jazyků,
- open source, kde chcete snížit bariéru pro první příspěvek.
Pro jednoduchý skript, na kterém pracujete sami, je to zbytečná vrstva – stačí virtuální prostředí.