Introdução
Neste tutorial, exploraremos como expor um servidor web Flask executado dentro de um contêiner Docker. Ao final deste guia, você aprenderá a construir uma aplicação Flask, empacotá-la em um contêiner Docker e torná-la acessível ao mundo externo. Seja você um desenvolvedor web ou um engenheiro DevOps, este tutorial o equipará com o conhecimento para aproveitar o Docker em seus projetos baseados em Flask.
Introdução ao Docker e Flask
O que é Docker?
Docker é uma plataforma de código aberto que permite aos desenvolvedores construir, implantar e executar aplicações em um ambiente consistente e isolado, chamados contêineres. Os contêineres empacotam uma aplicação e todas as suas dependências em uma única unidade portátil, garantindo que a aplicação execute da mesma forma, independentemente da infraestrutura subjacente.
O que é Flask?
Flask é um framework web Python leve e de código aberto. É projetado para ser fácil de usar e iniciar, tornando-o uma escolha popular para construir aplicações web, APIs e microserviços. Flask fornece uma maneira simples e flexível de criar aplicações web, lidando com tarefas como roteamento, manipulação de requisições HTTP e renderização de templates.
Por que usar Docker com Flask?
Combinar Docker e Flask oferece vários benefícios:
- Implantação Consistente: Os contêineres Docker garantem que a aplicação Flask e suas dependências sejam empacotadas juntas, facilitando a implantação consistente da aplicação em diferentes ambientes (por exemplo, desenvolvimento, pré-produção, produção).
- Escalabilidade: A contenção do Docker facilita a escalabilidade da aplicação Flask executando múltiplas instâncias do contêiner, permitindo que ela lide com tráfego e carga aumentados.
- Isolamento: Os contêineres Docker fornecem um nível de isolamento, garantindo que a aplicação Flask e suas dependências estejam isoladas do sistema hospedeiro e de outras aplicações, reduzindo o risco de conflitos e tornando a aplicação mais segura.
- Portabilidade: Os contêineres Docker podem ser facilmente compartilhados e movidos entre diferentes plataformas e ambientes, facilitando o desenvolvimento, teste e implantação da aplicação Flask.
Configurando o Ambiente de Desenvolvimento
Para começar com Docker e Flask, você precisará ter o seguinte instalado em seu sistema:
- Docker: Você pode baixar e instalar o Docker no site oficial (https://www.docker.com/get-started).
- Python: Flask é um framework web Python, portanto, você precisará ter o Python instalado em seu sistema. Você pode baixar o Python no site oficial (https://www.python.org/downloads/).
Depois de instalar o Docker e o Python, você pode começar a construir sua aplicação Flask e implantá-la em um contêiner Docker.
graph TD
A[Instalar Docker] --> B[Instalar Python]
B --> C[Construir Aplicação Flask]
C --> D[Implantar Flask em Contêiner Docker]
Construindo uma Aplicação Web Flask
Criando uma Aplicação Flask
Para criar uma aplicação web Flask, siga estas etapas:
Instalar Flask: Abra um terminal e execute o seguinte comando para instalar o Flask:
pip install flaskCriar uma Aplicação Flask: Crie um novo arquivo Python (por exemplo,
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)Este código cria uma aplicação Flask básica com uma única rota (
/) que retorna a mensagem "Olá, LabEx!".Executar a Aplicação Flask: No terminal, navegue até o diretório contendo o arquivo
app.pye execute o seguinte comando:python app.pyIsso iniciará o servidor de desenvolvimento Flask e tornará sua aplicação disponível em
http://localhost:5000/.
Adicionando Rotas e Views
Para adicionar mais funcionalidades à sua aplicação Flask, você pode criar rotas e views adicionais:
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/about')
def about():
return render_template('about.html')
@app.route('/contact', methods=['GET', 'POST'])
def contact():
if request.method == 'POST':
## Lidar com o envio do formulário
return 'Formulário enviado com sucesso!'
return render_template('contact.html')
Neste exemplo, adicionamos três rotas: / (página inicial), /about (página sobre) e /contact (formulário de contato). A rota do formulário de contato lida com requisições GET e POST, permitindo que os usuários visualizem o formulário e o submetam.
Renderizando Templates
Flask utiliza o motor de templates Jinja2 para renderizar templates HTML. Crie um diretório templates em seu projeto e adicione os seguintes arquivos:
index.html:<!doctype html> <html> <head> <title>Aplicação Flask LabEx</title> </head> <body> <h1>Bem-vindo à Aplicação Flask LabEx!</h1> <p>Esta é a página inicial.</p> </body> </html>about.html:<!doctype html> <html> <head> <title>Sobre - Aplicação Flask LabEx</title> </head> <body> <h1>Sobre a Aplicação Flask LabEx</h1> <p>Esta é a página sobre.</p> </body> </html>contact.html:<!doctype html> <html> <head> <title>Contato - Aplicação Flask LabEx</title> </head> <body> <h1>Entre em Contato</h1> <form method="post"> <label for="name">Nome:</label> <input type="text" id="name" name="name" /><br /> <label for="email">Email:</label> <input type="email" id="email" name="email" /><br /> <label for="message">Mensagem:</label> <textarea id="message" name="message"></textarea><br /> <input type="submit" value="Enviar" /> </form> </body> </html>
Esses templates fornecem uma estrutura básica para as páginas em sua aplicação Flask.
Implantando Flask em um Contêiner Docker
Criando um Dockerfile
Para implantar sua aplicação Flask em um contêiner Docker, você precisará criar um Dockerfile. Um Dockerfile é um arquivo de texto que contém instruções para construir uma imagem Docker.
Aqui está um exemplo de Dockerfile para sua aplicação Flask:
## 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 . .
## Expõe a porta em que a aplicação Flask rodará
EXPOSE 5000
## Defina o comando para iniciar a aplicação Flask
CMD ["python", "app.py"]
Este Dockerfile faz o seguinte:
- Usa a imagem oficial Python 3.9 slim como imagem base.
- Define o diretório de trabalho para
/app. - Copia o arquivo
requirements.txtpara o contêiner. - Instala as dependências Python listadas no arquivo
requirements.txt. - Copia o código da aplicação Flask para o contêiner.
- Expor a porta 5000, que é a porta padrão para o servidor de desenvolvimento Flask.
- Define o comando para iniciar a aplicação Flask.
Construindo e Executando a Imagem Docker
Para construir a imagem Docker, execute o seguinte comando no mesmo diretório do seu Dockerfile:
docker build -t labex-flask-app .
Isso criará uma imagem Docker chamada labex-flask-app com base nas instruções no Dockerfile.
Para executar o contêiner Docker, use o seguinte comando:
docker run -p 5000:5000 labex-flask-app
Isso iniciará o contêiner Docker e mapeará a porta 5000 no host para a porta 5000 no contêiner, permitindo que você acesse a aplicação Flask em http://localhost:5000/.
Escalando e Gerenciando o Contêiner Docker
Depois de implantar sua aplicação Flask em um contêiner Docker, você pode aproveitar os recursos de escalabilidade e gerenciamento do Docker:
- Escalabilidade: Você pode facilmente escalar sua aplicação Flask executando várias instâncias do contêiner Docker, manualmente ou usando ferramentas de orquestração de contêineres como Docker Compose ou Kubernetes.
- Monitoramento: O Docker fornece ferramentas e integrações embutidas para monitorar a saúde e o desempenho de seus contêineres, facilitando o gerenciamento de sua aplicação Flask em produção.
- Versão e Reversões: A abordagem baseada em imagens do Docker facilita a versão de sua aplicação Flask e a realização de reversões, se necessário, garantindo um processo de implantação mais confiável e estável.
Ao usar o Docker, você pode garantir que sua aplicação Flask seja implantada e gerenciada de forma consistente em diferentes ambientes, simplificando o ciclo de vida de desenvolvimento, teste e produção.
Resumo
Neste tutorial, você aprendeu como expor um servidor web Flask rodando em um contêiner Docker. Ao empacotar sua aplicação Flask em um contêiner Docker, você pode garantir uma implantação consistente e confiável em diferentes ambientes. Com o conhecimento adquirido, você agora pode aproveitar o poder do Docker para otimizar seus processos de desenvolvimento e implantação de aplicações web Flask.



