Jonatan Matajonmatum.com
conceptosnotasexperimentosensayos
© 2026 Jonatan Mata. All rights reserved.v2.1.1
Conceptos

Dev Containers

Especificación para definir entornos de desarrollo reproducibles en contenedores, eliminando el problema de 'funciona en mi máquina' y acelerando el onboarding.

evergreen#devcontainers#docker#vscode#development#reproducibility#dx

¿Qué es?

Dev Containers es una especificación abierta para definir entornos de desarrollo completos en contenedores Docker. Un archivo devcontainer.json describe todo lo necesario: imagen base, herramientas, extensiones de editor, variables de entorno y configuración de red. Cualquier desarrollador puede abrir el proyecto y obtener un entorno idéntico en minutos, sin instalar dependencias localmente.

La especificación va más allá de un simple Dockerfile. Define cómo el editor debe comportarse dentro del contenedor, qué puertos exponer, cómo manejar el código fuente y qué comandos ejecutar después de crear el contenedor. Es infraestructura como código aplicada al entorno de desarrollo.

Los devcontainers eliminan la fricción del onboarding y garantizan que todos los desarrolladores trabajen con las mismas versiones de herramientas, reduciendo los bugs relacionados con diferencias de entorno y mejorando la experiencia del desarrollador.

Configuración completa

Un devcontainer.json real para un proyecto Node.js con base de datos:

{
  "name": "Full Stack App",
  "dockerComposeFile": "docker-compose.yml",
  "service": "app",
  "workspaceFolder": "/workspace",
  "features": {
    "ghcr.io/devcontainers/features/aws-cli:1": {
      "version": "latest"
    },
    "ghcr.io/devcontainers/features/docker-in-docker:2": {
      "version": "latest",
      "dockerDashComposeVersion": "v2"
    },
    "ghcr.io/devcontainers/features/github-cli:1": {}
  },
  "customizations": {
    "vscode": {
      "extensions": [
        "ms-vscode.vscode-typescript-next",
        "bradlc.vscode-tailwindcss",
        "ms-vscode.vscode-json",
        "esbenp.prettier-vscode"
      ],
      "settings": {
        "typescript.preferences.importModuleSpecifier": "relative",
        "editor.formatOnSave": true,
        "editor.defaultFormatter": "esbenp.prettier-vscode"
      }
    }
  },
  "forwardPorts": [3000, 5432],
  "portsAttributes": {
    "3000": {
      "label": "Application",
      "onAutoForward": "notify"
    }
  },
  "postCreateCommand": "npm install && npm run db:migrate",
  "postStartCommand": "npm run dev",
  "remoteUser": "node",
  "mounts": [
    "source=${localWorkspaceFolder}/.aws,target=/home/node/.aws,type=bind,consistency=cached"
  ]
}

Configuración multi-servicio

Para aplicaciones con múltiples servicios, usar Docker Compose:

# docker-compose.yml
version: '3.8'
services:
  app:
    build:
      context: .
      dockerfile: .devcontainer/Dockerfile
    volumes:
      - ../..:/workspaces:cached
    command: sleep infinity
    environment:
      - DATABASE_URL=postgresql://postgres:postgres@db:5432/myapp
    depends_on:
      - db
      - redis
 
  db:
    image: postgres:15
    restart: unless-stopped
    volumes:
      - postgres-data:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: myapp
 
  redis:
    image: redis:7-alpine
    restart: unless-stopped
 
volumes:
  postgres-data:

Soporte para GPU

Para desarrollo con IA o machine learning:

{
  "name": "ML Development",
  "image": "mcr.microsoft.com/devcontainers/python:3.11",
  "features": {
    "ghcr.io/devcontainers/features/nvidia-cuda:1": {
      "installCudnn": true
    }
  },
  "runArgs": ["--gpus", "all"],
  "postCreateCommand": "pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118"
}

Integración con CI/CD

Los devcontainers pueden ejecutarse en CI/CD para garantizar paridad entre desarrollo y testing:

# .github/workflows/test.yml
name: Test
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: devcontainers/ci@v0.3
        with:
          runCmd: npm test

Comparación de herramientas

HerramientaSoporteCaracterísticasLimitaciones
VS CodeNativoExtensiones, debugging, terminal integradoSolo VS Code
GitHub CodespacesNativoCloud, colaboración, prebuildsRequiere GitHub
JetBrains GatewayParcialIDEs completos, debugging remotoConfiguración compleja
DevPodNativoOpen source, múltiples providersComunidad pequeña

Features disponibles

El ecosistema de features permite agregar herramientas sin modificar la imagen base:

  • Lenguajes: Node.js, Python, Go, Rust, Java, .NET
  • Cloud: AWS CLI, Azure CLI, Google Cloud CLI, Terraform
  • Herramientas: Git, GitHub CLI, Docker-in-Docker, Kubernetes CLI
  • Bases de datos: PostgreSQL, MySQL, MongoDB, Redis

Cada feature es versionado independientemente y puede configurarse con opciones específicas.

¿Por qué importa?

Los devcontainers resuelven uno de los problemas más costosos en ingeniería: la inconsistencia de entornos. Un desarrollador senior puede perder días configurando un proyecto complejo, y los bugs por diferencias de entorno consumen tiempo de debugging valioso.

Al definir el entorno como código, los devcontainers garantizan reproducibilidad y reducen el tiempo de onboarding de días a minutos. Esto es especialmente crítico en equipos distribuidos donde cada desarrollador tiene un setup diferente. La inversión inicial en configurar devcontainers se amortiza rápidamente con la reducción de fricción y bugs relacionados con el entorno.

Referencias

  • Development containers — Dev Containers, 2024. Especificación oficial y documentación.
  • Development Container Specification — Dev Containers, 2024. Especificación técnica completa del formato.
  • Features — Dev Containers, 2024. Catálogo oficial de features disponibles.
  • Developing inside a Container — Microsoft, 2024. Guía oficial de VS Code para devcontainers.
  • Adding a dev container configuration to your repository - GitHub Docs — GitHub, 2024. Configuración para GitHub Codespaces.
  • Maximizing Developer Effectiveness — Martin Fowler, 2021. Análisis de factores que impactan la productividad del desarrollador.
  • GitHub's Engineering Team has moved to Codespaces - The GitHub Blog — GitHub, 2021. Caso de estudio de adopción interna.

Contenido relacionado

  • Docker

    Plataforma de contenedores que empaqueta aplicaciones con todas sus dependencias en unidades portables y consistentes que se ejecutan igual en cualquier entorno.

  • Experiencia del Desarrollador

    Disciplina enfocada en optimizar la productividad, satisfacción y efectividad de los desarrolladores mediante herramientas, procesos y entornos bien diseñados.

  • CI/CD

    Continuous Integration y Continuous Delivery/Deployment — prácticas que automatizan la integración de código, testing y entrega a producción. Fundamento de la ingeniería de software moderna.

  • Mi Devcontainer

    Entorno de desarrollo personal con devcontainer, Docker Compose, backend Python y frontend React.

  • Plantilla Devcontainer Serverless Fullstack

    Plantilla de devcontainer para desarrollo fullstack serverless con backend Python, frontend React y servicios AWS locales.

  • Plantilla Devcontainer Mínima

    Plantilla mínima de devcontainer para iniciar proyectos rápidamente con una configuración base limpia.

  • Devcontainer Features

    Colección de features personalizados para Dev Containers con testing automatizado, CI/CD y publicación en GitHub Container Registry.

  • Devcontainer Amazon Linux Workspace

    Plantilla de devcontainer basada en Amazon Linux para entornos de desarrollo compatibles con AWS.

  • Desarrollo Local

    Prácticas y herramientas para crear entornos de desarrollo productivos en la máquina del desarrollador, replicando producción lo más fielmente posible.

Conceptos