Contêineres Docker para aplicações em Python
À medida que o campo de Inteligência Artificial (IA) e machine learning continua a crescer, também aumentam as complexidades das aplicações feitas em Python. Com a demanda crescente por escalabilidade, confiabilidade e manutenção, desenvolvedores estão se voltando para a conteinerização como uma solução.
Neste post, exploraremos como o uso de contêineres Docker pode beneficiar sua aplicação em Python e forneceremos um passo a passo para começar a adicioná-los aos seus projetos.
O que são contêineres Docker?
O Docker é uma plataforma de código aberto que permite que você construa, envie e execute aplicações em contêineres. Ou seja, ele possibilita empacotar seus aplicativos e dependências em contêineres leves e portáteis. Ele oferece suporte a arquiteturas de microsserviços, em que cada serviço pode ser executado em seu próprio contêiner com suas próprias dependências. Através desta capacidade, o Docker se tornou uma ferramenta essencial para o desenvolvimento de softwares e aplicativos, pois ele permite que as equipes criem, testem e implantem facilmente aplicativos em diferentes ambientes.
Os contêineres oferecem uma maneira leve e portátil de empacotar uma aplicação, suas dependências e o ambiente em que ela é executada, o que facilita muito tanto a sua implantação quanto o gerenciamento.
O Docker oferece suporte para inúmeras linguagens de programação, incluindo, é claro, Python.
Benefícios de Usar Contêineres Docker para Aplicações em Python
Mas por que usar um contêiner para empacotar a sua aplicação? Existem vários benefícios que tornam os contêineres Docker uma ferramenta essencial em muitos cenários. Veja os principais:
1. Leveza: contêineres Docker são muito mais leves que as tradicionais máquinas virtuais tipicamente usadas para isolamento de aplicações. A leveza dos contêineres significa menos recursos para suas execuções.
2. Portabilidade: os contêineres são altamente portáveis, permitindo que você execute sua aplicação em qualquer máquina que suporte Docker, sem se preocupar com problemas de compatibilidade.
3. Isolamento: contêineres Docker oferecem um nível elevado de isolamento entre aplicações. Esse isolamento garante que cada contêiner seja executado de forma independente, sem interferir com outros contêineres ou com o sistema hospedeiro.
4. Uso Eficiente de Recursos: contêineres usam apenas o que precisam, reduzindo desperdícios e minimizando a sobrecarga.
5. Escalabilidade: o Docker facilita a ampliação horizontal de aplicativos Python através da adição de mais contêineres.
Etapas preparatórias para configurar um contêiner do Docker para um projeto Python
Antes de começar a usar o Docker com Python, você precisará instalá-lo em seu computador. O Docker está disponível para Windows, Mac e Linux. Para instalar o Docker, acesse o site oficial e vá à página de downloads, onde você pode escolher seu sistema operacional e seguir as instruções de instalação.
Para encapsular seu aplicativo Python em um Docker contêiner, organize o código do seu aplicativo Python em um diretório de projeto (por exemplo, meu-projeto-python/). Inclua seu arquivo principal no diretório (por exemplo, arquivo main.py ou app.py). Liste suas dependências em um arquivo requirements.txt usando pip freeze > requirements.txt.
Criação de um Dockerfile
Para começar a usar contêineres Docker em seus aplicativos, após instalar o Docker para seu sistema operacional (link) e preparar a pasta do projeto como explicado acima, você precisara criar um Dockerfile.
Crie um arquivo Dockerfile na pasta do seu projeto. O Dockerfile deve ser colocado no diretório principal do seu projeto.
				
					FROM python:3.12
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
CMD ["python", "app.py"] 
				
			FROM: define a imagem base que seu contêiner usará – nesse caso, a imagem padrão do Python 3.12 do repositório do Docker Hub.
COPY: copia o aplicativo Python e requirements.txt arquivo para a pasta do aplicativo na imagem do contêiner.
WORKDIR: muda o diretório de trabalho atual para a pasta do aplicativo.
RUN: neste exemplo, o comando RUN usa pip para instalar todas as bibliotecas Python de que seu aplicativo precisará.
CMD: especifica o comando que seu contêiner executará na inicialização.
Criação e execução do Contêiner
Após criar um Dockerfile no seu projeto, será preciso criar sua imagem. Construa sua imagem de contêiner executando o comando (no terminal):
				
					docker build -t my-python-app . 
				
			Este comando cria uma imagem de contêiner chamada my-python-app a partir do Dockerfile.
Após a criação da imagem, execute o contêiner com o comando:
				
					docker run my-python-app  
				
			Exemplo simples
Para ilustrar a criação de um contêiner simples, primeiro criamos um diretório chamado app para conter nosso projeto. Nele, criamos um arquivo requirements.txt onde especificamos nossas dependências. Usaremos NumPy. Portanto, nosso requirements.txt consiste em uma linha:
				
					numpy==2.2.0 
				
			Também criamos um código principal para o projeto chamado app.py.
				
					print("Oi, mundo com Docker!")
import numpy as np
meu_arr = np.arange(0, 10, 1)
print(meu_arr) 
				
			Veja a estrutura de nosso diretório app abaixo:
Em seguida, criamos o Dockerfile como explicado acima.
				
					FROM python:3.12
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
CMD ["python", "app.py"] 
				
			Depois, usamos o comando abaixo para criar a imagem do contêiner (chamada myapp nesse exemplo):
				
					docker build -t myapp . 
				
			No Linux, é provável que você precise usar sudo. Por fim, executamos o contêiner com o comando:
				
					docker run myapp 
				
			Ao executar o contêiner, ele executa o código app.py:
				
					Oi, mundo com Docker!
[0 1 2 3 4 5 6 7 8 9] 
				
			Se voce modificar suas dependências ou arquivo app.py, será preciso criar a imagem novamente antes de executá-la.
Conclusão
O uso de contêineres do Docker para aplicativos Python oferece uma variedade de benefícios, desde implantação leve e portátil até uso e isolamento eficientes de recursos.
Fique ligado para mais tópicos interessantes sobre IA e Python!