Como executar um aplicativo Python em um contêiner Docker

DockerBeginner
Pratique Agora

Introdução

O Docker tornou-se uma mudança de paradigma no mundo do desenvolvimento de software, permitindo aos desenvolvedores empacotar seus aplicativos e dependências em unidades portáteis e autocontidas chamadas contêineres. Neste tutorial, guiaremos você pelo processo de execução de um aplicativo Python em um contêiner Docker, cobrindo os passos essenciais, desde a compreensão do Docker até a implantação do aplicativo em contêiner.

Compreendendo o Docker

O que é o Docker?

Docker é uma plataforma de código aberto que permite aos desenvolvedores construir, implantar e executar aplicações em um ambiente containerizado. 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 Docker fornece uma forma de empacotar e distribuir esses contêineres, facilitando a implantação e a gestão de aplicações em diferentes ambientes.

Benefícios do Uso do Docker

  1. Consistência: Os contêineres Docker garantem que a aplicação execute da mesma forma, independentemente da infraestrutura subjacente.
  2. Escalabilidade: O Docker facilita a escala de aplicações para cima ou para baixo conforme necessário, adicionando ou removendo contêineres.
  3. Eficiência: Os contêineres Docker são leves e utilizam menos recursos do que as máquinas virtuais tradicionais, permitindo um uso mais eficiente dos recursos de computação.
  4. Portabilidade: Os contêineres Docker podem ser facilmente movidos entre diferentes ambientes, como desenvolvimento, testes e produção, sem a necessidade de mudanças complexas de configuração.

Arquitetura do Docker

A arquitetura do Docker baseia-se em um modelo cliente-servidor, onde o cliente Docker se comunica com o daemon Docker, que é responsável por construir, executar e gerenciar os contêineres Docker. Os componentes chave da arquitetura do Docker incluem:

graph LR A[Cliente Docker] -- Comunica-se com --> B[Daemon Docker] B -- Gerencia --> C[Imagens Docker] B -- Gerencia --> D[Contêineres Docker] B -- Gerencia --> E[Volumes Docker] B -- Gerencia --> F[Redes Docker]

Começando com o Docker

Para começar com o Docker, você precisará instalar o motor Docker no seu sistema. Você pode baixar e instalar o Docker no site oficial do Docker (https://www.docker.com/get-started). Uma vez instalado, você pode usar a interface de linha de comando (CLI) docker para interagir com o daemon Docker e gerenciar seus contêineres.

Aqui está um exemplo de como executar um contêiner simples "Olá, Mundo!" usando o Docker:

$ docker run hello-world

Este comando puxará a imagem hello-world do registro Docker Hub, criará um novo contêiner e executará a aplicação dentro do contêiner.

Criando um Contêiner para um Aplicativo Python

Construindo uma Imagem Docker para um Aplicativo Python

Para criar um contêiner Docker para um aplicativo Python, você precisará criar uma imagem Docker. Uma imagem Docker é um pacote executável leve e autônomo que inclui tudo o que é necessário para executar o aplicativo, incluindo o código, o tempo de execução, as ferramentas do sistema e as bibliotecas.

Aqui está um exemplo de como criar uma imagem Docker para um aplicativo Python simples:

  1. Crie um novo diretório para seu projeto e navegue até ele no seu terminal.

  2. Crie um novo arquivo chamado app.py e adicione o seguinte código Python:

    from flask import Flask
    
    app = Flask(__name__)
    
    @app.route('/')
    def hello():
        return 'Hello, LabEx!'
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=5000)
  3. Crie um novo arquivo chamado Dockerfile e adicione o seguinte conteúdo:

    FROM python:3.9-slim
    WORKDIR /app
    COPY . /app
    RUN pip install --no-cache-dir -r requirements.txt
    CMD ["python", "app.py"]

    Este Dockerfile define as etapas para construir a imagem Docker para seu aplicativo Python. Ele começa com a imagem base python:3.9-slim, define o diretório de trabalho para /app, copia os arquivos do aplicativo para o contêiner, instala as dependências necessárias e executa o script app.py.

  4. Crie um novo arquivo chamado requirements.txt e adicione a seguinte dependência:

    flask
  5. Construa a imagem Docker usando o seguinte comando:

    $ docker build -t my-python-app .

    Este comando constrói a imagem Docker com a tag my-python-app.

Executando o Aplicativo Python em um Contêiner Docker

Depois de ter a imagem Docker, você pode executar o aplicativo Python em um contêiner Docker usando o seguinte comando:

$ docker run -p 5000:5000 my-python-app

Este comando executa o contêiner my-python-app, mapeando a porta 5000 do contêiner para a porta 5000 do host.

Agora você pode acessar o aplicativo Python abrindo um navegador web e navegando para http://localhost:5000. Você deverá ver a mensagem "Hello, LabEx!" exibida.

Implementando o Contêiner Docker

Publicando a Imagem Docker em um Registro

Para implantar seu contêiner Docker, primeiro você precisará publicar a imagem Docker em um registro, como o Docker Hub ou um registro privado. Isso permite compartilhar e distribuir seu aplicativo para outros ambientes.

Veja como você pode publicar sua imagem my-python-app no Docker Hub:

  1. Crie uma conta no Docker Hub (se ainda não tiver) em https://hub.docker.com.

  2. Faça login no Docker Hub usando o comando docker login:

    $ docker login

    Digite seu nome de usuário e senha do Docker Hub quando solicitado.

  3. Etiquete sua imagem local my-python-app com seu nome de usuário do Docker Hub e uma tag (por exemplo, latest):

    $ docker tag my-python-app username/my-python-app:latest
  4. Publique a imagem etiquetada no Docker Hub:

    $ docker push username/my-python-app:latest

Agora, sua imagem Docker está disponível no registro Docker Hub e pode ser puxada e implantada em outros sistemas.

Implementando o Contêiner Docker

Para implantar o contêiner Docker em um ambiente de produção, você pode usar uma plataforma de orquestração de contêineres como o Kubernetes ou o Docker Swarm. Essas plataformas fornecem recursos para escalonamento, balanceamento de carga e gerenciamento do ciclo de vida de seus contêineres.

Aqui está um exemplo de como você pode implantar o contêiner my-python-app usando o Docker Swarm:

  1. Inicialize um cluster Docker Swarm:

    $ docker swarm init
  2. Crie um novo serviço para o contêiner my-python-app:

    $ docker service create --name my-python-app -p 5000:5000 username/my-python-app:latest

    Este comando cria um novo serviço chamado my-python-app e executa a imagem username/my-python-app:latest, mapeando a porta 5000 do contêiner para a porta 5000 do host.

  3. Escale o serviço para várias réplicas:

    $ docker service scale my-python-app=3

    Este comando escala o serviço my-python-app para 3 réplicas, fornecendo alta disponibilidade e balanceamento de carga para o aplicativo.

  4. Monitore o status do serviço:

    $ docker service ls
    $ docker service logs my-python-app

    Esses comandos permitem que você visualize o status do serviço my-python-app e inspecione os logs.

Usando uma plataforma de orquestração de contêineres como o Docker Swarm, você pode gerenciar, escalar e implantar seus contêineres Docker facilmente em um ambiente de produção.

Resumo

Ao final deste tutorial, você terá um bom entendimento do Docker e a capacidade de criar um contêiner para seu aplicativo Python. Você aprenderá a construir uma imagem Docker, executar o contêiner e implantar seu aplicativo de forma consistente, confiável e escalável. Dominar o Docker para desenvolvimento Python otimizará seu fluxo de trabalho e tornará seu aplicativo mais portátil e fácil de gerenciar.