16- Configuración de Visual Studio Code para Desarrollo con Docker

 

Configuración de Visual Studio Code para Desarrollo con Docker

Introducción

En este tutorial instalaremos y configuraremos Visual Studio Code con las extensiones necesarias para desarrollar proyectos Laravel en un entorno Docker. También aprenderemos a conectarnos a nuestra máquina virtual mediante SSH para trabajar con el código dentro del contenedor.


Paso 1: Verificar el Estado de los Contenedores

1.1 Verificar servicios activos

bash
# Listar contenedores en ejecución
docker compose ps

Salida esperada:

text
NAME               IMAGE               COMMAND                  SERVICE   CREATED         STATUS         PORTS
laravel_app        laravel-app         "docker-php-entrypoi…"   app       2 hours ago     Up 2 hours     9000/tcp
laravel_nginx      nginx:alpine        "/docker-entrypoint.…"   nginx     2 hours ago     Up 2 hours     0.0.0.0:8000->80/tcp
laravel_db         mysql:8.0           "docker-entrypoint.s…"   db        2 hours ago     Up 2 hours     0.0.0.0:3306->3306/tcp

1.2 Verificar acceso a la aplicación

Abrir en el navegador:

text
http://localhost:8000

o usando el dominio configurado en el archivo hosts.


Paso 2: Instalar Visual Studio Code

2.1 Descargar VS Code

Desde la página oficial:

text
https://code.visualstudio.com/download

Desde terminal (Windows - usando PowerShell):

powershell
# Usando winget (Windows Package Manager)
winget install Microsoft.VisualStudioCode

Desde terminal (Linux - Ubuntu/Debian):

bash
# Instalar mediante Snap
sudo snap install code --classic

# O mediante APT
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg
sudo install -o root -g root -m 644 packages.microsoft.gpg /etc/apt/trusted.gpg.d/
sudo sh -c 'echo "deb [arch=amd64,arm64,armhf signed-by=/etc/apt/trusted.gpg.d/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" > /etc/apt/sources.list.d/vscode.list'
sudo apt update
sudo apt install code

Desde terminal (macOS):

bash
# Usando Homebrew
brew install --cask visual-studio-code

2.2 Instalación paso a paso (Windows)

  1. Ejecutar el instalador descargado

  2. Aceptar los términos de licencia

  3. Seleccionar la ruta de instalación (por defecto)

  4. Seleccionar componentes adicionales:

    • ✅ Crear acceso directo en el escritorio

    • ✅ Agregar "Abrir con Code" al menú contextual

    • ✅ Agregar "Code" a la variable PATH

  5. Hacer clic en Instalar

  6. Finalizar la instalación


Paso 3: Instalar Extensiones para PHP/Laravel

3.1 Abrir Visual Studio Code

bash
# Desde terminal
code .

3.2 Acceder al mercado de extensiones

  • Hacer clic en el ícono de Extensiones (cuadro cuadrado) en la barra lateral izquierda

  • O usar el atajo: Ctrl+Shift+X

3.3 Extensiones esenciales para PHP

ExtensiónNombreDescripción
PHP Intelephensebmewburn.vscode-intelephense-clientAutocompletado avanzado, refactorización, análisis de código
PHP Extension Packfelixfbecker.php-packPaquete de extensiones PHP (instalación recomendada)
PHP Namespace Resolvermehedidracula.php-namespace-resolverImportación automática de clases usando Ctrl+Enter

Instalación desde terminal:

bash
code --install-extension bmewburn.vscode-intelephense-client
code --install-extension felixfbecker.php-pack
code --install-extension mehedidracula.php-namespace-resolver

3.4 Extensiones para Laravel (recomendadas 2024-2026)

ExtensiónNombreDescripción
Laravel Extension Packonecentlin.laravel-extension-packPaquete completo para Laravel
Laravel Blade Snippetsonecentlin.laravel-bladeSnippets para Blade
Laravel Artisanryannaddy.laravel-artisanEjecuta comandos Artisan desde VS Code
Blade Formattershufo.vscode-blade-formatterFormateador de archivos Blade

3.5 Extensiones para Plantillas Blade

bash
# Instalación desde terminal
code --install-extension onecentlin.laravel-blade
code --install-extension shufo.vscode-blade-formatter

3.6 Extensiones de Formateo

ExtensiónNombreDescripción
Prettieresbenp.prettier-vscodeFormateo automático de código
ESLintdbaeumer.vscode-eslintLinting para JavaScript
EditorConfigeditorconfig.editorconfigConsistencia en estilos de código

3.7 Extensiones de Utilidad

ExtensiónNombreDescripción
Dockerms-azuretools.vscode-dockerGestión de contenedores desde VS Code
Remote - SSHms-vscode-remote.remote-sshConexión SSH a máquinas remotas
GitLenseamodio.gitlensVisualización avanzada de Git
Error Lensusernamehw.errorlensDestaca errores en el código

3.8 Instalación masiva desde terminal:

bash
# Extensiones PHP/Laravel
code --install-extension bmewburn.vscode-intelephense-client
code --install-extension felixfbecker.php-pack
code --install-extension mehedidracula.php-namespace-resolver
code --install-extension onecentlin.laravel-extension-pack
code --install-extension onecentlin.laravel-blade
code --install-extension ryannaddy.laravel-artisan

# Formateo
code --install-extension esbenp.prettier-vscode
code --install-extension shufo.vscode-blade-formatter

# Utilidades
code --install-extension ms-azuretools.vscode-docker
code --install-extension ms-vscode-remote.remote-ssh
code --install-extension eamodio.gitlens

Paso 4: Configurar VS Code para PHP

4.1 Crear configuraciones de espacio de trabajo

Crear archivo .vscode/settings.json en la raíz del proyecto:

bash
mkdir -p .vscode
nano .vscode/settings.json
json
{
  "php.validate.executablePath": "php",
  "php.suggest.basic": false,
  "intelephense.files.maxSize": 5000000,
  "intelephense.files.exclude": [
    "**/vendor/**",
    "**/node_modules/**",
    "**/storage/**"
  ],
  "editor.formatOnSave": true,
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "[php]": {
    "editor.defaultFormatter": "bmewburn.vscode-intelephense-client"
  },
  "[blade]": {
    "editor.defaultFormatter": "shufo.vscode-blade-formatter"
  },
  "files.associations": {
    "*.blade.php": "blade"
  },
  "prettier.singleQuote": true,
  "prettier.semi": true,
  "prettier.useTabs": false,
  "prettier.tabWidth": 2
}

4.2 Crear recomendaciones de extensiones

Crear .vscode/extensions.json:

json
{
  "recommendations": [
    "bmewburn.vscode-intelephense-client",
    "onecentlin.laravel-extension-pack",
    "esbenp.prettier-vscode",
    "ms-azuretools.vscode-docker",
    "shufo.vscode-blade-formatter"
  ]
}

Paso 5: Conectar VS Code a la Máquina Virtual

5.1 Verificar dirección IP del host

bash
# En Linux/macOS
ip addr show
# o
ifconfig

# En Windows (PowerShell)
ipconfig

# Buscar la IP de la máquina virtual (ej: 192.168.1.200)

5.2 Configurar Remote - SSH

  1. Instalar la extensión Remote - SSH (ms-vscode-remote.remote-ssh)

  2. Presionar Ctrl+Shift+P y buscar Remote-SSH: Connect to Host...

  3. Seleccionar Add New SSH Host...

  4. Ingresar: ssh usuario@192.168.x.x

  5. Seleccionar el archivo de configuración SSH (generalmente ~/.ssh/config)

  6. Conectarse ingresando la contraseña

5.3 Configuración SSH avanzada

Crear/editar ~/.ssh/config:

text
Host laravel-dev
    HostName 192.168.1.200
    User tu_usuario
    IdentityFile ~/.ssh/id_rsa
    ForwardAgent yes

5.4 Abrir proyecto remoto

bash
# Conectarse y abrir el directorio del proyecto
code --folder-uri vscode-remote://ssh-remote+laravel-dev/home/udemy/laravel

Paso 6: Configurar Docker en VS Code

6.1 Extensión Docker

  1. Instalar la extensión Docker (ms-azuretools.vscode-docker)

  2. En la barra lateral, aparecerá el ícono de Docker

  3. Ver los contenedores activos:

    • laravel_app

    • laravel_nginx

    • laravel_db

6.2 Comandos útiles desde VS Code

bash
# Desde el panel de Docker
- Hacer clic derecho en un contenedor → "Start" / "Stop"
- "Attach Shell" para abrir una terminal
- "View Logs" para ver logs

Paso 7: Configuración de Debug para PHP

7.1 Crear configuración de debug

Crear .vscode/launch.json:

bash
mkdir -p .vscode
nano .vscode/launch.json
json
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Listen for Xdebug",
      "type": "php",
      "request": "launch",
      "port": 9003,
      "pathMappings": {
        "/var/www/html": "${workspaceFolder}"
      }
    },
    {
      "name": "Launch currently open script",
      "type": "php",
      "request": "launch",
      "program": "${file}",
      "cwd": "${fileDirname}",
      "port": 9003
    }
  ]
}

7.2 Configurar Xdebug en el contenedor

Agregar al docker-compose.yml:

yaml
  app:
    environment:
      - XDEBUG_MODE=debug
      - XDEBUG_CONFIG=client_host=host.docker.internal
    extra_hosts:
      - "host.docker.internal:host-gateway"

Paso 8: Atajos de Teclado Útiles en VS Code

AtajoAcción
Ctrl+Shift+PComandos de VS Code
Ctrl+PBuscar archivo
Ctrl+Shift+FBuscar en archivos
Ctrl+EnterImportar clase (PHP Namespace)
F12Ir a definición
Shift+F12Ver referencias
Ctrl+Shift+ ` | Abrir terminal integrada |
Ctrl+K SGuardar todo
Ctrl+Shift+BEjecutar tarea de build

Paso 9: Snippets para Laravel

9.1 Crear snippets personalizados

Crear .vscode/php.code-snippets:

json
{
  "Laravel Controller": {
    "prefix": "controller",
    "body": [
      "<?php",
      "",
      "namespace App\\Http\\Controllers;",
      "",
      "use Illuminate\\Http\\Request;",
      "",
      "class ${1:ControllerName} extends Controller",
      "{",
      "    public function index()",
      "    {",
      "        return view('${2:view-name}');",
      "    }",
      "}"
    ],
    "description": "Crea un controlador Laravel"
  },
  "Laravel Migration": {
    "prefix": "migration",
    "body": [
      "<?php",
      "",
      "use Illuminate\\Database\\Migrations\\Migration;",
      "use Illuminate\\Database\\Schema\\Blueprint;",
      "use Illuminate\\Support\\Facades\\Schema;",
      "",
      "return new class extends Migration",
      "{",
      "    public function up()",
      "    {",
      "        Schema::create('${1:table}', function (Blueprint \$table) {",
      "            \$table->id();",
      "            \$table->timestamps();",
      "        });",
      "    }",
      "",
      "    public function down()",
      "    {",
      "        Schema::dropIfExists('${1:table}');",
      "    }",
      "};"
    ],
    "description": "Crea una migración Laravel"
  }
}

Comentarios

Entradas más populares de este blog

12. Hola Mundo en Docker.

11¿Qué es Docker? y ¿Por qué debo saberlo?

14. Publish and Detached modes