Preparar a imagem do Docker para implantação no Elastic Beanstalk - AWS Elastic Beanstalk

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

Esta seção descreve como preparar a imagem do Docker para implantação no Elastic Beanstalk com qualquer uma das ramificações da plataforma do Docker executando o AL2 ou 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 Início rápido para Docker.

Gerenciar suas imagens com o Docker Compose no Elastic Beanstalk

É 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?, 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. Para obter mais informações sobre o arquivo docker-compose.yml, consulte Referência de arquivo do Compose no site do Docker.

  • 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 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 e Instalar o Docker Compose no site do Docker.

Gerenciar imagens sem o Docker Compose no Elastic Beanstalk

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

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.

  • As plataformas AL2 e AL2023 do Docker 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.

  • ECS em execução no Amazon Linux 2 e ECS em execução no AL2023 usa o arquivo Dockerrun.aws.json v2. A plataforma retirada ECS - A AMI Docker Multicontainer Amazon Linux (AL1) também usava essa mesma versão.

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

AWSEBDockerrunVersion

(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 Usar imagens de um repositório privado no Elastic Beanstalk 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 usa o valor ContainerPort para conectar o contêiner do 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 um Dockerfile, o primeiro valor ContainerPort deverá corresponder à lista EXPOSE do Dockerfile.

Opcionalmente, você pode especificar uma lista de portas em HostPort. As entradas HostPort especificam as portas de host aos quais os valores de ContainerPort são mapeados. Se você não especificar um valor HostPort, ele assumirá como padrão o valor ContainerPort.

{ "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.

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

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 Início rápido para Docker, 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 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 (Usar compilações em vários estágios) no site de documentação do Docker.