# Docker na AWS com VS Code Remote SSH, sem instalar Docker local

> Suba uma EC2 Ubuntu com Docker por user data e conecte o VS Code por Remote SSH para rodar containers na AWS, sem instalar Docker na sua máquina.

- Autor: Henrylle Maia, consultor AWS
- Publicado em: 2026-10-15
- Assuntos: Containers, Custos
- URL: https://pages.formacaoaws.com.br/blog/ambiente-docker-na-aws-com-vs-code-remote-ssh/
- Aula de origem: "Setup de um ambiente DevOps com Docker e VS Code na AWS a custo ZERO" (https://www.youtube.com/watch?v=eesWlt2rN5U)

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.

> **Importante:** o título do vídeo diz "custo zero", e isso dependia da Free Tier de 2022. Hoje as regras são outras, e desde 1º de fevereiro de 2024 a AWS cobra todo IPv4 público. Veja [Nova Free Tier da AWS](https://pages.formacaoaws.com.br/blog/nova-free-tier-da-aws/) e confira a [página oficial da Free Tier](https://aws.amazon.com/free/) antes de contar com custo zero. O que vale em qualquer época é o que a aula faz: usar a instância só pelo tempo de trabalho e parar no fim.

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

![Mac, Linux e Windows, cada um com VS Code, se conectam ao mesmo setup na AWS, em vez de instalar Docker em cada máquina](https://pages.formacaoaws.com.br/blog/assets/posts/ambiente-docker-na-aws-com-vs-code-remote-ssh/quem-usa-vs-code-e-aws-setup.svg)

## 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 script `userdata`, 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:

```bash
git clone https://github.com/henrylle/bia_setup_devops_aws.git
code bia_setup_devops_aws
```

## Passo 1: criar 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:

1. Nome `bia-ssh`, na VPC padrão.
2. Regra de entrada: tipo **SSH**, origem **Meu IP**.

Com a origem **Meu IP**, só o seu endereço alcança a porta 22.

## Passo 2: lanç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.

## Passo 3: ou 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:

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

## Passo 4: conectar 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:

![Arquivo de configuração do SSH com dois hosts, bia-aws-automatico e bia-aws-manual, cada um com User ubuntu, Port 22 e a chave bia.pem; os endereços foram cobertos](https://pages.formacaoaws.com.br/blog/assets/posts/ambiente-docker-na-aws-com-vs-code-remote-ssh/ssh-config-dois-hosts.webp)

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.

## Passo 5: rodar o projeto na AWS e acessar no localhost

Dentro da instância, clone o projeto da BIA, entre na pasta e suba os containers:

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

![Aba Ports do VS Code conectado à instância, com a porta 3001 encaminhada para localhost:3001](https://pages.formacaoaws.com.br/blog/assets/posts/ambiente-docker-na-aws-com-vs-code-remote-ssh/portas-3001-encaminhada.webp)

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:

```bash
docker-compose exec server bash
npx sequelize db:migrate
```

Com a migration executada, cadastrei uma tarefa de teste e ela foi salva.

## Passo 6: parar 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](https://aws.amazon.com/ec2/pricing/on-demand/).

Para voltar no dia seguinte:

1. Inicie a instância no console. Ela muda de IP público.
2. Copie o novo **Public DNS** e troque o `HostName` no arquivo de configuração do SSH.
3. Conecte, abra a pasta da BIA e rode o `docker-compose up -d`.
4. 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 BIA em localhost:3001 com as duas tarefas salvas: a de antes e a de depois do stop e start da instância](https://pages.formacaoaws.com.br/blog/assets/posts/ambiente-docker-na-aws-com-vs-code-remote-ssh/tarefas-salvas-apos-stop-start.webp)

## 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](https://www.youtube.com/watch?v=R0NxouR9S9A), 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`](https://github.com/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.

> **Importante:** não deixe a 3001 aberta para a internet. Restrinja a regra de entrada à origem **Meu IP**, como a porta 22. Veja [como funcionam os security groups](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-security-groups.html).

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.

**Fluxo:** Chave e security group (SSH só do seu IP) → EC2 Ubuntu (script no user data) → VS Code (extensão Remote SSH) → Docker Compose (porta 3001 encaminhada) → Parar a instância (para de pagar a computação)

## 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 `userdata` no campo User data.
- Instale a extensão Remote - SSH e configure `HostName`, `User ubuntu` e `IdentityFile`.
- Rode `docker-compose up -d` e a migration, e abra `localhost:3001`.
- Pare a instância (não termine) ao fim do trabalho.
- Ao religar, troque o `HostName` pelo 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.
