

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# QuickStart: Implante um aplicativo Docker Compose no Elastic Beanstalk
<a name="docker-compose-quickstart"></a>

Este QuickStart tutorial mostra o processo de criação de um aplicativo Docker Compose com vários contêineres e sua implantação em um ambiente. AWS Elastic Beanstalk Você criará uma aplicação Web Flask com um proxy reverso nginx para demonstrar como o Docker Compose simplifica a orquestração de vários contêineres.

**Não é para uso em produção**  
Os exemplos são destinados apenas para demonstração. Não use aplicações de exemplo na produção.

**Topics**
+ [Sua AWS conta](#docker-compose-quickstart-aws-account)
+ [Pré-requisitos](#docker-compose-quickstart-prereq)
+ [Etapa 1: Crie uma aplicação Docker Compose](#docker-compose-quickstart-create-app)
+ [Etapa 2: executar a aplicação localmente](#docker-compose-quickstart-run-local)
+ [Etapa 3: implantar a aplicação do Docker Composer com a EB CLI](#docker-compose-quickstart-deploy)
+ [Etapa 4: testar a aplicação no Elastic Beanstalk](#docker-compose-quickstart-run-eb-ap)
+ [Etapa 5: limpar](#docker-compose-quickstart-cleanup)
+ [AWS recursos para seu aplicativo](#docker-compose-quickstart-eb-resources)
+ [Próximas etapas](#docker-compose-quickstart-next-steps)
+ [Implantar com o console do Elastic Beanstalk](#docker-compose-quickstart-console)

## Sua AWS conta
<a name="docker-compose-quickstart-aws-account"></a>

Se você ainda não é AWS cliente, precisa criar uma AWS conta. A inscrição permite que você acesse o Elastic Beanstalk AWS e outros serviços de que você precisa.

Se você já tem uma AWS conta, você pode passar para[Pré-requisitos](#docker-compose-quickstart-prereq).

### Crie uma AWS conta
<a name="docker-compose-quickstart-aws-account-procedure"></a>

#### Inscreva-se para um Conta da AWS
<a name="sign-up-for-aws"></a>

Se você não tiver um Conta da AWS, conclua as etapas a seguir para criar um.

**Para se inscrever em um Conta da AWS**

1. Abra a [https://portal.aws.amazon.com/billing/inscrição.](https://portal.aws.amazon.com/billing/signup)

1. Siga as instruções online.

   Parte do procedimento de inscrição envolve receber uma chamada telefônica ou uma mensagem de texto e inserir um código de verificação pelo teclado do telefone.

   Quando você se inscreve em um Conta da AWS, um *Usuário raiz da conta da AWS*é criado. O usuário-raiz tem acesso a todos os Serviços da AWS e recursos na conta. Como prática recomendada de segurança, atribua o acesso administrativo a um usuário e use somente o usuário-raiz para executar [tarefas que exigem acesso de usuário-raiz](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks).

AWS envia um e-mail de confirmação após a conclusão do processo de inscrição. A qualquer momento, você pode visualizar a atividade atual da sua conta e gerenciar sua conta acessando [https://aws.amazon.com/e](https://aws.amazon.com/) escolhendo **Minha conta**.

#### Criar um usuário com acesso administrativo
<a name="create-an-admin"></a>

Depois de se inscrever em um Conta da AWS, proteja seu Usuário raiz da conta da AWS Centro de Identidade do AWS IAM, habilite e crie um usuário administrativo para que você não use o usuário root nas tarefas diárias.

**Proteja seu Usuário raiz da conta da AWS**

1.  Faça login [Console de gerenciamento da AWS](https://console.aws.amazon.com/)como proprietário da conta escolhendo **Usuário raiz** e inserindo seu endereço de Conta da AWS e-mail. Na próxima página, insira a senha.

   Para obter ajuda ao fazer login usando o usuário-raiz, consulte [Fazer login como usuário-raiz](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial) no *Guia do usuário do Início de Sessão da AWS *.

1. Habilite a autenticação multifator (MFA) para o usuário-raiz.

   Para obter instruções, consulte [Habilitar um dispositivo de MFA virtual para seu usuário Conta da AWS raiz (console) no Guia](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html) do *usuário do IAM*.

**Criar um usuário com acesso administrativo**

1. Habilita o Centro de Identidade do IAM.

   Para obter instruções, consulte [Habilitar o Centro de Identidade do AWS IAM](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html) no *Guia do usuário do Centro de Identidade do AWS IAM *.

1. No Centro de Identidade do IAM, conceda o acesso administrativo a um usuário.

   Para ver um tutorial sobre como usar o Diretório do Centro de Identidade do IAM como fonte de identidade, consulte [Configurar o acesso do usuário com o padrão Diretório do Centro de Identidade do IAM](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html) no *Guia Centro de Identidade do AWS IAM do usuário*.

**Iniciar sessão como o usuário com acesso administrativo**
+ Para fazer login com o seu usuário do Centro de Identidade do IAM, use o URL de login enviado ao seu endereço de e-mail quando o usuário do Centro de Identidade do IAM foi criado.

  Para obter ajuda para fazer login usando um usuário do IAM Identity Center, consulte Como [fazer login no portal de AWS acesso](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html) no *Guia Início de Sessão da AWS do usuário*.

**Atribuir acesso a usuários adicionais**

1. No Centro de Identidade do IAM, crie um conjunto de permissões que siga as práticas recomendadas de aplicação de permissões com privilégio mínimo.

   Para obter instruções, consulte [Criar um conjunto de permissões](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html) no *Guia do usuário do Centro de Identidade do AWS IAM *.

1. Atribua usuários a um grupo e, em seguida, atribua o acesso de logon único ao grupo.

   Para obter instruções, consulte [Adicionar grupos](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html) no *Guia do usuário do Centro de Identidade do AWS IAM *.

## Pré-requisitos
<a name="docker-compose-quickstart-prereq"></a>

Para seguir os procedimentos neste manual, você precisa de um terminal de linha de comando ou de um shell para executar os comandos. Nas listagens, os comandos são mostrados precedidos por um símbolo de prompt ($) e pelo nome do diretório atual, quando apropriado.

```
~/eb-project$ this is a command
this is output
```

No Linux e no macOS, você pode usar seu gerenciador de pacotes e de shell preferido. No Windows, você pode [instalar o subsistema Windows para Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10) para obter uma versão do Ubuntu e Bash integrada ao Windows.

### EB CLI
<a name="docker-compose-quickstart-prereq.ebcli"></a>

Este tutorial também usa a Interface de Linhas de Comando do Elastic Beanstalk (CLI do EB). Para obter detalhes sobre a instalação e configuração da CLI do EB, consulte [Instalar a EB CLI com script de configuração (recomendado)](eb-cli3.md#eb-cli3-install) e [Configurar a EB CLI](eb-cli3-configuration.md).

### Docker e Docker Compose
<a name="docker-compose-quickstart-prereq.runtime"></a>

Para seguir este tutorial, você precisará de uma instalação local funcional do Docker e do Docker Compose. Para obter mais informações, consulte [Obter o Docker](https://docs.docker.com/compose/install/) e [Instalar o Docker Compose](https://docs.docker.com/get-docker/) no site de documentação do Docker.

Verifique se o Docker e o Docker Compose estão instalados e em execução executando os seguintes comandos.

```
~$ docker info
~$ docker compose version
```

## Etapa 1: Crie uma aplicação Docker Compose
<a name="docker-compose-quickstart-create-app"></a>

Neste exemplo, criamos um aplicação de vários contêineres usando o Docker Compose que consiste em um aplicação web Flask e um proxy reverso nginx. Isso demonstra como o Docker Compose simplifica a orquestração de vários contêineres que funcionam juntos.

A aplicação inclui uma configuração de monitoramento de integridade que permite que o Elastic Beanstalk colete métricas detalhadas da aplicação a partir do seu proxy nginx.

A aplicação tem a seguinte estrutura:

```
~/eb-docker-compose-flask/
|-- docker-compose.yml
|-- web/
|   |-- Dockerfile
|   |-- app.py
|   `-- requirements.txt
|-- proxy/
|   |-- Dockerfile
|   `-- nginx.conf
`-- .platform/
    `-- hooks/
        `-- postdeploy/
            `-- 01_setup_healthd_permissions.sh
```

Crie a estrutura de diretórios e adicione os seguintes arquivos:

Primeiro, crie o arquivo principal `docker-compose.yml` que define os serviços e seus relacionamentos.

**Example `~/eb-docker-compose-flask/docker-compose.yml`**  

```
services:
  web:
    build: ./web
    expose:
      - "5000"

  nginx-proxy:
    build: ./proxy
    ports:
      - "80:80"
    volumes:
      - "/var/log/nginx:/var/log/nginx"
    depends_on:
      - web
```

Crie a aplicação web Flask no diretório `web`. Adicione o seguinte conteúdo ao seu arquivo `app.py`.

**Example `~/eb-docker-compose-flask/web/app.py`**  

```
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
    return 'Hello Elastic Beanstalk! This is a Docker Compose application'
```

Adicione o seguinte conteúdo ao seu serviço Web `Dockerfile`.

**Example `~/eb-docker-compose-flask/web/Dockerfile`**  

```
FROM public.ecr.aws/docker/library/python:3.12
COPY . /app
WORKDIR /app
RUN pip install Flask==3.1.1
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0"]
```

Crie o proxy reverso nginx no diretório `proxy`. Adicione o seguinte conteúdo ao seu arquivo `nginx.conf`.

Essa configuração inclui a configuração de monitoramento da integridade, que permite ao Elastic Beanstalk coletar métricas detalhadas da aplicação. Para obter mais informações sobre como personalizar os formatos dos logs de monitoramento da integridade, consulte [Formato de log de integridade aprimorado](health-enhanced-serverlogs.md).

**Example `~/eb-docker-compose-flask/proxy/nginx.conf`**  

```
events {
    worker_connections 1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    map $http_upgrade $connection_upgrade {
        default       "upgrade";
    }

    # Health monitoring log format for Elastic Beanstalk
    log_format healthd '$msec"$uri"$status"$request_time"$upstream_response_time"$http_x_forwarded_for';
    
    upstream flask_app {
        server web:5000;
    }

    server {
        listen 80 default_server;
        root /usr/share/nginx/html;

        # Standard access log
        access_log /var/log/nginx/access.log;
        
        # Health monitoring log for Elastic Beanstalk
        if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") {
            set $year $1;
            set $month $2;
            set $day $3;
            set $hour $4;
        }
        access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd;
        
        location / {
            proxy_pass http://flask_app;
            proxy_http_version    1.1;

            proxy_set_header    Connection             $connection_upgrade;
            proxy_set_header    Upgrade                $http_upgrade;
            proxy_set_header    Host                   $host;
            proxy_set_header    X-Real-IP              $remote_addr;
            proxy_set_header    X-Forwarded-For        $proxy_add_x_forwarded_for;
        }
    }
}
```

Adicione o seguinte conteúdo ao seu serviço proxy `Dockerfile`.

**Example `~/eb-docker-compose-flask/proxy/Dockerfile`**  

```
FROM public.ecr.aws/nginx/nginx:alpine
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
```

Por fim, crie um script de gancho de plataforma para configurar os diretórios de log e as permissões necessárias para o monitoramento da integridade. Hooks de plataforma permitem que você execute scripts personalizados durante o processo de implantação. Para obter mais informações sobre hooks de plataforma, consulte [Hooks de plataforma](platforms-linux-extend.hooks.md).

**Example `~/eb-docker-compose-flask/.platform/hooks/postdeploy/01_setup_healthd_permissions.sh`**  

```
#!/bin/bash
set -ex

NGINX_CONTAINER=$(docker ps --filter "name=nginx-proxy" -q)

if [ -z "$NGINX_CONTAINER" ]; then
    echo "Error: No nginx-proxy container found running"
    exit 1
fi

NGINX_UID=$(docker exec ${NGINX_CONTAINER} id -u nginx)
NGINX_GID=$(docker exec ${NGINX_CONTAINER} id -g nginx)

mkdir -p /var/log/nginx/healthd
chown -R ${NGINX_UID}:${NGINX_GID} /var/log/nginx
```

## Etapa 2: executar a aplicação localmente
<a name="docker-compose-quickstart-run-local"></a>

Use o comando [docker compose up](https://docs.docker.com/compose/reference/up/) para criar e executar sua aplicação de vários contêiner localmente. O Docker Compose criará as duas imagens de contêiner e iniciará os serviços definidos no seu arquivo `docker-compose.yml`.

```
~/eb-docker-compose-flask$ docker compose up --build
```

A opção **--build** garante que o Docker Compose crie as imagens do contêiner antes de iniciar os serviços. Você deve ver a saída mostrando a inicialização do serviço Web e do serviço nginx-proxy.

Navegue até `http://localhost` no navegador. Você verá o texto "Hello Elastic Beanstalk\! Esta é uma aplicação do Docker Compose". O proxy nginx recebe sua solicitação na porta 80 e a encaminha para a aplicação Flask executada na porta 5000.

Quando terminar o teste, interrompa a aplicação pressionando **Ctrl\+C** no terminal ou execute o seguinte comando em um terminal separado:

```
~/eb-docker-compose-flask$ docker compose down
```

## Etapa 3: implantar a aplicação do Docker Composer com a EB CLI
<a name="docker-compose-quickstart-deploy"></a>

Execute os seguintes comandos para criar um ambiente Elastic Beanstalk para essa aplicação.

 

**Para criar um ambiente e implantar a aplicação do Docker Compose**

1. Inicialize o repositório da EB CLI com o comando **eb init**:

   ```
   ~/eb-docker-compose-flask$ eb init -p docker docker-compose-tutorial --region {{us-east-2}}
   Application docker-compose-tutorial has been created.
   ```

   Este comando cria uma aplicação `docker-compose-tutorial` e configura seu repositório local para criar ambientes com a versão mais recente da plataforma do Docker.

1. (Opcional) Execute **eb init** novamente para configurar um par de chaves padrão para que você possa usar SSH para se conectar à instância do EC2 que está executando seu aplicativo:

   ```
   ~/eb-docker-compose-flask$ eb init
   Do you want to set up SSH for your instances?
   (y/n): y
   Select a keypair.
   1) my-keypair
   2) [ Create new KeyPair ]
   ```

   Selecione um par de chaves se você já tiver um, ou siga os as instruções na tela para criar um. Se nenhum prompt aparecer ou se for necessário alterar as configurações posteriormente, execute **eb init -i**.

1. Crie um ambiente e implante o aplicativo nele com **eb create**. O Elastic Beanstalk `docker-compose.yml` detecta automaticamente seu arquivo e implanta sua aplicação de vários contêineres.

   ```
   ~/eb-docker-compose-flask$ eb create docker-compose-tutorial
   ```

   O Elastic Beanstalk leva cerca de cinco minutos para criar seu ambiente e realizar a implantação de sua aplicação com vários contêineres.

## Etapa 4: testar a aplicação no Elastic Beanstalk
<a name="docker-compose-quickstart-run-eb-ap"></a>

Quando o processo de criação de seu ambiente for concluído, abra seu site com **eb open**.

```
~/eb-docker-compose-flask$ eb open
```

Ótimo\! Você fez a implantação de uma aplicação do Docker Compose com vários contêineres usando o Elastic Beanstalk\! Isso abre uma janela do navegador usando o nome de domínio criado para o seu aplicativo. Você deve ver a mensagem da sua aplicação Flask, servida por meio do proxy reverso nginx.

## Etapa 5: limpar
<a name="docker-compose-quickstart-cleanup"></a>

Você pode encerrar o ambiente quando terminar de trabalhar com a aplicação. O Elastic Beanstalk AWS encerra todos os recursos associados ao seu ambiente.

Para encerrar seu ambiente do Elastic Beanstalk com a CLI do EB, execute o seguinte comando.

```
~/eb-docker-compose-flask$ eb terminate
```

## AWS recursos para seu aplicativo
<a name="docker-compose-quickstart-eb-resources"></a>

Você acabou de criar uma aplicação de instância única executando vários contêineres. Ela serve como uma aplicação de exemplo simples com uma única instância do EC2 e, portanto, não requer balanceamento de carga ou ajuste de escala automático. Para aplicativos de instância única, o Elastic Beanstalk cria os seguintes recursos: AWS 
+ **Instância do EC2**: uma máquina virtual do Amazon EC2 configurada para executar aplicações Web na plataforma de sua escolha.

  Cada plataforma executa um conjunto diferente de software, arquivos de configuração e scripts para oferecer suporte a uma versão de linguagem, framework, contêiner da Web específicos ou a uma combinação deles. A maioria das plataformas usa o Apache ou nginx como um proxy reverso que processa tráfego da web na frente do aplicativo web, encaminha solicitações para ele, atende ativos estáticos e gera logs de acesso e de erro.
+ **Grupo de segurança de instância**: um grupo de segurança do Amazon EC2 configurado para permitir tráfego de entrada na porta 80. Esse recurso permite que o tráfego HTTP do load balancer chegue à instância do EC2 que executa seu aplicativo Web. Por padrão, o tráfego não é permitido em outras portas.
+ **Bucket do Amazon S3**: um local de armazenamento do seu código-fonte, logs e outros artefatos criados quando o Elastic Beanstalk é utilizado.
+ ** CloudWatch Alarmes da Amazon** — Dois CloudWatch alarmes que monitoram a carga nas instâncias em seu ambiente e são acionados se a carga for muito alta ou muito baixa. Quando um alarme é acionado, o seu grupo de Auto Scaling pode aumentar ou diminuir.
+ **CloudFormation stack** — O Elastic CloudFormation Beanstalk usa para lançar os recursos em seu ambiente e propagar as alterações de configuração. Os recursos são definidos em um modelo que você pode visualizar no [console do CloudFormation](https://console.aws.amazon.com/cloudformation).
+  **Nome de domínio** — Um nome de domínio que é direcionado para seu aplicativo da web no formulário *{{subdomain}}. {{region}}.elasticbeanstalk.com*. 

O Elastic Beanstalk gerencia todos esses recursos. Quando você encerra o ambiente, o Elastic Beanstalk encerra todos os recursos dele. Sua aplicação Docker Compose executa vários contêineres em uma única instância do EC2, com o Elastic Beanstalk gerenciando a orquestração automaticamente.

## Próximas etapas
<a name="docker-compose-quickstart-next-steps"></a>

Depois que um ambiente estiver executando um aplicativo, você poderá implantar uma nova versão do aplicativo ou um aplicativo diferente a qualquer momento. A implantação de uma nova versão do aplicativo é muito rápida, pois não é necessário provisionar ou reiniciar as instâncias do EC2. Também é possível explorar o novo ambiente usando o console do Elastic Beanstalk. Para conhecer as etapas detalhadas, consulte [Explore seu ambiente](GettingStarted.md#GettingStarted.Explore), no capítulo *Primeiros passos* deste guia.

Depois de implantar uma ou duas aplicações demonstrativas, quando você estiver pronto para começar a desenvolver e executar aplicações Docker Compose localmente, consulte [Preparar a imagem do Docker para implantação no Elastic Beanstalk](single-container-docker-configuration.md). 

## Implantar com o console do Elastic Beanstalk
<a name="docker-compose-quickstart-console"></a>

Você também pode usar o console Elastic Beanstalk para iniciar uma aplicação do Docker Compose. Crie um arquivo ZIP contendo seu arquivo `docker-compose.yml` e todos os diretórios e arquivos associados e, em seguida, carregue-o ao criar uma nova aplicação. Para conhecer as etapas detalhadas, consulte [Criar uma aplicação de exemplo](GettingStarted.md#GettingStarted.CreateApp), no capítulo *Primeiros passos* deste guia.