Docker na AWS com VS Code Remote SSH, sem instalar Docker local
Instalar Docker no Windows, ou numa máquina com limitação de virtualização, trava muita gente antes de começar a estudar. A saída que mostro aqui tira o Docker da sua máquina: você sobe uma EC2 Ubuntu já com tudo instalado e conecta o VS Code nela por SSH. Você edita e roda pelo VS Code, e os containers rodam na AWS.
Gravei essa aula em fevereiro de 2022, a partir de uma dificuldade real: no meu evento de Docker, parte do pessoal se perdia na instalação, principalmente no Windows.
Por que rodar o ambiente na AWS
Com o ambiente na AWS, sua máquina precisa só do VS Code e de uma extensão de SSH. Eu vejo três ganhos:
- Sem instalar Docker nem montar virtualização no seu computador.
- Velocidade. Deploy ou qualquer execução que dependa de rede com a nuvem já acontece dentro da AWS.
- Portabilidade. Em outra máquina (um Mac, por exemplo), basta ter o VS Code e refazer a conexão.
O VS Code entra só para dar uma edição visual. Se preferir, você usa só o terminal.
O que você precisa antes
- Uma conta AWS. Eu trabalhei na região da Virgínia.
- O VS Code instalado.
- O projeto
bia_setup_devops_aws, no meu GitHub. Ele tem o scriptuserdata, que faz o setup da instância. A BIA é a aplicação do meu evento: Node com React e PostgreSQL, em containers. - Um par de chaves e um security group, que criamos no próximo passo.
Clone o repositório e abra no VS Code:
git clone https://github.com/henrylle/bia_setup_devops_aws.git
code bia_setup_devops_aws
1Criar o par de chaves e o security group
No console do EC2, em Create key pair, dê um nome (usei bia), tipo RSA e formato .pem. Guarde o arquivo com muita segurança numa pasta de fácil acesso: a AWS não deixa recuperar a chave depois.
Depois crie o security group:
- Nome
bia-ssh, na VPC padrão. - Regra de entrada: tipo SSH, origem Meu IP.
Com a origem Meu IP, só o seu endereço alcança a porta 22.
2Lançar a EC2 com o script no user data
Eu preparei o script para Ubuntu, então lancei uma Ubuntu 20.04 (era a versão da época), tipo t3.micro. Na tela de detalhes da instância, no fim, está o campo User data: é um script que roda no boot para configurar a instância. Escolha o arquivo userdata do projeto.
O resto segue o padrão: armazenamento padrão, a tag Name (usei bia_setup_devops_aws), o security group bia-ssh e a chave bia.
O script instala e configura:
- Docker, iniciado e habilitado para subir junto com a instância;
- Docker Compose;
- Node e a atualização do NPM;
- AWS CLI;
- permissão para usar o Docker sem root.
Nesse ambiente a execução foi rápida, porque roda dentro da AWS.
3Ou rodar o mesmo script à mão
Se o user data é novo para você e passa insegurança, dá para fazer manualmente. Lancei uma segunda instância igual, sem user data, com o nome bia_setup_devops_aws_manual.
Em Connect, aba SSH client, copie o comando de exemplo e entre na instância pelo terminal, na pasta onde está a chave. Depois, dentro dela:
git clone https://github.com/henrylle/bia_setup_devops_aws.git
cd bia_setup_devops_aws
chmod +x userdata
./userdata
Ao terminar, um docker run hello-world confirmou o Docker funcionando. Fiquei com dois ambientes separados, um automático e um manual, para mostrar os dois caminhos.
4Conectar o VS Code por Remote SSH
No VS Code, instale a extensão Remote - SSH. Ao instalar, aparece um botão Open a remote window no canto inferior esquerdo. Nele, escolha Open SSH Configuration File e edite o arquivo de configuração. Cada instância ganha um bloco:

Em cada bloco, o HostName é o Public DNS da instância (o console mostra em Connect, aba SSH client), o User é ubuntu e o IdentityFile aponta para o .pem. Salve e conecte no host.
Na primeira conexão, o VS Code pergunta pelo fingerprint e instala um VS Code Server na instância, e depois pede a pasta a abrir e se você confia nela. Confirme. A partir daí o terminal do VS Code é o da instância, e você navega nos arquivos dela como se estivesse local.
5Rodar o projeto na AWS e acessar no localhost
Dentro da instância, clone o projeto da BIA, entre na pasta e suba os containers:
git clone https://github.com/henrylle/bia.git
cd bia
docker-compose up -d
O Compose baixa as imagens e executa o Dockerfile: baixa o Node, faz o npm install e o build do React.
Quando termina, o VS Code avisa que a aplicação roda na porta 3001 e já faz o encaminhamento de porta. Na aba Ports aparece a 3001 com endereço localhost:3001.

Abri localhost:3001 no navegador e a aplicação apareceu, com a computação toda na AWS.
Falta criar a estrutura do banco. Entre no container do servidor, rode a migration e recarregue a página:
docker-compose exec server bash
npx sequelize db:migrate
Com a migration executada, cadastrei uma tarefa de teste e ela foi salva.
6Parar a instância ao terminar
Antes, um aviso: eu não recomendo manter duas conexões SSH ao mesmo tempo, como fiz na aula. Uma delas perdeu a conexão e eu terminei a instância automática, ficando só com a manual.
Terminou o dia, pare a instância (Instance state, Stop instance). Não é terminar: parar mantém a instância, terminar apaga. Parada, você deixa de pagar pela computação. Na aula, citei menos de dois centavos de dólar por hora para uma instância desse porte; é o valor de 2022, então confira na página de preços do EC2.
Para voltar no dia seguinte:
- Inicie a instância no console. Ela muda de IP público.
- Copie o novo Public DNS e troque o
HostNameno arquivo de configuração do SSH. - Conecte, abra a pasta da BIA e rode o
docker-compose up -d. - Na aba Ports, refaça o encaminhamento da 3001. Ao ligar de novo, ele não ficou automático.
Cadastrei outra tarefa depois do stop e start e a aplicação continuou funcionando.

A versão de 2023: Amazon Linux 2023 e Git Bash
Em 20 de outubro de 2023 refiz a aula, no vídeo Docker na AWS com VS Code, com a mesma ideia e duas trocas. A AMI agora é Amazon Linux 2023, então o User no arquivo de configuração do SSH é ec2-user, não ubuntu. E o script do user data agora vem do projeto da BIA: fica na pasta scripts do repositório henrylle/bia, no arquivo user_data_ec2_zona_a.sh.
No Windows, antes de configurar o VS Code, teste a conexão com ssh no terminal. Para isso você precisa do Git Bash instalado. Assim você tem certeza de que a chave e o caminho dela funcionam.
O que prova que o ambiente é um só: com a BIA no ar, rodei docker compose down na EC2 e o localhost:3001 parou de responder junto com o endereço público da instância. O localhost é só o encaminhamento de porta do VS Code para a máquina remota.
Para abrir o endereço público, eu liberei a porta 3001 no security group para qualquer origem, só para o teste.
Dois limites desse modelo, que eu mesmo aponto na aula: a chave .pem precisa existir e ser guardada, e a regra presa ao seu IP precisa ser trocada quando o IP mudar.
Checklist
- Crie o par de chaves RSA em .pem e guarde o arquivo em lugar seguro.
- Crie o security group com SSH liberado só para o seu IP.
- Lance uma EC2 Ubuntu t3.micro com o script
userdatano campo User data. - Instale a extensão Remote - SSH e configure
HostName,User ubuntueIdentityFile. - Rode
docker-compose up -de a migration, e abralocalhost:3001. - Pare a instância (não termine) ao fim do trabalho.
- Ao religar, troque o
HostNamepelo novo Public DNS e refaça o encaminhamento da porta. - Confira a Free Tier e os preços atuais nas páginas oficiais.
Com esse ambiente, a dificuldade de instalar Docker deixa de ser o que impede você de praticar: você sobe, trabalha e para a instância quando terminar.
O que os alunos dizem

“Comecei a estudar Cloud em 2023 e entrei na Imersão AWS para aprofundar minha prática.”
Luiz Claudio, Arquiteto de Soluções
Ver depoimento
“Hoje recebo oportunidades 100% remoto e finalmente me sinto recolocada no mercado.”
Patrícia Prado, Desenvolvedora Back-end
Ver depoimento
“A Formação AWS me mostrou o caminho, me deu prática de verdade e mudou minha vida.”
Rodrigo Raspinola, Analista Cloud / SRE
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 (33 min) está no canal Domine AWS. O vídeo toca aqui mesmo.

