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
- Ambientes Consistentes: O Docker garante que as aplicações funcionem da mesma forma, independentemente da infraestrutura subjacente.
- Escalabilidade: Os contêineres Docker podem ser facilmente escalonados para cima ou para baixo para atender à demanda em mudança.
- 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.
- Eficiência: Os contêineres Docker são leves e usam menos recursos do que máquinas virtuais tradicionais.
- 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:
- Usamos a imagem oficial Python 3.9 slim como imagem base.
- Definimos o diretório de trabalho para
/app. - Copiamos o arquivo
requirements.txtpara o contêiner. - Instalamos as dependências Python.
- Copiamos o arquivo
app.pypara o contêiner. - Expomos a porta 5000 para a aplicação Flask.
- 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.



