Docker e Node no Windows com Vagrant e VS Code remoto
Se o Docker não funciona no seu Windows, ou você prefere não instalar Node e Docker nele, trabalhe dentro de uma máquina virtual Linux. Com Vagrant e VirtualBox ela sobe com um comando, você edita o código pelo VS Code como se fosse local e, quando quiser, joga a VM fora.
Esta aula é de fevereiro de 2022. Versões, imagens e passos dos programas mudam: confira a instalação do Vagrant e o Remote SSH do VS Code na documentação oficial. Se o Docker já roda bem no seu Windows, o caminho direto está em Docker no Windows: instalar e rodar o primeiro container.
Por que um ambiente alternativo
Fiz este ambiente depois de um evento meu de janeiro de 2022 sobre AWS com Docker. Para acompanhar, a pessoa precisava de Node, NPM, Docker e Docker Compose na máquina, e quase todos os problemas que recebi tinham a ver com o Windows.
A ideia é encurtar o caminho: deixar o ambiente pronto para você começar a rodar e containerizar o projeto. Depois, se quiser, migra para WSL2 ou Linux de verdade, que é o ideal para Docker.
O que cada peça faz:
- VirtualBox roda a máquina virtual, mas você não mexe nele diretamente.
- Vagrant automatiza a criação da VM a partir de um arquivo, o
Vagrantfile, que funciona como um Dockerfile da máquina: diz o sistema operacional e o que fazer ao subir. - VS Code com a extensão Remote SSH conecta na VM. Seu Windows só roda o editor.
- Git Bash (ou outro Git) clona o projeto de exemplo.
1Instalar as ferramentas
Instale, nesta ordem, o VirtualBox (versão para Windows), o Vagrant (64 bits), o Git e o VS Code, cada um no next, next, next. O instalador pode pedir para reiniciar a máquina: reinicie. Na instalação do VirtualBox, deixei desmarcada a opção de abrir o programa ao terminar.
Depois do reboot, abra o terminal do VS Code e confirme que o Vagrant responde:
vagrant -h
Se ele listar os comandos, está instalado.
2Clonar o projeto e subir a VM
Clone o projeto de exemplo, o bia_vagrant, numa pasta sua e abra essa pasta no VS Code. Na raiz está o Vagrantfile. Suba a VM:
vagrant up
O Vagrant lê o Vagrantfile, procura a box ubuntu/focal64 (o Ubuntu 20.04) e, se não a tiver, baixa. Estimo que a box tenha uns 2 GB, então leva um tempo. Depois ele importa a VM e roda os scripts de preparo.

O arquivo faz três coisas que importam:
- Escolhe a box
ubuntu/focal64. - Encaminha as portas 3001 (a aplicação em container), 8080 (a aplicação web, se você quiser rodá-la) e 5433 (o PostgreSQL em container).
- Clona o projeto dentro da VM e dá permissão de execução ao script
prepara_linux_vagrant.sh.
Eu poderia ter colocado toda a instalação no Vagrantfile. Deixei para rodar o script dentro da VM de propósito: assim você sabe o que foi instalado e pode acrescentar o que quiser.
No fim do vagrant up, o Vagrant troca a chave SSH insegura padrão por uma chave gerada para a sua VM. Espere ele terminar antes do próximo passo.
3Conectar o VS Code por SSH
Peça ao Vagrant os dados de conexão:
vagrant ssh-config

No VS Code, instale a extensão Remote SSH, clique no ícone dela, escolha Open SSH Configuration File e cole esses dados no arquivo. Troque o nome do host para default. Depois conecte ao host default.
Na primeira conexão o VS Code instala o VS Code Server dentro da VM. Quando terminar, a barra mostra SSH: default. Use Open Folder na pasta /home/vagrant e confie no diretório. O terminal que você abrir daí em diante é o da VM: um ls lista os arquivos dela.
4Instalar Docker, Node e AWS CLI
Entre na pasta bia_vagrant dentro da VM, dê permissão de execução ao script e rode. Na minha aula o chmod do Vagrantfile não pegou, então dei a permissão à mão, com sudo:
sudo chmod +x prepara_linux_vagrant.sh
./prepara_linux_vagrant.sh
Ele atualiza os pacotes, instala o Docker, habilita o serviço para subir sozinho depois de um reboot, instala o Docker Compose, o Node, o NPM e o AWS CLI, e ajusta as permissões do Docker. Se preferir, rode os comandos do script um a um para ver cada etapa.
O download foi muito lento na minha máquina, principalmente na atualização de pacotes, parecia baixar a 2 KB/s. Espere: acontece uma vez só, e a VM fica pronta para reutilizar.
Confirme:
docker --version
docker-compose --version
5Rodar a aplicação de exemplo
Saia da pasta do bia_vagrant e, na raiz, clone o projeto da aplicação, a BIA, que é Node com React e PostgreSQL (henrylle/bia). Entre na pasta dela e suba os containers:
docker-compose up -d
O Docker baixa a imagem do PostgreSQL (cerca de 300 a 400 MB) e a do Node, e gera a imagem da aplicação pelo Dockerfile do projeto. A lentidão da rede ficou só na atualização dos pacotes: aqui tudo baixou rápido.
Quando a aplicação sobe, o VS Code avisa que ela está rodando na porta 3001 e faz o encaminhamento sozinho: na aba Ports aparece a 3001, com origem Auto Forwarded. Abra localhost:3001 no navegador do Windows. A aplicação roda na VM, mas você acessa como se fosse local.

A API ainda dá erro, porque o banco não tem as tabelas. No terminal da VM, dentro da pasta do projeto, instale as dependências e rode a migration:
npm install
npx sequelize db:migrate
Com a estrutura do banco criada, atualize a página e adicione uma tarefa na tela: ela é salva e permanece.
6Destruir o ambiente
Quando terminar, no terminal do Windows, na pasta do projeto:
vagrant destroy
O Vagrant pergunta se você tem certeza. Confirmando, ele desliga e remove a VM, e localhost:3001 deixa de responder. É por isso que serve para montar laboratórios do zero, isolados, sem comprometer nada na sua máquina.
Checklist
- Instale VirtualBox, Vagrant, Git e VS Code, e reinicie se pedirem.
- Rode
vagrant -hpara confirmar o Vagrant. - Clone o bia_vagrant e rode
vagrant upna pasta com oVagrantfile. - Rode
vagrant ssh-confige cole os dados no arquivo de configuração do Remote SSH. - Conecte ao host
defaulte abra a pasta/home/vagrant. - Rode o
prepara_linux_vagrant.she confiradocker --version. - Clone a BIA, rode
docker-compose up -de abralocalhost:3001. - Rode
npm installenpx sequelize db:migrate, e salve uma tarefa. - Quando acabar, rode
vagrant destroy.
Com a VM no ar você trabalha com Docker e Node sem instalá-los no Windows, e pode jogar o ambiente fora quando terminar.
O que os alunos dizem

“Eu queria voltar para a área técnica, mas aprender AWS sozinho só me deixava frustrado.”
William Santos, Tech Lead
Ver depoimento
“Eu sempre fugi da AWS. Achava complicado, distante da minha rotina de dev. Mas só a primeira aula do Bootcamp já mudou tudo: usei o conteúdo para resolver um problema real de um cliente e fui contratado por causa disso.”
André Scherrer, Engenheiro de Software
Ver depoimento
“Só quando coloquei a mão na massa com a Formação AWS é que avancei de verdade. Essa prática me levou ao próximo nível”
Caio, Desenvolvedor (Dev)
Ver depoimento
Formação AWS
Aprenda AWS e IA na prática, com projeto real e acompanhamento. Converse com o time sobre a Formação AWS.
Agende uma conversaPrefere assistir?
A aula completa (32 min) está no canal Domine AWS. O vídeo toca aqui mesmo.

