Formação AWS

← Todos os artigos

Docker e Node no Windows com Vagrant e VS Code remoto

ContainersPor Henrylle Maia · 15 out 2026 · 7 min de leitura

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:

bash
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:

bash
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.

Vagrantfile com três linhas forwarded_port: 3001, 8080 e 5433 da VM para o host
Vagrantfile com três linhas forwarded_port: 3001, 8080 e 5433 da VM para o host

O arquivo faz três coisas que importam:

  1. Escolhe a box ubuntu/focal64.
  2. 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).
  3. 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:

bash
vagrant ssh-config
Saída do vagrant ssh-config com HostName 127.0.0.1, User vagrant, Port 2222 e o IdentityFile da chave privada
Saída do vagrant ssh-config com HostName 127.0.0.1, User vagrant, Port 2222 e o IdentityFile da chave privada

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:

bash
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:

bash
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:

bash
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.

Aplicação BIA 2022 aberta em localhost:3001 no navegador, com a mensagem Nenhuma tarefa por aqui
Aplicação BIA 2022 aberta em localhost:3001 no navegador, com a mensagem Nenhuma tarefa por aqui

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:

bash
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.

Da VM criada pelo Vagrant ao projeto rodando no navegador do WindowsVagrantfiledefine a VM Ubuntuvagrant upcria a VM no VirtualBoxVS Code Remote SSHconecta na VMScript de preparoDocker, Node, AWS CLIdocker-composeaplicação na porta 3001
Da VM criada pelo Vagrant ao projeto rodando no navegador do Windows

6Destruir o ambiente

Quando terminar, no terminal do Windows, na pasta do projeto:

bash
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 -h para confirmar o Vagrant.
  • Clone o bia_vagrant e rode vagrant up na pasta com o Vagrantfile.
  • Rode vagrant ssh-config e cole os dados no arquivo de configuração do Remote SSH.
  • Conecte ao host default e abra a pasta /home/vagrant.
  • Rode o prepara_linux_vagrant.sh e confira docker --version.
  • Clone a BIA, rode docker-compose up -d e abra localhost:3001.
  • Rode npm install e npx 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 conversa

Prefere assistir?

A aula completa (32 min) está no canal Domine AWS. O vídeo toca aqui mesmo.

Leia também

Compartilhe este post