

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

# Preparar a imagem do Docker para implantação no Elastic Beanstalk
<a name="single-container-docker-configuration"></a>

Esta seção descreve como preparar sua imagem do Docker para implantação no Elastic Beanstalk com qualquer uma das ramificações do Docker em execução ou *da* plataforma. AL2 AL2023 Os arquivos de configuração necessários dependem de as suas imagens serem locais, remotas e se você está usando o Docker Compose.

**nota**  
 Para um exemplo de um procedimento que inicia um ambiente do Docker, consulte o tópico [QuickStart para Docker](docker-quickstart.md).

**Topics**
+ [Gerenciar suas imagens com o Docker Compose no Elastic Beanstalk](#single-container-docker-configuration-dc)
+ [Gerenciar imagens sem o Docker Compose no Elastic Beanstalk](#single-container-docker-configuration.no-compose)
+ [Criar imagens personalizadas com um Dockerfile](#single-container-docker-configuration.dockerfile)

## Gerenciar suas imagens com o Docker Compose no Elastic Beanstalk
<a name="single-container-docker-configuration-dc"></a>

É possível optar por usar o Docker Compose para gerenciar vários serviços em um arquivo YAML. Para saber mais sobre o Docker Compose, consulte [Por que usar o Compose?](https://docs.docker.com/compose/intro/features-uses/), no site do Docker.
+ Crie um `docker-compose.yml`. Este arquivo será necessário se você estiver usando o Docker Compose para gerenciar sua aplicação com o Elastic Beanstalk. Se todas as suas implantações forem originadas de imagens em repositórios públicos, nenhum outro arquivo de configuração será necessário. Se as imagens de origem da sua implantação estiverem em um repositório privado, será necessário fazer uma configuração adicional. Para obter mais informações, consulte [Uso de imagens de um repositório privado](docker-configuration.remote-repo.md). Para obter mais informações sobre o arquivo `docker-compose.yml`, consulte [Referência de arquivo do Compose](https://docs.docker.com/compose/compose-file/) no site do Docker.
+  A `Dockerfile` é opcional. Crie uma se precisar que o Elastic Beanstalk crie e execute uma imagem personalizada local. Para obter mais informações sobre `Dockerfile`, consulte [Referência do arquivo do Docker](https://docs.docker.com/engine/reference/builder/) no site do Docker.
+  Talvez seja necessário criar um arquivo `.zip`. Se você usar apenas um arquivo `Dockerfile` para implantar a aplicação, não precisará criar um. Se você usar arquivos de configuração adicionais, o arquivo .zip deverá incluir o `Dockerfile`, o arquivo `docker-compose.yml`, os arquivos de aplicação e quaisquer dependências de arquivo de aplicação. O `Dockerfile` e o `docker-compose.yml` devem estar na raiz, ou nível superior, do arquivo .zip. Se você usar a EB CLI para implantar a aplicação, ela criará um arquivo .zip para você.

Para saber mais sobre o Docker Compose e como instalá-lo, consulte [Visão geral do Docker Compose](https://docs.docker.com/compose/) e [Instalar o Docker Compose](https://docs.docker.com/compose/install/) no site do Docker.

## Gerenciar imagens sem o Docker Compose no Elastic Beanstalk
<a name="single-container-docker-configuration.no-compose"></a>

Se não estiver usando o Docker Compose para gerenciar suas imagens do Docker, será necessário configurar um `Dockerfile`, um arquivo `Dockerrun.aws.json` ou ambos.
+ Criar um `Dockerfile` para que o Elastic Beanstalk crie e execute uma imagem personalizada localmente.
+ Crie um arquivo `Dockerrun.aws.json v1` para implantar uma imagem do Docker a partir de um repositório hospedado do Elastic Beanstalk.
+ Talvez seja necessário criar um arquivo `.zip`. Se você usar *apenas um* de qualquer arquivo, o `Dockerfile` ou o `Dockerrun.aws.json`, não será necessário criar um arquivo .zip. Se você usar ambos os arquivos, precisará de um arquivo .zip. O arquivo .zip deve incluir `Dockerfile` e o `Dockerrun.aws.json`, juntamente com o arquivo que contém os arquivos da aplicação e quaisquer dependências do arquivo da aplicação. Se você usar a CLI do EB para implantar a aplicação, ela criará um arquivo `.zip` para você.

### Arquivo de configuração do `Dockerrun.aws.json` v1
<a name="single-container-docker-configuration.dockerrun"></a>

Um arquivo `Dockerrun.aws.json` descreve como implantar uma imagem do Docker remota como uma aplicação do Elastic Beanstalk. Este arquivo JSON é específico do Elastic Beanstalk. Se o seu aplicativo é executado em uma imagem disponível em um repositório hospedado, você pode especificar a imagem em um arquivo `Dockerrun.aws.json v1` e omitir o `Dockerfile`.

**Versões do `Dockerrun.aws.json`**  
 O parâmetro `AWSEBDockerrunVersion` indica a versão do arquivo `Dockerrun.aws.json`.  
O Docker AL2 e AL2023 as plataformas usam as seguintes versões do arquivo.  
`Dockerrun.aws.json v3`: ambientes que usam o Docker Compose.
`Dockerrun.aws.json v1`: ambientes que não usam o Docker Compose.
*O ECS executado no Amazon Linux 2* e o *ECS executado no AL2023* usam o `Dockerrun.aws.json v2` arquivo. A plataforma descontinuada *ECS-The Multicontainer Docker Amazon Linux AMI (AL1)* também usou essa mesma versão.



#### Dockerrun.aws.json v1
<a name="single-container-docker-configuration.dockerrun.awsjson"></a>

Chaves e valores válidos para o arquivo `Dockerrun.aws.json v1` incluem as seguintes operações:

**AWSEBDockerrunVersão**  
(Obrigatório) Especifique o número da versão `1` se não estiver usando o Docker Compose para gerenciar a imagem.

**Autenticação**  
(Obrigatório apenas para repositórios privados) Especifica o objeto do Amazon S3 que armazena o arquivo `.dockercfg`.  
Consulte [Autenticação em repositórios de imagensUsando AWS Secrets Manager](docker-configuration.remote-repo.md#docker-configuration.remote-repo.dockerrun-aws) em *Usar imagens de um repositório privado* mais adiante neste capítulo.

**Imagem**  
Especifica a imagem de base do Docker em um repositório Docker existente do qual você está criando um contêiner do Docker. Especifique o valor da chave **Name** no formato *<organization>/<image name>* para imagens no Docker Hub ou *<site>/<organization name>/<image name>* para outros sites.   
Quando você especifica uma imagem no arquivo `Dockerrun.aws.json`, cada instância no ambiente do Elastic Beanstalk executa `docker pull` para executar a imagem. Opcionalmente, inclua a chave **Update**. O valor padrão é `true` e orienta o Elastic Beanstalk a verificar o repositório, enviar todas as atualizações para a imagem e substituir todas as imagens armazenadas em cache.  
Ao usar um `Dockerfile`, não especifique a chave **Image** no arquivo `Dockerrun.aws.json`. O Elastic Beanstalk sempre cria e usa a imagem descrita no `Dockerfile` quando um está presente.

**Portas**  
(Obrigatório quando você especifica a chave **Image**) Lista as portas para expor no contêiner do Docker. O Elastic Beanstalk **ContainerPort**usa o valor para conectar o contêiner Docker ao proxy reverso em execução no host.  
É possível especificar várias portas de contêiner, mas o Elastic Beanstalk usa apenas a primeira porta. Ele usa essa porta para conectar seu contêiner ao proxy reverso do host e rotear solicitações da Internet pública. Se você estiver usando a`Dockerfile`, o primeiro **ContainerPort**valor deve corresponder à primeira entrada na lista **EXPOSE `Dockerfile`** do.   
Opcionalmente, você pode especificar uma lista de portas em **HostPort**. **HostPort**as entradas especificam as portas do host para as quais **ContainerPort**os valores são mapeados. Se você não especificar um **HostPort**valor, o valor padrão será o **ContainerPort**valor.   

```
{
  "Image": {
    "Name": "image-name"
  },
  "Ports": [
    {
      "ContainerPort": 8080,
      "HostPort": 8000
    }
  ]
}
```

****Volumes****  
Mapeie volumes de uma instância do EC2 para o contêiner do Docker. Especifique um ou mais conjuntos de volumes para mapear.  

```
{
  "Volumes": [
    {
      "HostDirectory": "/path/inside/host",
      "ContainerDirectory": "/path/inside/container"
    }
  ]
...
```

****Registro em log****  
Especifique o diretório dentro do contêiner no qual a aplicação grava logs. O Elastic Beanstalk faz upload de todos os logs neste diretório para o Amazon S3 quando você solicitar logs finais ou de pacote. Se você alternar logs para uma pasta chamada `rotated` nesse diretório, também poderá configurar o Elastic Beanstalk para fazer upload de logs alternados para o Amazon S3 para armazenamento permanente. Para obter mais informações, consulte [Visualizar logs de instâncias do Amazon EC2 no ambiente do Elastic Beanstalk](using-features.logging.md).

**Comando**  
Especifique um comando a ser executado no contêiner. Se você especificar um **Entrypoint**, **Command** será adicionado como um argumento para **Entrypoint**. Para obter mais informações, consulte [CMD](https://docs.docker.com/engine/reference/run/#cmd-default-command-or-options) na documentação do Docker.

**Entrypoint**  
Especifique um comando padrão a ser executado quando o contêiner for iniciado. Para obter mais informações, consulte [ENTRYPOINT](https://docs.docker.com/engine/reference/run/#cmd-default-command-or-options) na documentação do Docker.

O seguinte snippet é um exemplo que mostra a sintaxe do arquivo `Dockerrun.aws.json` para um único contêiner.

```
{
  "AWSEBDockerrunVersion": "1",
  "Image": {
    "Name": "janedoe/image",
    "Update": "true"
  },
  "Ports": [
    {
      "ContainerPort": "1234"
    }
  ],
  "Volumes": [
    {
      "HostDirectory": "/var/app/mydb",
      "ContainerDirectory": "/etc/mysql"
    }
  ],
  "Logging": "/var/log/nginx",
  "Entrypoint": "/app/bin/myapp",
  "Command": "--argument"
}>
```

Você pode fornecer ao Elastic Beanstalk apenas com o arquivo `Dockerrun.aws.json` ou com um arquivamento `.zip` que contém os arquivos `Dockerrun.aws.json` e `Dockerfile`. Quando você fornece os dois arquivos, `Dockerfile` descreverá a imagem de Docker, e o arquivo `Dockerrun.aws.json` fornecerá informações adicionais para a implantação conforme descritas posteriormente nesta seção.

**nota**  
Os dois arquivos devem estar na raiz, ou no nível superior do arquivamento `.zip`. Não crie o arquivamento em um diretório que contém os arquivos. Em vez disso, navegue para esse diretório e crie o arquivamento.  
Quando você fornecer os dois arquivos, não especifique uma imagem no arquivo `Dockerrun.aws.json`. O Elastic Beanstalk cria e usa a imagem descrita no `Dockerfile` e ignora a imagem especificada no arquivo `Dockerrun.aws.json`.

## Criar imagens personalizadas com um Dockerfile
<a name="single-container-docker-configuration.dockerfile"></a>

Será necessário criar um `Dockerfile` se você ainda não tiver uma imagem existente hospedada em um repositório.

O seguinte snippet é um exemplo do `Dockerfile`. Quando você segue as instruções em [QuickStart para Docker](docker-quickstart.md), pode fazer upload deste `Dockerfile` como gravado. O Elastic Beanstalk executa o jogo 2048 quando você usa este `Dockerfile`.

Para obter mais informações sobre instruções que podem ser incluídas no `Dockerfile`, consulte a [referência do Dockerfile](https://docs.docker.com/engine/reference/builder) no site do Docker.

```
FROM ubuntu:12.04

RUN apt-get update
RUN apt-get install -y nginx zip curl

RUN echo "daemon off;" >> /etc/nginx/nginx.conf
RUN curl -o /usr/share/nginx/www/master.zip -L https://codeload.github.com/gabrielecirulli/2048/zip/master
RUN cd /usr/share/nginx/www/ && unzip master.zip && mv 2048-master/* . && rm -rf 2048-master master.zip

EXPOSE 80

CMD ["/usr/sbin/nginx", "-c", "/etc/nginx/nginx.conf"]
```

**nota**  
De um único Dockerfile, você pode executar compilações em vários estágios para produzir imagens menores com uma redução significativa de complexidade. Para obter mais informações, consulte [Use multi-stage builds](https://docs.docker.com/develop/develop-images/multistage-build/) (Usar compilações em vários estágios) no site de documentação do Docker.