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.
Tópicos
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?
-
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 arquivodocker-compose.yml
, consulte Referência de arquivo do Composeno 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 sobreDockerfile
, consulte Referência do arquivo do Dockerno site do Docker. -
Talvez seja necessário criar um arquivo
.zip
. Se você usar apenas um arquivoDockerfile
para implantar a aplicação, não precisará criar um. Se você usar arquivos de configuração adicionais, o arquivo .zip deverá incluir oDockerfile
, o arquivodocker-compose.yml
, os arquivos de aplicação e quaisquer dependências de arquivo de aplicação. ODockerfile
e odocker-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
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, oDockerfile
ou oDockerrun.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 incluirDockerfile
e oDockerrun.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 executadocker 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 arquivoDockerrun.aws.json
. O Elastic Beanstalk sempre cria e usa a imagem descrita noDockerfile
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 doDockerfile
.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
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