
Linux ofrece una base excelente para desarrollar aplicaciones profesionales porque integra terminal, compiladores, automatización, SSH, contenedores y herramientas de control de versiones dentro de un entorno estable.
Combinar Visual Studio Code, Git y Docker permite construir un espacio de trabajo reproducible: Visual Studio Code se utiliza para editar y depurar, Git conserva el historial del proyecto y Docker ejecuta las dependencias dentro de contenedores aislados.
Objetivo de esta guía: preparar una computadora Linux para desarrollar proyectos con una estructura ordenada, configuración compartida, control de versiones, contenedores y un entorno que otro integrante del equipo pueda reproducir.
Sistema utilizado: los pasos principales están orientados a Ubuntu 24.04 o 26.04 de 64 bits. Las mismas herramientas pueden utilizarse en Debian, Fedora, openSUSE, Arch Linux y otras distribuciones, adaptando el gestor de paquetes.
Qué aporta cada herramienta
| Herramienta | Función en el entorno |
|---|---|
| Linux | Sistema base, terminal, permisos, redes, servicios y automatización. |
| Visual Studio Code | Edición, depuración, terminal integrada, extensiones y navegación del código. |
| Git | Historial, ramas, colaboración, revisión y recuperación de cambios. |
| Docker Engine | Construcción y ejecución de aplicaciones dentro de contenedores. |
| Docker Compose | Definición conjunta de aplicación, base de datos, caché, redes y volúmenes. |
| Dev Containers | Uso de un contenedor como entorno completo de desarrollo dentro de VS Code. |
Paso 1: preparar el sistema Linux
Empieza actualizando el sistema e instalando herramientas básicas para descargar paquetes, trabajar con certificados y compilar dependencias.
Crea una carpeta dedicada a los repositorios. Evita almacenar proyectos dentro de Descargas, Escritorio o directorios sincronizados automáticamente sin haber evaluado sus efectos sobre permisos y rendimiento.
Paso 2: instalar y configurar Git
Git está disponible desde los repositorios de las principales distribuciones. En Ubuntu o Debian se instala mediante APT:
Configura el nombre y correo que aparecerán en tus commits. Debes sustituir los valores de ejemplo por tus propios datos.
Git permite guardar configuraciones a nivel del sistema, del usuario o de un repositorio concreto. Las opciones definidas con --global se aplican al usuario actual y normalmente se almacenan en ~/.gitconfig o ~/.config/git/config.
Buena práctica: utiliza una identidad profesional coherente. En proyectos empresariales puede ser necesario configurar un correo diferente únicamente dentro del repositorio.
Para cambiar la identidad en un proyecto concreto:
Paso 3: configurar autenticación SSH para Git
Las claves SSH permiten autenticar operaciones con GitHub, GitLab y otros servidores sin introducir una contraseña de cuenta en cada operación.
Primero comprueba si ya tienes claves:
Si no existe una clave apropiada, genera una Ed25519 y protege la clave privada con una frase de paso.
Copia únicamente el contenido de la clave terminada en .pub y agrégala a la plataforma Git utilizada. La clave privada id_ed25519 nunca debe enviarse, publicarse ni guardarse dentro de un repositorio. GitHub recomienda Ed25519 para sistemas actuales y el uso de una frase de paso para proteger la clave.
Paso 4: instalar Visual Studio Code
La instalación mediante el repositorio oficial permite recibir actualizaciones a través del gestor de paquetes. Agrega la clave y crea el archivo de repositorio:
Comprueba la instalación y abre la carpeta de proyectos:
Microsoft documenta repositorios oficiales para distribuciones basadas en Debian y Fedora. La instalación del paquete configura las actualizaciones mediante APT o DNF.
Alternativa abierta: el código fuente de VS Code se publica bajo licencia MIT, pero la compilación oficial de Microsoft incluye personalizaciones propias. Quienes prefieran una compilación comunitaria pueden evaluar VSCodium, verificando previamente la compatibilidad de extensiones.
Paso 5: instalar extensiones esenciales
No instales decenas de extensiones sin necesidad. Cada lenguaje y proyecto debe definir su propio conjunto mínimo.
Para trabajar con contenedores y configuraciones compartidas:
Para desarrollo web con JavaScript o TypeScript puedes añadir:
Dev Containers permite abrir una carpeta dentro de un contenedor y conservar funciones como IntelliSense, navegación y depuración. El archivo devcontainer.json describe cómo debe construirse o utilizarse el entorno.
Paso 6: instalar Docker Engine y Docker Compose
Retira posibles paquetes incompatibles antes de instalar Docker desde su repositorio oficial:
Si alguno de esos paquetes no está instalado, APT simplemente lo indicará. Ahora agrega la clave y el repositorio de Docker:
Instala Docker Engine, containerd, Buildx y el complemento actual de Docker Compose:
La documentación vigente de Docker admite Ubuntu 22.04, 24.04, 25.10 y 26.04 de 64 bits, y recomienda instalar Docker Engine mediante el repositorio oficial para facilitar futuras actualizaciones.
Comprueba las herramientas instaladas:
Paso 7: utilizar Docker sin escribir sudo
Docker permite añadir el usuario al grupo docker para ejecutar comandos sin sudo:
Advertencia de seguridad: pertenecer al grupo docker concede privilegios equivalentes a root sobre el equipo. No añadas usuarios no confiables y evita ejecutar imágenes de procedencia desconocida. Docker también ofrece un modo rootless para escenarios que requieren mayor aislamiento.
Paso 8: crear una estructura profesional de proyecto
Crea un proyecto con carpetas para código, pruebas, configuración de VS Code y Dev Containers:
La estructura esperada será similar a:
Paso 9: añadir archivos de configuración compartidos
Archivo .editorconfig
EditorConfig ayuda a mantener el mismo formato básico aunque los integrantes utilicen editores diferentes.
Archivo .gitignore
No almacenes credenciales, dependencias descargadas, archivos temporales ni configuraciones locales dentro del repositorio.
Archivo .dockerignore
Este archivo evita enviar datos innecesarios al contexto de construcción de Docker.
Paso 10: crear el contenedor de desarrollo
El siguiente ejemplo utiliza Python como base. Para Node.js, Go, Java, PHP o .NET debes sustituir la imagen y las herramientas del lenguaje.
Ejecutar el proceso de desarrollo como usuario no privilegiado reduce el impacto de errores dentro del contenedor. Comprueba el identificador de tu usuario Linux con:
Si tu usuario no utiliza 1000 como UID o GID, ajusta los argumentos del Dockerfile o del proceso de construcción.
Paso 11: definir el entorno con Docker Compose
Crea el archivo compose.yaml:
Docker Compose permite definir servicios, redes, volúmenes y variables en un solo archivo YAML y levantar el entorno mediante un único comando.
Crea el archivo de ejemplo para las variables:
Cada desarrollador puede crear su archivo local sin subirlo al repositorio:
Para detener el entorno:
Paso 12: configurar Dev Containers
Crea el archivo .devcontainer/devcontainer.json:
Abre el proyecto:
Dentro de Visual Studio Code pulsa Ctrl + Shift + P y ejecuta:
Dev Containers: Reopen in Container
A partir de ese momento, la terminal, extensiones y herramientas del lenguaje se ejecutarán dentro del contenedor definido por el proyecto.
Paso 13: configurar Visual Studio Code por proyecto
Crea .vscode/settings.json para guardar reglas compartidas:
Crea también .vscode/extensions.json para recomendar extensiones al equipo:
Paso 14: iniciar el repositorio Git
Después de crear el repositorio remoto, enlázalo y publica la rama principal:
Para desarrollar una nueva función, utiliza una rama separada:
Flujo de trabajo diario recomendado
- Actualizar la rama principal con los cambios del equipo.
- Crear una rama corta para la nueva tarea.
- Abrir el proyecto dentro del Dev Container.
- Ejecutar la aplicación y sus dependencias con Docker Compose.
- Programar y ejecutar pruebas.
- Revisar los cambios con git diff.
- Crear commits pequeños y descriptivos.
- Publicar la rama y solicitar revisión.
- Eliminar contenedores y recursos que ya no sean necesarios.
Buenas prácticas de seguridad
- No almacenes contraseñas, tokens o claves privadas en Git.
- Mantén .env dentro de .gitignore.
- Publica únicamente un archivo .env.example sin valores sensibles.
- No utilices imágenes Docker desconocidas o sin mantenimiento.
- Evita la etiqueta latest en proyectos que necesiten reproducibilidad.
- No montes /var/run/docker.sock dentro de contenedores no confiables.
- Ejecuta las aplicaciones como usuarios sin privilegios.
- Actualiza Linux, VS Code, Docker y las dependencias del proyecto.
- No utilices chmod 777 como solución general para problemas de permisos.
- Revisa el Dockerfile y los scripts antes de construir imágenes externas.
Docker advierte además que los puertos publicados por los contenedores pueden interactuar de forma inesperada con reglas gestionadas por UFW o firewalld. En servidores, deben revisarse las cadenas de Docker y las reglas aplicadas a DOCKER-USER.
Errores frecuentes al preparar el entorno
- Instalar Docker desde varios repositorios diferentes.
- Guardar proyectos como root y después tener problemas de permisos.
- Instalar todas las versiones de un lenguaje directamente en el sistema.
- Utilizar una sola rama Git para todo el desarrollo.
- Realizar commits gigantes con cambios no relacionados.
- Guardar dependencias descargadas dentro del repositorio.
- No documentar los comandos necesarios para iniciar el proyecto.
- Compartir el archivo .env con secretos reales.
- Crear contenedores sin límites ni estrategia de limpieza.
- Depender de configuraciones personales que el resto del equipo no posee.
Preguntas clave
¿Necesito instalar el lenguaje en mi sistema Linux?
No necesariamente. Puedes instalar Python, Node.js, Java, PHP o Go dentro del contenedor de desarrollo y mantener el sistema anfitrión más limpio.
¿Docker reemplaza a Git?
No. Git administra el código y su historial. Docker define el entorno en el que ese código se construye y ejecuta.
¿Docker Compose sirve solamente para producción?
No. Es especialmente útil en desarrollo para iniciar conjuntamente la aplicación, la base de datos, la caché y otros servicios mediante un archivo compartido.
¿Qué ventaja ofrece Dev Containers?
Permite que los integrantes del equipo utilicen versiones similares de compiladores, intérpretes, dependencias y extensiones, reduciendo diferencias entre computadoras.
¿Es seguro añadir mi usuario al grupo docker?
Es cómodo, pero el grupo concede privilegios equivalentes a root. Debe reservarse para usuarios de confianza o sustituirse por Docker Rootless cuando la política de seguridad lo requiera.
¿Debo subir la carpeta .vscode al repositorio?
Puede subirse cuando contiene configuraciones y extensiones útiles para todo el equipo. Las preferencias estrictamente personales deberían permanecer fuera del repositorio.
¿Puedo utilizar GitLab en lugar de GitHub?
Sí. Git es independiente de la plataforma remota. El mismo entorno funciona con GitHub, GitLab, Gitea, Forgejo, Bitbucket o un servidor Git propio.
¿Visual Studio Code es obligatorio?
No. Docker y Git también pueden utilizarse con VSCodium, Neovim, Emacs, IntelliJ IDEA, Eclipse u otros editores.
Recomendamos
En resumen
Un entorno profesional en Linux no se define solamente por las herramientas instaladas. También necesita una estructura clara, configuraciones compartidas, control de versiones, contenedores reproducibles y documentación suficiente para que otro desarrollador pueda iniciar el proyecto.
Visual Studio Code aporta edición y depuración; Git conserva la evolución del código; Docker y Compose aíslan las dependencias; Dev Containers conecta estas piezas dentro de una experiencia de desarrollo coherente.
Conclusión editorial
El objetivo no es que “funcione en mi computadora”, sino que el mismo proyecto pueda abrirse, construirse, probarse y mantenerse de forma predecible en todo el equipo.

