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á.
Configuração do Docker
Esta seção descreve como preparar a imagem e o contêiner do Docker para implantação no Elastic Beanstalk.
Ambiente Docker com Docker Compose
Esta seção descreve como preparar a imagem e o contêiner do Docker para implantação no Elastic Beanstalk. Qualquer aplicação Web implantada no Elastic Beanstalk em um ambiente Docker deve incluir um arquivo docker-compose.yml
se você também usar a ferramenta Docker Compose. Você pode implantar seu aplicação Web como um serviço em contêineres no Elastic Beanstalk realizando uma das seguintes ações:
-
Crie um arquivo
docker-compose.yml
para implantar uma imagem do Docker a partir de um repositório hospedado do Elastic Beanstalk. Nenhum outro arquivo será necessário se todas as implantações forem originadas de imagens em repositórios públicos. (Se a implementação tiver origem em uma imagem de um repositório privado, será necessário incluir arquivos de configuração adicionais para autenticação. 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. -
Crie um
Dockerfile
para que o Elastic Beanstalk crie e execute uma imagem personalizada. Esse arquivo é opcional, dependendo dos requisitos de implantação. Para obter mais informações sobreDockerfile
, consulte Referência do arquivo do Dockerno site do Docker. -
Crie um arquivo
.zip
que contém os arquivos do aplicativo, todas as dependências de arquivo do aplicativo, oDockerfile
e o arquivodocker-compose.yml
. Se você usar a CLI do EB para implantar a aplicação, ela criará um arquivo.zip
para você. Os dois arquivos devem estar na raiz, ou no nível superior do arquivamento.zip
.Se você usar apenas um arquivo
docker-compose.yml
para implantar a aplicação, não precisará criar um arquivo.zip
.
Este tópico é uma referência de sintaxe. Para obter procedimentos detalhados sobre como iniciar ambientes Docker usando o Elastic Beanstalk, consulte Usar a plataforma Docker.
Para saber mais sobre o Docker Compose e como instalá-lo, consulte Visão geral do Docker Compose
nota
Se você não usar o Docker Compose para configurar seus ambientes Docker, também não deverá usar o arquivo docker-compose.yml
. Em vez disso, use o arquivo Dockerrun.aws.json
ou Dockerfile
ou ambos.
Para obter mais informações, consulte Configuração para plataformas Docker (sem Docker Compose) .
Usar imagens de um repositório privado
O Elastic Beanstalk deve se autenticar com o registro online que hospeda o repositório privado antes de extrair e implantar as imagens de um repositório privado. Fornecemos exemplos de duas opções para armazenar e recuperar credenciais para seu ambiente Elastic Beanstalk para autenticação em um repositório.
-
A AWS Secrets Manager
-
O arquivo
Dockerrun.aws.json v3
Você pode configurar o Elastic Beanstalk para fazer login no repositório privado antes que ele inicie o processo de implantação. Isso permite que o Elastic Beanstalk acesse as imagens do repositório e implante essas imagens no ambiente do Elastic Beanstalk.
Essa configuração inicia eventos na fase de pré-compilação do processo de implantação do Elastic Beanstalk. Você configurou isso no diretório de configuração .ebextentions. A configuração usa scripts de hook de plataforma que chamam docker login para autenticar no registro online que hospeda o repositório privado. Veja a seguir detalhes das etapas de configuração.
Para configurar o Elastic Beanstalk para autenticar em seu repositório privado com o AWS Secrets Manager
nota
Permissões específicas devem ser concedidas para concluir essas etapas. Para obter mais informações, consulte as referências a seguir.
-
Na Etapa 2, você precisará de permissões para criar um segredo. Para obter mais informações, consulte Exemplo: Permissão para criar segredos no AWS Secrets Manager Guia do usuário.
-
Na Etapa 3, você precisará de permissões para recuperar segredos usando referências dinâmicas
secretsmanager
. Para obter mais informações, consulte Exemplo: permissão para recuperar valores de segredos no Guia do usuário do AWS Secrets Manager.
-
Crie sua estrutura de diretórios
.ebextensions
da seguinte forma.├── .ebextensions │ └── env.config ├── .platform │ ├── confighooks │ │ └── prebuild │ │ └── 01login.sh │ └── hooks │ └── prebuild │ └── 01login.sh ├── docker-compose.yml
-
Use o AWS Secrets Manager para salvar as credenciais do repositório privado para que o Elastic Beanstalk possa recuperar suas credenciais quando necessário. Para tanto, execute o comando AWS CLIcreate-secret do Secrets Manager.
aws secretsmanager create-secret \ --name
MyTestSecret
\ --description "My image repo credentials created with the CLI.
" \ --secret-string "{\"USER\
":\"EXAMPLE-USERNAME\
",\"PASSWD\
":\"EXAMPLE-PASSWORD\
"}" -
Crie o seguinte arquivo
env.config
e coloque-o no diretório.ebextensions
, como mostrado na estrutura de diretórios anterior. Essa configuração usa o namespace aws:elasticbeanstalk:application:environment para inicializar as variáveis de ambienteUSER
ePASSWD
Elastic Beanstalk usando referências dinâmicas ao AWS Secrets Manager. Para obter mais informações sobre referênciassecretsmanager
dinâmicas, consulte Recuperar um segredo AWS Secrets Manager em um recurso AWS CloudFormation no AWS Secrets ManagerGuia do usuário.nota
USER
ePASSWD
no script devem corresponder às mesmas strings usadas no comandosecretsmanager
create-secret anterior.option_settings: aws:elasticbeanstalk:application:environment: USER: '{{resolve:secretsmanager:MyTestSecret:SecretString:USER}}' PASSWD: '{{resolve:secretsmanager:MyTestSecret:SecretString:PASSWD}}'
-
Crie o seguinte arquivo de script
01login.sh
e coloque-o nos seguintes diretórios (também mostrado na estrutura de diretórios anterior):-
.platform/confighooks/prebuild
-
.platform/hooks/prebuild
### example 01login.sh #!/bin/bash USER=/opt/elasticbeanstalk/bin/get-config environment -k USER /opt/elasticbeanstalk/bin/get-config environment -k PASSWD | docker login -u $USER --password-stdin
O script
01login.sh
chama o script de plataforma get-config para recuperar as credenciais do repositório e, em seguida, efetuar login no repositório. Ele armazena o nome do usuário no script variávelUSER
. Na próxima linha, ele recupera a senha. Em vez de armazenar a senha em um script variável, o script envia a senha diretamente para o comando docker login no fluxo de entradastdin
. A opção--password-stdin
usa o fluxo de entrada para que você não precise armazenar a senha em uma variável. Para obter mais informações sobre autenticação com a interface de linha de comando do Docker, consulte docker login(login do docker) no site da documentação do Docker. Observações
-
Todos os arquivos de script devem ter permissão de execução. Use chmod +x para definir a permissão de execução em seus arquivos de hook. Em todas as versões da plataforma baseadas no Amazon Linux 2 que foram lançadas a partir de 29 de abril de 2022, o Elastic Beanstalk concede automaticamente permissões de execução para todos os scripts de hook da plataforma. Nesse caso, não é necessário conceder manualmente as permissões de execução. Para obter uma lista dessas versões da plataforma, consulte as notas de versão 29 de abril de 2022 - Plataforma Linux no Guia de notas de versão do AWS Elastic Beanstalk.
-
Os arquivos de hook podem ser arquivos binários ou arquivos de script que começam com uma linha #! contendo seu caminho de interpretador, como #!/bin/bash.
-
Para obter mais informações, consulte Hooks de plataforma em Estender as plataformas do Elastic Beanstalk Linux.
-
Após a autenticação do Elastic Beanstalk com o registro online que hospeda o repositório privado, você pode obter e implantar suas imagens.
Esta seção descreve outra abordagem para autenticar o Elastic Beanstalk em um repositório privado. Com essa abordagem, gere um arquivo de autenticação com o comando do Docker e, depois, carregue o arquivo de autenticação em um bucket do Amazon S3. Você também deve incluir as informações do bucket no arquivo Dockerrun.aws.json v3
.
Como gerar e fornecer um arquivo de autenticação ao Elastic Beanstalk
-
Gere um arquivo de autenticação com o comando docker login. Para repositórios no Docker Hub, execute docker login:
$
docker login
Para outros registros, inclua o URL do servidor de registro:
$
docker login
registry-server-url
nota
Se o ambiente do Elastic Beanstalk usar a versão da plataforma Docker da AMI do Amazon Linux (que precede o Amazon Linux 2), leia as informações relevantes em Configuração do Docker na AMI do Amazon Linux (que precede o Amazon Linux 2).
Para obter mais informações sobre o arquivo de autenticação, consulte Store images on Docker Hub
e docker login no site do Docker. -
Faça upload de uma cópia do arquivo de autenticação chamado
.dockercfg
em um bucket do Amazon S3 seguro.-
O bucket do Amazon S3 deve ser hospedado na mesma Região da AWS do ambiente que o está usando. O Elastic Beanstalk não pode fazer download de arquivos de um bucket do Amazon S3 hospedado em outras regiões.
-
Conceda permissões para a operação
s3:GetObject
à função do IAM no perfil da instância. Para obter mais informações, consulte Gerenciar perfis de instância do Elastic Beanstalk.
-
-
Inclua as informações do bucket do Amazon S3 no parâmetro
Authentication
no arquivoDockerrun.aws.json v3
.Veja a seguir um exemplo de um arquivo
Dockerrun.aws.json v3
.{ "AWSEBDockerrunVersion": "3", "Authentication": { "bucket": "
DOC-EXAMPLE-BUCKET
", "key": "mydockercfg
" } }nota
O parâmetro
AWSEBDockerrunVersion
indica a versão do arquivoDockerrun.aws.json
.-
A plataforma Docker do Amazon Linux 2 usa o arquivo
Dockerrun.aws.json v3
para ambientes que usam o Docker Compose. Ela usa o arquivoDockerrun.aws.json v1
para ambientes que não usam o Docker Compose. -
A plataforma Docker de vários contêineres da AMI do Amazon Linux usa o arquivo
Dockerrun.aws.json v2
.
-
Depois que o Elastic Beanstalk puder autenticar com o registro online que hospeda o repositório privado, as imagens poderão ser implantadas e extraídas.
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 Usar a plataforma 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
Configuração para plataformas Docker (sem Docker Compose)
Se o ambiente Docker do Elastic Beanstalk não usar o Docker Compose, leia as informações adicionais nas seções a seguir.
Qualquer aplicação Web implantada no Elastic Beanstalk em um ambiente Docker deve incluir um arquivo Dockerfile
ou Dockerrun.aws.json
. É possível implantar a aplicação Web de um contêiner do Docker no Elastic Beanstalk realizando uma destas ações:
-
Crie um
Dockerfile
para que o Elastic Beanstalk crie e execute uma imagem personalizada. -
Crie um arquivo
Dockerrun.aws.json
para implantar uma imagem do Docker a partir de um repositório hospedado do Elastic Beanstalk. -
Crie um arquivo
.zip
que contém os arquivos do aplicativo, todas as dependências de arquivo do aplicativo, oDockerfile
e o arquivoDockerrun.aws.json
. Se você usar a CLI do EB para implantar a aplicação, ela criará um arquivo.zip
para você.Se você usar apenas um
Dockerfile
ou apenas um arquivoDockerrun.aws.json
para implantar seu aplicativo, não precisará criar um arquivo.zip
.
Este tópico é uma referência de sintaxe. Para obter os procedimentos detalhados sobre como executar ambientes do Docker, consulte Usar a plataforma Docker.
Seções
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
.
Chaves e valores válidos para o arquivo Dockerrun.aws.json v1
incluem as seguintes operações:
- AWSEBDockerrunVersion
-
(Obrigatório) Especifica o número da versão como o valor
1
para ambientes Docker de um único contêiner. - 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.
- 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
.
Adicione as informações sobre o bucket do Amazon S3 que contém o arquivo de autenticação no parâmetro Authentication
do arquivo Dockerrun.aws.json
v1
. Certifique-se de que o parâmetro Authentication
contenha uma chave e um bucket válidos do Amazon S3. O bucket do Amazon S3 deve ser hospedado na mesma Região da AWS do ambiente que o está usando. O Elastic Beanstalk não faz download de arquivos de buckets do Amazon S3 hospedados em outras regiões.
Para obter informações sobre a geração e o upload do arquivo de autenticação, consulte Usar imagens de um repositório privado.
O exemplo a seguir mostra o uso de um arquivo de autenticação chamado mydockercfg
em um bucket chamado
para usar uma imagem privada em um registro de terceiros.DOC-EXAMPLE-BUCKET
{
"AWSEBDockerrunVersion": "1",
"Authentication": {
"Bucket": "DOC-EXAMPLE-BUCKET
",
"Key": "mydockercfg
"
},
"Image": {
"Name": "quay.io/johndoe/private-image",
"Update": "true"
},
"Ports": [
{
"ContainerPort": "1234"
}
],
"Volumes": [
{
"HostDirectory": "/var/app/mydb",
"ContainerDirectory": "/etc/mysql"
}
],
"Logging": "/var/log/nginx"
}