Como executar uma aplicação Flask dentro de um contêiner Docker

DockerBeginner
Pratique Agora

Introdução

Neste tutorial, exploraremos o processo de execução de uma aplicação Flask dentro de um contêiner Docker. Cobriremos os fundamentos do Docker, criaremos uma aplicação Flask e, em seguida, encapsularemos a aplicação Flask para tirar proveito dos benefícios que o Docker proporciona.

Compreendendo o Docker

O Docker é uma plataforma de código aberto popular que permite aos desenvolvedores construir, implantar e executar aplicações em um ambiente de contêineres. Os contêineres são pacotes de software leves, autônomos e executáveis que incluem tudo o que é necessário para executar uma aplicação, incluindo o código, o tempo de execução, as ferramentas do sistema e as bibliotecas.

O que é o Docker?

O Docker é uma ferramenta projetada para facilitar a criação, implantação e execução de aplicações usando contêineres. Os contêineres permitem que um desenvolvedor empacote uma aplicação com todas as partes necessárias, como bibliotecas e outras dependências, e a envie como um único pacote.

Arquitetura do Docker

A arquitetura do Docker consiste nos seguintes componentes:

graph TD A[Cliente Docker] --> B[Demônio Docker] B --> C[Imagens Docker] B --> D[Contêineres Docker] B --> E[Registros Docker]
  • Cliente Docker: A interface do usuário para interagir com o sistema Docker.
  • Demônio Docker: O processo em segundo plano que gerencia objetos Docker, como imagens, contêineres, redes e volumes.
  • Imagens Docker: Modelos para criar contêineres Docker.
  • Contêineres Docker: Instâncias executáveis de imagens Docker.
  • Registros Docker: Repositórios para armazenar e distribuir imagens Docker.

Benefícios do Uso do Docker

  1. Ambientes Consistentes: O Docker garante que as aplicações funcionem da mesma forma, independentemente da infraestrutura subjacente.
  2. Escalabilidade: Os contêineres Docker podem ser facilmente escalonados para cima ou para baixo para atender à demanda em mudança.
  3. Portabilidade: Os contêineres Docker podem ser executados em qualquer sistema que tenha o Docker instalado, facilitando a movimentação de aplicações entre diferentes ambientes.
  4. Eficiência: Os contêineres Docker são leves e usam menos recursos do que máquinas virtuais tradicionais.
  5. Isolamento: Os contêineres Docker oferecem um alto grau de isolamento, garantindo que as aplicações funcionem em um ambiente seguro e consistente.

Começando com o Docker

Para começar com o Docker, você precisará instalar o motor Docker em seu sistema. Você pode baixar o Docker do site oficial (https://www.docker.com/get-started) e seguir as instruções de instalação para o seu sistema operacional.

Depois de instalar o Docker, você pode começar a construir e executar contêineres Docker. Aqui está um exemplo simples de execução de um contêiner Docker com a imagem Ubuntu:

docker run -it ubuntu

Este comando baixará a imagem Ubuntu do registro Docker, criará um novo contêiner e iniciará uma sessão de shell interativa dentro do contêiner.

Criando uma Aplicação Flask

Flask é um popular framework web Python, leve, flexível e fácil de usar. Nesta seção, vamos percorrer o processo de criação de uma aplicação Flask simples.

Configurando o Ambiente de Desenvolvimento

Primeiro, vamos configurar o ambiente de desenvolvimento. Usaremos Python 3.9 e Flask 2.0.2 neste exemplo.

## Instalar o Python 3.9
sudo apt-get update
sudo apt-get install -y python3.9

## Instalar o Flask
pip3 install flask==2.0.2

Criando uma Aplicação Flask

Agora, vamos criar uma aplicação Flask simples. Crie um novo arquivo chamado app.py e adicione o seguinte código:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'Olá, LabEx!'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

Neste exemplo, importamos a classe Flask do módulo flask, criamos uma nova instância Flask e definimos uma rota para o URL raiz (/) que retorna a string "Olá, LabEx!". Finalmente, executamos a aplicação usando o método app.run().

Executando a Aplicação Flask

Para executar a aplicação Flask, execute o seguinte comando no seu terminal:

python3 app.py

Isso iniciará o servidor de desenvolvimento Flask e tornará sua aplicação disponível em http://localhost:5000/.

Adicionando Funcionalidade

Você pode facilmente adicionar mais funcionalidades à sua aplicação Flask definindo rotas adicionais e adicionando lógica de negócio. Por exemplo, você pode criar uma rota que aceite entrada do usuário, execute algum processamento e retorne uma resposta.

from flask import Flask, request

app = Flask(__name__)

@app.route('/')
def index():
    return 'Olá, LabEx!'

@app.route('/greet', methods=['POST'])
def greet():
    name = request.form['name']
    return f'Olá, {name}!'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

Neste exemplo, adicionamos uma nova rota /greet que aceita uma requisição POST com um parâmetro name. A aplicação então retorna uma mensagem de saudação com o nome fornecido.

Contêinerizando a Aplicação Flask

Agora que temos uma aplicação Flask básica, vamos contêinerizá-la usando o Docker. Contêinerizar uma aplicação permite empacotá-la, juntamente com suas dependências, em uma unidade autocontida que pode ser facilmente implantada e dimensionada.

Criando um Dockerfile

Para contêinerizar nossa aplicação Flask, precisamos criar um Dockerfile. Um Dockerfile é um documento de texto que contém todos os comandos que um usuário poderia executar na linha de comando para montar uma imagem.

Crie um novo arquivo chamado Dockerfile e adicione o seguinte conteúdo:

## Use a imagem oficial Python como imagem base
FROM python:3.9-slim

## Defina o diretório de trabalho para /app
WORKDIR /app

## Copie o arquivo requirements.txt para o contêiner
COPY requirements.txt .

## Instale as dependências Python
RUN pip install --no-cache-dir -r requirements.txt

## Copie o código da aplicação Flask para o contêiner
COPY app.py .

## Expõe a porta na qual a aplicação Flask será executada
EXPOSE 5000

## Defina o comando para executar a aplicação Flask
CMD ["python", "app.py"]

Neste Dockerfile, fazemos o seguinte:

  1. Usamos a imagem oficial Python 3.9 slim como imagem base.
  2. Definimos o diretório de trabalho para /app.
  3. Copiamos o arquivo requirements.txt para o contêiner.
  4. Instalamos as dependências Python.
  5. Copiamos o arquivo app.py para o contêiner.
  6. Expomos a porta 5000 para a aplicação Flask.
  7. Definimos o comando para executar a aplicação Flask.

Construindo a Imagem Docker

Agora, vamos construir a imagem Docker para nossa aplicação Flask. No seu terminal, execute o seguinte comando:

docker build -t labex-flask-app .

Este comando construirá uma imagem Docker com a tag labex-flask-app usando o Dockerfile no diretório atual.

Executando o Contêiner Docker

Após a construção da imagem, podemos executar a aplicação Flask em um contêiner Docker:

docker run -p 5000:5000 labex-flask-app

Este comando iniciará um novo contêiner baseado na imagem labex-flask-app e mapeará a porta 5000 no host para a porta 5000 no contêiner.

Agora você pode acessar a aplicação Flask em http://localhost:5000/.

Implantando a Imagem Docker

Depois de contêinerizar sua aplicação Flask, você pode implantar a imagem Docker em um registro de contêineres, como o Docker Hub ou um registro privado, e, em seguida, implantar a aplicação em um ambiente de produção.

Resumo

Ao final deste tutorial, você terá um bom entendimento de como contêinerizar uma aplicação Flask usando o Docker. Você será capaz de construir uma imagem Docker para sua aplicação Flask, executá-la em um contêiner Docker e aproveitar as vantagens do Docker para o desenvolvimento e implantação de aplicações Flask.