Devcontainers: cómo meter tu entorno de desarrollo en un tupper (y que siga sabiendo bien)
Publicado el 20 de abril de 2026 • 11 minutos • 2312 palabras
Table of contents
- Por qué usar devcontainers (y cuándo igual no compensa)
- VS Code: vivir dentro de un contenedor sin darte (mucha) cuenta
- PyCharm y Rider: subirse al tupper ajeno
- Más cosas que trastear en el
devcontainer.json - Epílogo: los devcontainers y el sueño de “funciona igual en todas partes”
- Glosario rápido
- Fuentes y referencias
“En mi máquina sí funciona.”
Y al portátil nuevo, a producción y a la máquina de tu compañera eso les da exactamente igual. Así empieza el ritual: “¿qué versión de Node tienes?”, “¿tenías esta lib instalada?”, “a mí los tests me pasan”.
Los devcontainers nacen justo para matar ese género de discusiones. El concepto es tan simple que casi ofende: en vez de tener un entorno de desarrollo distinto en cada portátil, te llevas el entorno dentro de un contenedor Docker.
Un fichero devcontainer.json describe todo lo que hace falta: imagen base, versiones de entornos de ejecución, herramientas, extensiones del editor, puertos… y tu IDE (VS Code, PyCharm, Rider, etc.) abre el proyecto dentro de ese contenedor
.
Traducido a lenguaje humano: todo el equipo desarrolla “en la misma máquina”, aunque cada persona use el portátil que le dé la gana. Y cambiar de proyecto no es reconfigurar medio sistema: es abrir otra carpeta y que el IDE te meta en otro contenedor.
Vamos a verlo con calma:
- Por qué te interesa usar devcontainers (y por qué a veces no).
- Cómo instalar y usar devcontainers en VS Code, paso a paso.
- Cómo enganchar PyCharm y Rider a los devcontainers ya existentes.
- Y cómo sobrevivir a la experiencia con algo de humor y sin perder tu alma dev.
Por qué usar devcontainers (y cuándo igual no compensa)
Imagina que en un repositorio, junto al código, tienes una especie de “receta de cocina” llamada .devcontainer/devcontainer.json
. Esa receta dice:
- “Para este proyecto, usa Linux con tal versión de Python/Node/Java/.NET”.
- “Instala también estas herramientas: git, make, docker-cli, lo que sea”.
- “Abre estos puertos, monta este volumen, configura este PATH”.
- “Si vienes con VS Code, instálate estas extensiones”.
El IDE lee eso, levanta un contenedor Docker con esas características y se mete dentro. Resultado:
- Consistencia: tú, tu compañera, el nuevo junior y la máquina del CI estáis desarrollando en el mismo entorno, no en parecidos.
- Aislamiento: si este proyecto necesita Python 3.8 y el otro Python 3.12, no se pelean en tu host; cada uno vive en su contenedor, tan feliz.
- Portabilidad: clonas el repo en otro equipo, abres el IDE, botón de “Reopen in Container” y listo. Cero doc de “pasos de instalación”.
¿Inconvenientes? También tiene:
- Necesitas Docker (o compatible) instalado y razonablemente bien configurado: si tu portátil ya sufre con Docker, un devcontainer no va a mejorar eso por arte de magia.
- El primer arranque puede tardar: construir la imagen, bajar paquetes, etc. Luego va más fluido, pero la primera vez da para un café.
- Es otra capa mental: contenedor + IDE + host. No es complicado, pero si nunca has tocado Docker, mejor leer antes el artículo de instalar Docker sin dolor .
Si te parece un precio razonable, a cambio ganas algo muy valioso: dejar de jugar al Tetris de “versiones en el host” y mover el lío a un sitio declarativo que vive en el repo.
VS Code: vivir dentro de un contenedor sin darte (mucha) cuenta
VS Code es, ahora mismo, el que mejor se lo ha montado con los devcontainers. La extensión “Dev Containers” es oficial, está bien documentada y, sorprendentemente, hace lo que promete.
1. Lo que necesitas antes de tocar nada
- Docker funcionando en tu máquina.
- En Windows: lo más sensato es Docker sobre WSL2, como explico en el artículo de Docker ([LINK A DOCKER] y [LINK A WSL]).
- En macOS: Docker Desktop o Colima (también explicado en la guía de Docker).
- VS Code instalado.
- Extensión “Dev Containers” (búsqueda en el marketplace: “Dev Containers”, autor Microsoft).
Una vez todo eso está en su sitio, viene lo entretenido.
2. Crear un devcontainer desde cero en VS Code
Supongamos que tienes una carpeta de proyecto “normal” en tu máquina y quieres convertirla en “proyecto con devcontainer”. Los pasos son pocos y bastante indoloros:
- Abre el proyecto en VS Code (
File > Open Folder...ocode .desde la terminal). - Abre la Command Palette (Ctrl+Shift+P / Cmd+Shift+P) y escribe:
Dev Containers: Add Dev Container Configuration Files...y pulsa Enter. - VS Code te preguntará qué quieres como base. Tienes varias opciones:
- Listado de stacks típicos: Node, Python, .NET, Java, Go, etc.
- Imágenes preconstruidas de Microsoft:
mcr.microsoft.com/devcontainers/.... - Puedes incluso indicar que quieres partir de un Dockerfile o de un
docker-compose.ymlpropio.
Elige, por ejemplo, “Python” si estás haciendo un backend en Django/FastAPI/Flask, o “Node” si es una API en Express.
4. VS Code creará una carpeta .devcontainer/ en tu proyecto, con al menos un fichero devcontainer.json y, a veces, un Dockerfile asociado.
Algo minimalista podría parecerse a:
{
"name": "Mi Proyecto Python",
"image": "mcr.microsoft.com/devcontainers/python:3.12",
"forwardPorts": [8000],
"customizations": {
"vscode": {
"extensions": [
"ms-python.python",
"ms-python.black-formatter"
]
}
}
}
- Ahora vuelve a la Command Palette y ejecuta:
Dev Containers: Reopen in Container.
VS Code hará su magia:
- Construirá la imagen (si hace falta).
- Creará un contenedor.
- Montará tu carpeta de proyecto dentro del contenedor.
- Instalará las extensiones listadas.
Todo esto con una barrita de progreso que, la primera vez, te enseña cuánto café necesitas.
6. Cuando termine, estarás “dentro del contenedor”:
- La terminal integrada (View > Terminal) ya no es tu host; si haces uname -a verás Linux con la info del contenedor.
- python, node, java… serán los del contenedor, no los del host.
- Los archivos que ves en el panel de Explorer son los de siempre, pero montados desde el contenedor.
Desde ese momento, desarrollar es igual que antes… solo que todo sucede dentro de ese entorno empaquetado que puedes reconstruir en cualquier sitio.
3. Usar los devcontainers ya existentes (repos de ejemplo, equipo, etc.)
Si clonas un repo que ya trae .devcontainer/devcontainer.json, ni siquiera tienes que crearlo tú.
- Abres la carpeta en VS Code.
- VS Code suele mostrarte una notificación tipo: “This folder contains a Dev Container configuration. Reopen in Container?”.
- Pulsas “Reopen in Container” y repite el proceso de build/conexión.
Si no ves la notificación, siempre puedes ir a la Command Palette y lanzar Dev Containers: Reopen in Container manualmente.
Es la forma más fácil de probarlo: busca un repo de ejemplo tipo vscode-remote-try-python de Microsoft o tu propia plantilla, ábrelo y deja que se encargue.
PyCharm y Rider: subirse al tupper ajeno
JetBrains llegó más tarde que el resto al mundo de los devcontainers, pero se ha puesto las pilas: tanto PyCharm como Rider soportan conectar con devcontainers
definidos por un devcontainer.json.
La filosofía aquí es distinta: JetBrains no te genera el devcontainer (eso mejor lo haces con VS Code o a mano), pero sí sabe:
- Leer un
.devcontainer/devcontainer.json. - A partir de él, crear el contenedor usando Docker.
- Y conectarse a él como entorno de ejecución/índice, etc.
1. Requisitos previos
- Docker funcionando en el host (otra vez, ver el artículo de Docker para Windows/macOS [LINK A DOCKER]).
- Proyecto con
.devcontainer/devcontainer.jsonya presente. - Versión reciente de PyCharm / Rider que incluya soporte de Dev Containers (en la documentación de PyCharm lo marcan expresamente).
2. PyCharm: conectar a un devcontainer
Escenario: tienes un proyecto de Python con .devcontainer/ listo (quizá lo generaste en VS Code, quizá a mano). Quieres usar PyCharm pero ejecutar el código dentro de ese contenedor.
Pasos simplificados (según la documentación de PyCharm ):
- Abre PyCharm. En la pantalla de bienvenida puedes:
- Abrir el proyecto local que ya tiene
.devcontainer, o - Usar opciones de “Remote Development / Dev Container” si las ves.
- Abrir el proyecto local que ya tiene
- Una vez el proyecto está abierto, localiza y abre
devcontainer.jsonen el editor de PyCharm. - En el margen izquierdo del editor, PyCharm muestra un iconito asociado al archivo; al hacer clic deberías ver una opción del estilo “Create Dev Container” o “Start Dev Container inside IDE”.
- Al hacer clic, PyCharm usará Docker para construir y arrancar el devcontainer siguiendo la receta de
devcontainer.json. Verás el progreso en la ventana de Services (la de Docker/containers). - Cuando termine, tendrás un intérprete de Python basado en ese contenedor. PyCharm te permitirá elegirlo como interpreter del proyecto (igual que hace con entornos virtuales, Docker, etc.).
A partir de ahí, tus tests, tu run config, tu debugger… todo se ejecuta dentro del contenedor, pero tú sigues editando desde tu PyCharm de siempre.
3. Rider (Java, .NET): mismo concepto, menú distinto
En Rider la película es parecida, solo que orientada a proyectos Java/.NET.
Resumen de cómo lo cuenta su documentación :
- Abres el proyecto que ya incluye un
.devcontainer/devcontainer.json. - Abres el
devcontainer.jsonen el editor. - En el margen izquierdo aparece un iconito; al hacer clic, seleccionas “Create Dev Container” (o alguna variante tipo “Create Dev Container and Clone Sources”).
- Rellenas lo que te pida (repo, branch, etc. en caso de clonación remota) y pulsas “Build Container and Continue”.
- Rider se conecta al contenedor, abre el proyecto ahí y te deja trabajar como si fuera un entorno remoto Docker más.
La clave en ambos casos (PyCharm/Rider) es que no crean el devcontainer; simplemente lo usan. Por eso tiene bastante sentido generar la configuración en VS Code (o a mano) y luego reutilizarla desde los dos mundos.
Más cosas que trastear en el devcontainer.json
Sin entrar en guía exhaustiva, cuando empieces a trastear vas a ver campos que dan mucho juego:
imageodockerFile: si quieres partir de una imagen ya hecha o de tu Dockerfile.forwardPorts: puertos que se exponen automáticamente (ideal para webapps: 3000, 8000, etc.).mounts: mapeos extra de volúmenes si necesitas añadir cosas del host aparte del código.postCreateCommand/postStartCommand: comandos que se ejecutan tras crear/arrancar el contenedor (por ejemplo,pip install -r requirements.txt).customizations.vscode.extensions: extensiones de VS Code que quieres que se instalen solas cuando alguien abra el proyecto en devcontainer. Es una de las funcionalidades más útiles: garantiza que todo el equipo trabaja con las mismas herramientas de editor sin que nadie tenga que instalar nada a mano. Algunos ejemplos habituales:
"customizations": {
"vscode": {
"extensions": [
"ms-python.python", // soporte de Python
"ms-python.black-formatter", // formateador
"charliermarsh.ruff", // linter rápido
"ms-azuretools.vscode-docker", // gestión de Docker
"eamodio.gitlens", // historial Git avanzado
"esbenp.prettier-vscode" // formateador para JS/TS/HTML
]
}
}
Ojo: esto solo funciona con VS Code (y derivados como Cursor o VS Code forks). Los IDEs de JetBrains (PyCharm, Rider, IntelliJ…) ignoran el bloque
customizations.vscode; para ellos eldevcontainer.jsondefine imagen, puertos y comandos, pero la configuración de plugins del IDE se gestiona desde el propio JetBrains, no desde el fichero. Visual Studio (el “grande”, no VS Code) tampoco soporta este bloque.
En JetBrains, además, hay integración específica para añadir ajustes del IDE al contenedor desde el propio Rider/PyCharm (por ejemplo, plugins), pero eso ya es capítulo dos.
Epílogo: los devcontainers y el sueño de “funciona igual en todas partes”
Los devcontainers no son una bala de plata. Sigues necesitando entender Docker un mínimo, configurar recursos con cariño (hola, WSL2 y vmmem) y asumir que la primera build de un contenedor va a tardar más que abrir el repo a pelo.
Pero a cambio te dan algo que, pasado cierto tamaño de equipo o complejidad de proyecto, vale oro:
- Una forma clara de decir “este proyecto necesita esto” y que el ordenador lo entienda.
- Una barrera decente contra el “en mi máquina va” y los “pasos de instalación” de veinte páginas.
- Y la libertad de cambiar de portátil, sistema operativo o IDE sin tener que reaprender cada vez a domar el entorno.
Al final, un devcontainer es como un tupper: metes dentro todo lo que necesita tu app para vivir –dependencias, herramientas, configuración, extensiones– y lo cierras bien. Da igual dónde lo abras –Windows, macOS, Linux, VS Code, JetBrains–: sabe exactamente igual.
Que en este sector ya es casi ciencia ficción.
Glosario rápido
Si algún término te suena a nombre de banda de metal progresivo, aquí va la traducción.
- devcontainer: entorno de desarrollo empaquetado en un contenedor Docker y definido por un fichero
devcontainer.json. El IDE lo lee, construye el contenedor y trabaja dentro de él. - host: la máquina física (tu portátil, tu sobremesa) donde corren Docker y el IDE. Todo lo que no está “dentro del contenedor” está en el host.
- CI (Continuous Integration): integración continua. Servidor o pipeline que compila y prueba el código automáticamente cada vez que alguien sube cambios al repositorio.
- WSL2 (Windows Subsystem for Linux 2): capa de compatibilidad de Windows que permite ejecutar un kernel Linux real dentro de Windows. Docker en Windows funciona sobre ella.
- volumen (Docker): mecanismo para compartir carpetas entre el host y el contenedor (o para persistir datos del contenedor). Cuando montas tu código como volumen, los cambios se reflejan en ambos lados.
- shim: pequeño ejecutable intermediario que intercepta una llamada a un comando (como
python) y la redirige al binario correcto según la configuración activa.
Fuentes y referencias
Todo lo que vas a necesitar para ganar la discusión de “y si usamos devcontainers” en la retro.
- Artículo de instalación de Docker - iamlino.net. Guía paso a paso para instalar Docker sin dolor.
- Dev Containers - Visual Studio Code - Microsoft. Documentación oficial de la extensión Dev Containers.
- Dev Containers Tutorial - Microsoft. Tutorial paso a paso para empezar con devcontainers en VS Code.
- The Ultimate Guide to Dev Containers - Daytona. Guía completa sobre devcontainers y su ecosistema.
- Are Dev Containers Worth It? - Liske Blog. Análisis de ventajas e inconvenientes de los devcontainers.
- Introducción a Dev Containers - Backend Horizon. Tutorial introductorio en español.
- 6 Reasons to Consider Dev Containers - Cloud Native Now. Argumentos a favor de adoptar devcontainers.
- Using Dev Containers in VS Code - Dev.to. Guía práctica de uso de devcontainers en VS Code.
- Connect to a Dev Container - PyCharm - JetBrains. Documentación oficial de devcontainers en PyCharm.
- Customizing devcontainer.json - Rider - JetBrains. Documentación oficial de devcontainers en Rider.
- Start Dev Container Inside IDE - Rider - JetBrains. Cómo arrancar un devcontainer desde Rider.
- Dev Container Options - JetBrains (hilo) - Reddit. Discusión sobre opciones de devcontainers en JetBrains.
- 6 Reasons to Consider Dev Containers - Cloud Native Now. Artículo complementario sobre beneficios de devcontainers.
