Como Executar um Script Python Usando Docker

Executar Script Python Docker

Executar scripts Python é uma das tarefas mais comuns em automação. No entanto, gerenciar dependências em diferentes sistemas pode ser desafiador. É aí que o Docker entra. O Docker permite que você empacote seu script Python junto com todas as suas dependências necessárias em um contêiner, garantindo que ele seja executado da mesma forma em qualquer máquina. Neste guia passo a passo, vamos percorrer o processo de criação de um script Python da vida real e executá-lo dentro de um contêiner Docker.

Por que Usar Docker para Scripts Python

Quando você está trabalhando com scripts Python, as coisas podem ficar bagunçadas/complexas muito rapidamente. Projetos diferentes precisam de bibliotecas diferentes, e o que funciona na sua máquina pode quebrar na de outra pessoa. O Docker resolve isso empacotando seu script e seu ambiente juntos. Assim, em vez de dizer “Funciona na minha máquina”, você pode ter certeza de que funciona da mesma forma em qualquer lugar.

Ele também mantém seu sistema limpo. Você não precisa instalar todos os pacotes Python globalmente ou se preocupar com conflitos de versão. Tudo fica dentro do contêiner.

Se você está implantando ou passando seu script para outra pessoa, o Docker facilita isso também. Sem instruções de configuração, sem “instale isso e aquilo”. Apenas um comando, e ele roda.

Escreva o Script Python

Vamos criar um diretório de projeto para manter seu script Python e o Dockerfile. Uma vez criado, navegue até este diretório usando o comando cd:

mkdir docker_file_organizer  
cd docker_file_organizer

Crie um script chamado “organize_files.py” para escanear um diretório e agrupar arquivos em pastas com base em suas extensões:

nano organize_files.py

Cole o seguinte código no arquivo “organize_file.py”. Aqui, usamos dois módulos Python pré-construídos, chamados os e shutil, para manipular arquivos e criar diretórios dinamicamente:

import os  
import shutil  
  
SOURCE_DIR = "/files"  
  
def organize_by_extension(directory):  
    try:  
        for fname in os.listdir(directory):  
            path = os.path.join(directory, fname)  
            if os.path.isfile(path):  
                ext = fname.split('.')[-1].lower() if '.' in fname else 'no_extension'  
                dest_dir = os.path.join(directory, ext)  
                os.makedirs(dest_dir, exist_ok=True)  
                shutil.move(path, os.path.join(dest_dir, fname))  
                print(f"Movido: {fname} → {ext}/")  
    except Exception as e:  
        print(f"Erro ao organizar arquivos: {e}")  
  
if __name__ == "__main__":  
    organize_by_extension(SOURCE_DIR)

Neste script, organizamos arquivos em um diretório dado com base em suas extensões. Usamos o módulo os para listar os arquivos, verificar se cada item é um arquivo, extrair sua extensão e criar pastas nomeadas de acordo com essas extensões (se ainda não existirem). Em seguida, usamos o módulo shutil para mover cada arquivo para sua pasta correspondente. Para cada movimento, imprimimos uma mensagem mostrando a nova localização do arquivo.

Crie o Dockerfile

Agora, crie um Dockerfile para definir o ambiente no qual seu script será executado:

FROM python:latest  
LABEL maintainer="[email protected]"  
WORKDIR /usr/src/app  
COPY organize_files.py .  
CMD ["python", "./organize_files.py"]

Usamos este Dockerfile para criar um contêiner com Python, adicionar nosso script a ele e garantir que o script seja executado automaticamente quando o contêiner iniciar:

Criar Docker File

Construa a Imagem Docker

Antes de você poder construir a imagem Docker, você precisa instalar o Docker primeiro. Depois disso, execute o seguinte comando para empacotar tudo em uma imagem Docker:

sudo docker build -t file-organizer .

Ele lê nosso Dockerfile e junta a configuração do Python e nosso script para que estejam prontos para serem executados em uma única imagem de contêiner:

Construir Imagem Docker

Crie uma Pasta de Exemplo com Arquivos

Para ver nosso script em ação, criamos uma pasta de teste chamada “sample_files” com alguns arquivos de diferentes tipos. Criamos esses arquivos apenas para deixar a pasta um pouco bagunçada e ver como nosso script Python lida com isso:

mkdir ~/sample_files  
touch ~/sample_files/test.txt  
touch ~/sample_files/image.jpg  
touch ~/sample_files/data.csv

Execute o Script Dentro do Docker

Finalmente, executamos nosso contêiner Docker e montamos a pasta de amostra nele. A flag -v monta seu diretório local “~/sample_files” no diretório “/files” no contêiner, o que permite que o script Python leia e organize arquivos na sua máquina host:

docker run --rm -v ~/sample_files:/files file-organizer

Aqui, usamos a opção --rm para remover o contêiner automaticamente após ele terminar de executar, o que economiza espaço em disco:

No final, usamos o comando tree para verificar se os arquivos foram classificados em pastas com base em suas extensões:

tree sample_files

Verificar Resultado Com Comando Tree

Nota: O comando tree não está pré-instalado na maioria dos sistemas. Você pode instalá-lo facilmente usando um gerenciador de pacotes como apt no Ubuntu, brew no macOS, e assim por diante.

Considerações Finais

Com seu script Python rodando dentro do Docker, você está pronto para aproveitar ao máximo um ambiente de desenvolvimento limpo, portátil e consistente. Você pode reutilizar facilmente esse fluxo de trabalho em contêiner para outras tarefas de automação, compartilhar seu script sem se preocupar com dependências e manter seu sistema livre de bagunça. Como próximo passo, considere explorar como construir imagens Docker com múltiplos scripts, agendar contêineres com cron jobs ou integrar seus scripts com outras ferramentas como Git, Jenkins ou até mesmo plataformas em nuvem para otimizar seu processo de automação e implantação.