# Elastic Beanstalk com Docker: sua primeira aplicação no ar

> Suba uma aplicação em container no AWS Elastic Beanstalk usando o docker-compose.yml e um arquivo zip, sem criar a EC2 nem configurar o deploy na mão.

- Autor: Henrylle Maia, consultor AWS
- Publicado em: 2026-10-15
- Assuntos: Containers
- URL: https://pages.formacaoaws.com.br/blog/elastic-beanstalk-com-docker/
- Aula de origem: "Criando e rodando sua primeira app com Elastic Beanstalk e Docker" (https://www.youtube.com/watch?v=T53kSQE6ICw)

Dá para colocar uma aplicação em container no ar na AWS sem criar a instância EC2 nem montar o deploy. Com o AWS Elastic Beanstalk você sobe um arquivo zip com o `docker-compose.yml` e ele lança a máquina, faz o build da imagem e entrega uma URL pública. Este texto mostra o caminho completo, do clone do projeto ao deploy.

Gravei a aula em junho de 2022, e o console da AWS e as plataformas do Elastic Beanstalk mudam com o tempo. As versões e as telas que aparecem aqui são as daquele dia: confira as plataformas Docker atuais na [documentação oficial](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker.html).

## O que o Elastic Beanstalk faz por você

O Elastic Beanstalk é o serviço da AWS que roda e gerencia aplicações. Ele conversa com vários outros serviços para automatizar o que você faria na mão.

Quando você sobe a aplicação, ela vai para a área **Application Versions**, e por baixo dos panos a versão fica guardada no S3. Em seguida ele dispara o deploy para uma instância EC2, e é ele mesmo quem lança essa instância. Também entrega um endpoint válido para a aplicação e deixa você controlar quantas instâncias ficam disponíveis durante o deploy.

**Fluxo:** Código (zip com o docker-compose.yml) → Application Versions (versão guardada no S3) → Elastic Beanstalk (cria e gerencia o ambiente) → Instância EC2 (faz o build e roda o container) → Endpoint (URL pública da aplicação)

O serviço em si não tem custo. Você paga só pelos recursos que ele usa, no exemplo o S3 com a versão da aplicação e a instância onde ela roda.

## Passo 1: baixar o projeto e ajustar o docker-compose.yml

Usei a aplicação da BIA, em Node com React, que já roda em container. O projeto é público no GitHub. Clone com HTTPS e abra no VS Code:

```bash
git clone <url-https-do-projeto>
code bia
```

O Elastic Beanstalk consegue ler vários arquivos de configuração, e um deles é o Docker Compose. Por isso a adaptação é no `docker-compose.yml`. Eu queria rodar só a aplicação web, então:

- **Tirei o banco.** O arquivo tinha dois serviços, `server` e `database`. Deixei só o `server`.
- **Tirei o `links`**, que apontava para o banco e não funcionaria sem ele.
- **Troquei a porta.** Localmente a aplicação expõe a 3001 (`3001:8080`). Na AWS ela precisa sair na porta 80 (`80:8080`), que é a que vou abrir para o mundo.

![O docker-compose.yml ajustado: só o serviço server, com build: . e a porta 80:8080 (as variáveis DB_ continuam no arquivo)](https://pages.formacaoaws.com.br/blog/assets/posts/elastic-beanstalk-com-docker/docker-compose.webp)

Com isso o Elastic Beanstalk lê o `server`, vê que ele tem um `build` no contexto atual, procura o Dockerfile e roda o projeto.

## Passo 2: gerar o zip

Selecione todos os arquivos do projeto, clique com o botão direito e comprima em formato zip. Dei o nome `bia-youtube.zip`.

Os arquivos precisam estar na **raiz** do zip, não dentro de uma pasta. É na raiz que o Elastic Beanstalk procura o `docker-compose.yml`.

## Passo 3: criar a aplicação

No console, pesquise por Elastic Beanstalk e crie uma aplicação.

- **Nome:** `bia-youtube`. As tags de aplicação são opcionais, e eu não usei.
- **Plataforma:** Docker. Na aula, a branch era "Docker running on 64bit Amazon Linux 2" e a versão da plataforma, a 3.4.16, a recomendada. Cada atualização de versão traz mais recursos: quando a AWS lança uma família de instâncias nova, em geral você precisa atualizar a plataforma para ela aparecer na lista do Elastic Beanstalk.
- **Código da aplicação:** deixei o exemplo, porque o upload do zip vem depois.

![A seção Platform do Elastic Beanstalk: plataforma Docker, branch Docker running on 64bit Amazon Linux 2 e versão 3.4.16 (Recomendada)](https://pages.formacaoaws.com.br/blog/assets/posts/elastic-beanstalk-com-docker/plataforma-docker.webp)

Clique em **Configure more options** e escolha o preset **Single Instance**, uma aplicação só com uma instância, para não trazer complexidade. Software, X-Ray, logs e propriedades do ambiente ficam no padrão. Em **Instância**, mantive o padrão e mexi só no security group.

## Passo 4: liberar a porta 80 no security group

Quero a instância acessível para o mundo na porta 80. Na aba de EC2, crie um security group (o meu chama `BIA Web`) com uma regra de entrada HTTP, porta 80, origem Anywhere. No meu já havia também uma regra de SSH, só para o meu IP, para o caso de eu precisar me conectar. Como não vou me conectar, a porta 80 bastaria.

Volte ao Elastic Beanstalk, escolha esse security group e salve. Depois configure:

- **Rede:** a configuração padrão, com **IP público** habilitado para a instância. Em zona de disponibilidade posso escolher A, B ou C, e ele usa a que estiver disponível.
- **Banco:** não configurei.
- **Capacidade:** só a `t2.micro`, que na aula estava na camada gratuita.

Salve e crie a aplicação. Ele também cria um ambiente para ela, o `bia-youtube-env`, e leva alguns minutos. Dentro de uma aplicação cabem vários ambientes, e você cria os que precisar.

Quando o ambiente ficou com status Ok, abri a URL que ele liberou: carregou a página de exemplo do Elastic Beanstalk, a **Sample Application** que escolhi no passo 3.

![O ambiente bia-youtube-env com Health Ok (ícone verde) e a versão em execução ainda Sample Application](https://pages.formacaoaws.com.br/blog/assets/posts/elastic-beanstalk-com-docker/ambiente-ok.webp)

## Passo 5: subir o zip e fazer o deploy

Com o ambiente verde e a página de exemplo no ar, clique em **Upload and deploy**, escolha o zip e coloque o **version label** `V1`. Clique em **Deploy**.

O Elastic Beanstalk envia o zip para o ambiente, lê o `docker-compose.yml`, faz o build na própria instância e manda rodar. Leva de um a dois minutos. Na aula o processo todo, com os eventos, levou 4 minutos.

Sem eu fazer nada, ele criou a instância EC2 e também um **Elastic IP** para ela. Com uma instância só, se ela morrer e uma nova for lançada, o Elastic Beanstalk associa o mesmo IP à nova. O IP do ambiente não muda.

Em **Application Versions** aparece a versão em execução e a que está sendo implantada. Se precisar voltar, escolha a versão anterior e mande fazer o deploy dela. Quando o evento de deploy na instância conclui com sucesso e o ambiente fica verde, abra a URL que ele forneceu.

![A aplicação da BIA no endereço do Elastic Beanstalk: título BIA 2022, botão Adicionar e a mensagem Nenhuma tarefa nesse momento](https://pages.formacaoaws.com.br/blog/assets/posts/elastic-beanstalk-com-docker/app-rodando.webp)

## Passo 6: encerrar o ambiente

Terminada a prática, termine o ambiente. Sem ele, você fica livre de qualquer custo desse processo. Hoje isso pesa mais do que na gravação: desde 1º de fevereiro de 2024 a AWS cobra por todo endereço IPv4 público, inclusive o da instância e o Elastic IP que o ambiente usa.

O banco ficou de fora: aqui só roda a aplicação web. Se quiser levar adiante, o próximo passo é criar um banco no RDS e conectar à aplicação. Outro desafio é mudar algum arquivo do código, gerar um novo zip e fazer o deploy para ver a alteração no ambiente.

## Checklist

- Projeto clonado e `docker-compose.yml` só com o serviço da aplicação web, sem `links` para o banco.
- Porta publicada como 80 no `docker-compose.yml`.
- Zip com os arquivos na raiz.
- Aplicação criada com a plataforma Docker e o preset Single Instance.
- Security group liberando HTTP na porta 80, com SSH só para o seu IP, e IP público na instância.
- Zip enviado em Upload and deploy, com um version label.
- URL do ambiente aberta com a aplicação rodando.
- Ambiente terminado ao final do teste.
