Como Implementar uma Aplicação Python Flask API no Docker

Se você é novo no Docker e 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 aplicativos com tecnologia leve e segurança para implantação rápida de aplicativos.

Neste tutorial, você aprenderá a se tornar o 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ê quiser 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 usará 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 de API Python Flask (APIs GET e POST)

Inicie este tutorial criando uma aplicação Python Flask. Flask é um framework de aplicação web micro escrito em Python e leve WSGI. Flask fornece ferramentas úteis e recursos para criar aplicações web em Python.

Antes de criar uma aplicação Python Flask, você instalará o Flask e o 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 o Python e o 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 pacotes no seu ambiente virtual antes de começar a instalar ou usar eles. Isso modifica a variável de ambiente VIRTUAL_ENV para apontar para o 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, nomeado requirements.txt, e defina a dependência da aplicação Flask, conforme 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 Python flask e cria uma instância de classe chamada app. A instância de 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 de Flask
app = Flask(__name__)
# app.route informa ao 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"
# Programas executam a partir daqui em um servidor de desenvolvimento (localmente no seu sistema)
# com depuração ativada.
  
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.

A execução do código HTML abaixo cria um formulário com dois campos de entrada; um é texto 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, uma solicitação POST é enviada 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 seguintes seções.

Running the Python application on the ubuntu machine.

Criando um Dockerfile para Implementar 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 no Dockerfile.

Docker usará este Dockerfile para executar todas as instruções ou comandos necessários para construir uma nova imagem Docker em cima da 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 ao iniciar o 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ê possui 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 definidas no Dockerfile.

Execute o comando docker build abaixo para criar uma imagem Docker no diretório de trabalho (.). Este comando adiciona tags (-t) à imagem, nomeando-a como flask-image na 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 REPOSITORY. Observe que o nome do REPOSITORY é flask-image e está marcado com uma versão (v1), conforme 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, 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 destacado (-d), para que ele seja executado como um processo em segundo plano e retorne a saída do console durante a criação.
  • Mapeie a porta do host do Docker (-p 5000:5000) com a porta do contêiner.
  • Inicie 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 mecanismo do 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 pressione o botão Enviar.

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

4. Como você pode ver abaixo, após pressionar o 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 uma API Python Flask usando imagens do Docker. Você também aprendeu como iniciar contêineres Python Flask usando Dockerfiles, o que permite editar e criar contêineres personalizados de sua escolha.

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

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