Se você desenvolve usando Docker no Windows, provavelmente já sentiu aquela lentidão frustrante onde um simples refresh no Laravel demora segundos ou o Hot Reload do Vue.js parece não funcionar. A solução para isso não é trocar de computador, mas sim mudar onde seus arquivos residem e como suas ferramentas interagem com eles.

Neste artigo, vamos detalhar como configurar o ambiente perfeito de alta performance.


1. O Segredo da Performance: O Sistema de Arquivos Link para o cabeçalho

A mudança mais impactante que você pode fazer é mover seus projetos da partição do Windows (C:\Users\...) para o sistema de arquivos nativo do Linux dentro do WSL2 (\\wsl.localhost\Ubuntu\home\...).

Por que isso é tão mais rápido? Link para o cabeçalho

  • I/O Nativo: No Windows (/mnt/c/), o Docker precisa traduzir cada leitura de arquivo entre os protocolos NTFS e Ext4. No diretório interno do Linux, a comunicação é direta e até 10x mais rápida.

  • Inotify: O Webpack (Vue.js) usa o sistema inotify do kernel Linux para saber quando um arquivo mudou. Esse sistema não funciona bem em partições montadas do Windows, mas é instantâneo dentro do WSL2.

  • Laravel Autoload: O PHP precisa ler centenas de arquivos na pasta vendor em cada requisição. No WSL2, essa leitura é quase imediata.


2. Configurando o VS Code como uma Ponte Link para o cabeçalho

Para trabalhar com arquivos dentro do Linux sem perder o conforto do Windows, usamos o modo Remote Development.

  1. Instale a extensão WSL (da Microsoft) no seu VS Code.

  2. Sempre abra seus projetos pelo terminal do Ubuntu digitando: code . dentro da pasta do projeto.

  3. Dica de Extensões: Instale extensões como PHP Intelephense e Vetur/Volar especificamente “no WSL”, conforme indicado na aba de extensões do VS Code. Isso garante que o índice de busca do editor também rode com performance máxima.


3. Automação de Fluxo com Docker Link para o cabeçalho

Não há necessidade de subir seus containers manualmente toda vez. Podemos automatizar isso usando as Tasks do VS Code.

Crie o arquivo .vscode/tasks.json no seu projeto:

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Auto Up Docker",
            "type": "shell",
            "command": "docker-compose up -d",
            "runOptions": { "runOn": "folderOpen" },
            "presentation": { "reveal": "silent", "panel": "new" }
        }
    ]
}

Isso garante que, ao abrir o projeto, o ambiente já esteja pronto para uso.


4. Aliases: Atalhos de Produtividade Link para o cabeçalho

Digitar comandos longos do Docker consome tempo e foco. Personalize o seu arquivo ~/.bashrc no Ubuntu para criar atalhos poderosos:

# Laravel Artisan
alias pa='docker-compose exec app php artisan'
alias tinker='docker-compose exec app php artisan tinker'

# Frontend (Vue.js)
alias nrd='docker-compose exec node npm run dev'
alias nrb='docker-compose exec node npm run build'

# Docker Geral
alias dcup='docker-compose up -d'
alias dcdown='docker-compose down'
alias dclogs='docker-compose logs -f'

Após salvar, execute source ~/.bashrc. Agora, uma migração de banco de dados é apenas pa migrate.


5. Otimização de Banco de Dados e Memória Link para o cabeçalho

Para que seu banco de dados (MySQL/PostgreSQL) não seja um gargalo em ambiente de desenvolvimento, ajuste o docker-compose.yml:

  • Flush Log: Adicione command: --innodb_flush_log_at_trx_commit=2 ao serviço de banco. Isso acelera drasticamente as escritas em disco.

  • Gestão de RAM: O WSL2 pode ser faminto por memória. No Windows, crie o arquivo C:\Users\SeuUsuario\.wslconfig para limitar o consumo:

[wsl2]
memory=4GB

6. Sincronização com o Navegador (BrowserSync) Link para o cabeçalho

Para projetos Vue 2 com Laravel Mix, o BrowserSync é o toque final. Ele sincroniza o estado do navegador com o seu código. No webpack.mix.js:

mix.browserSync({
    proxy: 'nome_do_seu_container_nginx',
    open: false,
    files: [
        'app/**/*.php',
        'resources/views/**/*.php',
        'public/js/**/*.js',
        'public/css/**/*.css'
    ]
});

Conclusão Link para o cabeçalho

Ao mover seus arquivos para o WSL2, conectar via VS Code Remote, criar Aliases e otimizar o Docker, você elimina os maiores atritos do desenvolvimento em Windows. O resultado é um ambiente que responde instantaneamente, permitindo que você foque no código e não na espera.