Usar a plataforma Docker - 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á.

Usar a plataforma Docker

O AWS Elastic Beanstalk pode iniciar ambientes do Docker compilando uma imagem descrita em Dockerfile ou acionando uma imagem do Docker remota. Se você estiver implantando uma imagem do Docker remota, você não precisará incluir um Dockerfile. Em vez disso, se você também estiver usando o Docker Compose, use um arquivo docker-compose.yml, que especifica uma imagem a ser usada e opções de configuração adicionais. Se você não estiver usando o Docker Compose com seus ambientes Docker, use um arquivo Dockerrun.aws.json em vez disso.

Pré-requisitos

Este tutorial pressupõe que você tenha algum conhecimento das operações básicas do Elastic Beanstalk, da Elastic Beanstalk Command Line Interface (EB CLI) e do Docker. Caso ainda não tenha, siga as instruções em Conceitos básicos do Elastic Beanstalk para iniciar seu primeiro ambiente do Elastic Beanstalk. Este tutorial usa a EB CLI, mas também é possível criar ambientes e fazer upload de aplicações usando o console do Elastic Beanstalk.

Para concluir este tutorial, você precisará fazer o seguinte:

  • Uma instalação local de trabalho do Docker. Para obter mais informações, consulte Obter o Docker no site de documentação do Docker.

  • Acesso ao Docker Hub. Você precisará criar um ID do Docker para acessar o Docker Hub. Para obter mais informações, consulte Compartilhar a aplicação no site de documentação do Docker.

Para saber mais sobre como configurar ambientes do Docker em plataformas do Elastic Beanstalk, consulte Configuração do Docker neste mesmo capítulo.

Colocar uma aplicação do Elastic Beanstalk em contêineres

Para este exemplo, criamos uma imagem do Docker da aplicação demonstrativa Flask a partir do Implantar uma aplicação Flask no Elastic Beanstalk. O aplicativo consiste em um arquivo principal, application.py. Também precisa de um Dockerfile. Coloque os dois arquivos na raiz de um diretório.

~/eb-docker-flask/ |-- Dockerfile |-- application.py
exemplo ~/eb-docker-flask/application.py
from flask import Flask # Print a nice greeting def say_hello(username = "World"): return '<p>Hello %s!</p>\n' % username # Some bits of text for the page header_text = ''' <html>\n<head> <title>EB Flask Test</title> </head>\n<body>''' instructions = ''' <p><em>Hint</em>: This is a RESTful web service! Append a username to the URL (for example: <code>/Thelonious</code>) to say hello to someone specific.</p>\n''' home_link = '<p><a href="/">Back</a></p>\n' footer_text = '</body>\n</html>' # Elastic Beanstalk looks for an 'application' that is callable by default application = Flask(__name__) # Add a rule for the index page application.add_url_rule('/', 'index', (lambda: header_text + say_hello() + instructions + footer_text)) # Add a rule when the page is accessed with a name appended to the site # URL application.add_url_rule('/<username>', 'hello', (lambda username: header_text + say_hello(username) + home_link + footer_text)) # Run the application if __name__ == "__main__": # Setting debug to True enables debug output. This line should be # removed before deploying a production application. application.debug = True application.run(host="0.0.0.0")
exemplo ~/eb-docker-flask/Dockerfile
FROM python:3.6 COPY . /app WORKDIR /app RUN pip install Flask==1.0.2 EXPOSE 5000 CMD ["python", "application.py"]

Testar um contêiner localmente

Use a CLI do Elastic Beanstalk (CLI do EB) para configurar seu repositório local para implantação no Elastic Beanstalk. Defina o Dockerfile do seu aplicativo na raiz do diretório.

~/eb-docker-flask$ eb init -p docker application-name

(Opcional) Use o comando eb local run para criar e executar seu contêiner localmente.

~/eb-docker-flask$ eb local run --port 5000
nota

Para saber mais sobre o comando eb local, consulte eb local. O comando não é compatível no Windows. Como alternativa, você pode criar e executar seu contêiner com os comandos docker build e docker run. Para obter mais informações, consulte a Documentação do Docker.

(Opcional) Embora o contêiner esteja em execução, use o comando eb local open para visualizar o aplicativo em um navegador da web. Opcionalmente, abra http://localhost:5000/ em um navegador da Web.

~/eb-docker-flask$ eb local open

Implantar um contêiner com um Dockerfile

Depois de testar a aplicação localmente, implante-a em um ambiente do Elastic Beanstalk. O Elastic Beanstalk usa as instruções em seu Dockerfile para criar e executar a imagem.

Use o comando eb create para criar um ambiente e implante seu aplicativo.

~/eb-docker-flask$ eb create environment-name

Depois que o ambiente for iniciado, use o comando eb open para visualizá-lo em um navegador da web.

~/eb-docker-flask$ eb open

Testar uma imagem de Docker remota

Em seguida, criamos uma imagem de Docker do aplicativo Flask da seção anterior e a enviamos para o Docker Hub.

Observações
  • As etapas a seguir criam uma imagem do Docker disponível publicamente.

  • Você usará comandos do Docker da instalação local do Docker, juntamente com as credenciais do Docker Hub. Para obter mais informações, consulte a seção Pré-requisitos anterior.

Depois de criarmos e enviarmos nossa imagem, poderemos implantá-la no Elastic Beanstalk com um arquivo docker-compose.yml, se você estiver usando o Docker Compose com o ambiente Docker. Se você não estiver usando o Docker Compose com seus ambientes Docker, use um arquivo Dockerrun.aws.json em vez disso. Para criar uma imagem de Docker do aplicativo Flask e a enviar para o Docker Hub, execute os comandos a seguir. Estamos usando o mesmo diretório do exemplo anterior, mas você poderá usar qualquer diretório com o código do seu aplicativo. Insira seu ID do Docker para docker-id para iniciar sessão no Docker Hub.

~/eb-docker-flask$ docker build -t docker-id/beanstalk-flask:latest . ~/eb-docker-flask$ docker push docker-id/beanstalk-flask:latest
nota

Antes de enviar sua imagem, talvez seja necessário executar docker login. Suas credenciais do Docker Hub serão solicitadas se você executar o comando sem parâmetros.

Se você estiver usando a ferramenta Docker Compose para gerenciar seu ambiente do Docker, agora poderá implantar a aplicação usando apenas um arquivo docker-compose.yml. Para saber mais sobre os arquivos docker-compose.yml, consulte Configuração do Docker.

Se você não estiver usando o Docker Compose, use um arquivo Dockerrun.aws.json. Para obter mais informações, consulte Implantar usando o Dockerrun.aws.json v1 (sem o Docker Compose).

Faça um novo diretório e crie um arquivo docker-compose.yml.

exemplo ~/remote-docker/docker-compose.yml
version: '3.8' services: beanstalk-flask: image: "username/beanstalk-flask" ports: - "80:5000"

Se você não estiver usando a ferramenta Docker Compose para gerenciar seu ambiente do Docker, agora poderá implantar a aplicação usando apenas um arquivo Dockerrun.aws.json. Para saber mais sobre os arquivos Dockerrun.aws.json, consulte Configuração para plataformas Docker (sem Docker Compose) .

Faça um novo diretório e crie um arquivo Dockerrun.aws.json.

exemplo ~/remote-docker/Dockerrun.aws.json
{ "AWSEBDockerrunVersion": "1", "Image": { "Name": "username/beanstalk-flask", "Update": "true" }, "Ports": [ { "ContainerPort": "5000" } ] }

Use a CLI do EB para configurar o repositório local para implantação no Elastic Beanstalk.

~/remote-docker$ eb init -p docker application-name

(Opcional) Use eb local run para compilar e executar seu contêiner localmente. Para saber mais sobre o comando eb local, consulte eb local.

~/remote-docker$ eb local run --port 5000

(Opcional) Embora o contêiner esteja em execução, use o comando eb local open para visualizar o aplicativo em um navegador da web. Opcionalmente, abra http://localhost:5000/ em um navegador da Web.

~/remote-docker$ eb local open

Implantar uma imagem do Docker remota no Elastic Beanstalk

Depois de testar o contêiner localmente, implante-o em um ambiente do Elastic Beanstalk. O Elastic Beanstalk usa o arquivo docker-compose.yml para extrair e executar sua imagem se você estiver usando o Docker Compose. Caso contrário, o Elastic Beanstalk usa o Dockerrun.aws.json em vez disso.

Use a EB CLI para criar um ambiente e implante sua imagem.

~/remote-docker$ eb create environment-name

Assim que seu ambiente for ativado, use eb open para visualizá-lo em um navegador da Web.

~/remote-docker$ eb open

Limpar

Ao terminar de trabalhar com o Elastic Beanstalk, você pode encerrar o ambiente. O Elastic Beanstalk termina todos os recursos da AWS associados ao seu ambiente, como instâncias do Amazon EC2, instâncias de banco de dados, balanceadores de carga, grupos de segurança e alarmes.

Como encerrar o ambiente do Elastic Beanstalk
  1. Abra o console do Elastic Beanstalk e, na lista Regions (Regiões), selecione a sua Região da AWS.

  2. No painel de navegação, selecione Ambientes e selecione o nome do ambiente na lista.

    nota

    Se você tiver muitos ambientes, use a barra de pesquisa para filtrar a lista de ambientes.

  3. Escolha Actions (Ações) e depois Terminate Environment (Encerrar ambiente).

  4. Use a caixa de diálogo na tela para confirmar o encerramento do ambiente.

Com o Elastic Beanstalk, é possível criar facilmente um ambiente para a aplicação a qualquer momento.

ou com a EB CLI:

~/remote-docker$ eb terminate environment-name