Como implantar uma aplicação Python Flask API no Docker

Se você é novo no Docker e em containers, aprender a implantar uma aplicação de API Python Flask no Docker é uma ótima maneira de começar. O Docker permite que você containerize aplicações com tecnologia leve e segurança para implantação rápida de aplicativos.

Neste tutorial, você aprenderá a se tornar seu próprio mestre na configuração e implantação de aplicações de API Python Flask em containers Docker.

Prepare-se e comece a implantar!

Pré-requisitos

Se você deseja seguir passo a passo, precisará ter o seguinte instalado:

  • Máquina Ubuntu com Docker instalado. Este tutorial utiliza Ubuntu 18.04.5 LTS com Docker v19.03.8.
  • Python v3.9 ou posterior instalado na máquina Ubuntu. Este tutorial utilizará Python v3.9.2 em uma máquina Ubuntu.
  • Pacote Elinks instalado na máquina Ubuntu usada para testar a API neste tutorial.

Criando uma Aplicação Python Flask API (APIs GET e POST)

Comece este tutorial criando uma aplicação Python Flask. Flask é um framework de aplicação web micro leve, escrito em Python, que segue a especificação WSGI. Flask oferece ferramentas úteis e recursos para criar aplicações web em Python.

Antes de criar uma aplicação Python Flask, você instalará o Flask e um ambiente virtual Python onde o Flask executará a aplicação.

1. Faça login em sua máquina Ubuntu usando seu cliente SSH favorito.

2. Em seguida, execute os seguintes comandos para criar um diretório chamado ~/docker_python_flask_demo e mude para ele. Este diretório conterá todos os arquivos necessários para que Python e Docker executem uma aplicação.

mkdir ~/docker_python_flask_demo
cd ~/docker_python_flask_demo

3. Execute o comando pip abaixo para instalar um ambiente virtual Python (virtualenv) necessário para o Flask executar as aplicações. Um ambiente virtual Python oferece seu próprio binário Python e pacotes instalados por aplicação para evitar conflitos com outras aplicações.

pip install virtualenv
Installing the environment needed by Flask to execute the applications

4. Execute o comando virtualenv abaixo para criar e ativar um ambiente virtual usando o módulo venv.

virtualenv venv
Creating the virtual environment for Python

5. Agora, execute o comando abaixo para instalar o pacote Python flask com o gerenciador de pacotes pip.

pip install flask

6. Execute o seguinte comando para ativar os pacotes em seu ambiente virtual antes de começar a instalá-los ou usá-los. Isso modifica a variável de ambiente VIRTUAL_ENV para apontar para seu ambiente virtual e adiciona o binário Python do ambiente virtual ao caminho, para que você execute o binário correto.

source venv/bin/activate

7. Crie mais um arquivo, chamado requirements.txt, e defina a dependência da aplicação Flask, como mostrado abaixo.

Flask==2.0.2

8. Crie um arquivo de texto ~/docker_python_flask_demo/app.py e preencha o arquivo com o código Python abaixo.

O código Python abaixo importa a classe flask do Python e cria uma instância da classe chamada app. A instância da classe app contém duas funções login() executadas quando os usuários enviam solicitações na página /login.

A função success() é então executada, exibindo a mensagem de boas-vindas “nome-do-usuário” no navegador.


from flask import Flask , redirect , url_for , request # Importando a classe flask
# app é o objeto ou instância do Flask
app = Flask(__name__)
# app.route informa o Flask sobre a URL a ser usada pela função
@app.route('/success/<name>')
# Criando uma função chamada success
def success(name):
    return 'welcome %s' % name

@app.route('/login', methods = ['GET','POST'])
# Criando uma função chamada login 
def login():
    if request.method == 'POST':
       user = request.form['adamlistek']
       return redirect(url_for('success', name = user)) 
    else:
       return "INVALID"
# Os programas são executados a partir daqui em um servidor de desenvolvimento (localmente em seu sistema) 
# com a depuração habilitada. 
  
if __name__ == '__main__':
   app.run(debug = True)

9. Crie mais um arquivo chamado ~/docker_python_flask_demo/form.html e copie/cole o código abaixo.

Ao executar o código HTML abaixo, é criado um formulário com dois campos de entrada; um é para fornecer seu nome e o outro é um botão de envio.

Assim que você fornecer um nome de usuário e clicar no botão de envio, é enviado um pedido POST e o Flask executa outra função e abre uma nova página da web em http://localhost:5000/success/<username>.

<html>
  <body>
    <form action="http://localhost:5000/login" method="post">
      <p>Please Enter your name</p>
      <p><input type="text" name="adamlistek" /></p>
      <p><input type="submit" value="Submit" /></p>
    </form>
  </body>
</html>

10. Por fim, execute o comando Python abaixo para verificar se a aplicação (app.py) funciona localmente no seu sistema.

Python app.py

Como você pode ver abaixo, a aplicação está sendo executada com sucesso na máquina Ubuntu, mas não no Docker. Você lançará a mesma aplicação no Docker nas seções seguintes.

Running the Python application on the ubuntu machine.

Criando um Dockerfile para Implantar a Aplicação Python Flask API

Você acabou de criar e verificar que a aplicação Python Flask funciona localmente na sua máquina. Mas antes de implantar a aplicação no Docker, você primeiro criará um Dockerfile para definir todos os conjuntos de instruções para construir a imagem Docker.

Crie um arquivo chamado Dockerfile no diretório ~/docker_python_flask_demo e copie/cole o conteúdo abaixo para o Dockerfile.

Docker usará este Dockerfile para executar todas as instruções ou comandos necessários para construir uma nova imagem Docker sobre a imagem base (ubuntu:18.04).

# Define a imagem base para instruções subsequentes
FROM ubuntu:18.04
# Define o diretório de trabalho no contêiner
WORKDIR /app
RUN apt-get update -y
RUN apt-get install -y python-pip python-dev
# Copia os arquivos para o diretório de trabalho
COPY form.html /app/form.html
# Copia os arquivos de dependência para o diretório de trabalho
COPY requirements.txt /app/requirements.txt
# Instala as dependências
RUN pip install -r requirements.txt
# Copia tudo para o diretório de trabalho
COPY . /app
# Comando a ser executado no início do contêiner
CMD [ "python" , "./app.py" ]

Agora, execute o comando tree abaixo para verificar se todos os arquivos necessários para executar a aplicação Python Flask estão contidos no diretório de trabalho (~/docker_python_flask_demo).

tree  
Verifying all Required Files to Run the Flask Application Exist

Construindo uma Imagem Docker para a Aplicação Python Flask API

Agora você tem os arquivos necessários para implantar uma aplicação Python Flask, mas esses arquivos não farão nada a menos que você construa uma imagem. Você executará o comando docker build para construir uma imagem Docker com base nas instruções que você definiu no Dockerfile.

Execute o comando docker build abaixo para construir uma imagem Docker no diretório de trabalho (.). Este comando marca (-t) a imagem como flask-image versão 1 (:v1).

sudo docker build -t flask-image:v1 .
Building the Docker Image

Agora, execute o comando docker abaixo para listar todas as imagens disponíveis.

sudo docker images

Abaixo, você pode ver vários atributos retornados, como REPOSITÓRIO. Observe que o nome do REPOSITÓRIO é flask-image e está marcado com uma versão (v1), como mostrado abaixo.

Verifying the New Docker Image (flask-image)

Executando a Aplicação Python Flask em um Contêiner Docker

Após criar uma imagem Docker, agora você pode executar a aplicação Python Flask em um contêiner Docker. Um contêiner Docker empacota o código e suas dependências para executar aplicativos rapidamente.

1. Execute o comando docker run abaixo para realizar o seguinte:

  • Inicie o contêiner no modo desanexado (-d), para que ele seja executado como um processo em segundo plano e retorne a saída do console após a criação.
  • Mapeia a porta do host do Docker (-p 5000:5000) com a porta do contêiner.
  • Inicia o contêiner Docker (flask-image:v1)
sudo docker run -d -p 5000:5000 flask-image:v1

2. Em seguida, execute o comando docker abaixo para listar todos os containers no motor Docker. Verifique se o Docker criou o container com sucesso.

sudo docker ps -a
Verifying the Docker container in the Docker engine

3. Por fim, execute o comando abaixo para abrir seu navegador da web na máquina Ubuntu usando o elinks.

elinks form.html

O comando abre o navegador da web no terminal e solicita um nome, como mostrado abaixo.

Insira seu nome e clique no botão Enviar.

Accessing the login web page with the form to enter your name

4. Como você pode ver abaixo, após clicar no botão Enviar, a função de login redireciona para a função de sucesso na aplicação Flask.

Displaying the welcome message in the web browser

Conclusão

Este tutorial teve como objetivo ajudá-lo no processo de configuração de um contêiner Docker para API Python Flask usando imagens Docker. Você também aprendeu como lançar contêineres Python Flask usando Dockerfiles, o que permite editar e construir contêineres personalizados de sua escolha.

E quais outras aplicações você tem em mente para implantar em contêiner Docker? Talvez um contêiner Docker MongoDB?

Source:
https://adamtheautomator.com/python-flask-api/