Docker é uma solução gratuita e de código aberto para desenvolver, implantar e gerenciar aplicativos em virtualização leve de nível de sistema operacional. Neste guia, demonstraremos a criação de um Python aplicativo dentro de um contêiner Docker.
Pré-requisitos
Para realizar as etapas demonstradas neste guia, você precisará dos seguintes componentes:
-
Um sistema Linux. Confira como configurar seu próprio VPS Ubuntu na CloudSigma.
-
A versão mais recente do Docker instalada e configurada. Saiba mais sobre como instalar o Docker no Ubuntu.
Contêineres Docker
Ao executar vários programas no mesmo ambiente, as coisas podem (e vão) quebrar. Quanto mais programas você adiciona, mais instável ele se torna. Pode não ser um grande problema para pessoas comuns. No entanto, quando se trata de aplicações de missão crítica, pode haver consequências graves.
Quanto mais aplicativos são introduzidos no sistema, maior é a superfície de ataque. Um único aplicativo comprometido pode facilmente levar à queda de todo o sistema.
Para resolver esses problemas, podemos usar contêineres Docker para sandboxing em nível de software:
-
Os aplicativos dentro do contêiner terão acesso limitado aos arquivos.
-
Os aplicativos em contêineres não podem ver outros processos em execução no sistema.
-
O contêiner pode receber uma quantidade específica de recursos de hardware.
-
As portas de rede de um contêiner não são expostas para o exterior.
-
Empacotamento consistente de quase qualquer coisa em ambientes locais/de produção.
Para demonstrar, vamos construir um servidor Python simples dentro de um contêiner Docker, transformar o contêiner em uma imagem e implantar a imagem em um ambiente de produção fictício.
Passo 1 – Configuração do Sistema de Arquivos
Para hospedar o projeto, primeiro, vamos criar um diretório dedicado:
|
1 |
mkdir -pv python-server-container/ |
|
1 |
cd !$ |
Dentro do diretório, crie um subdiretório src para armazenar nosso código:
|
1 |
mkdir -pv src/ |
Passo 2 – Construindo o Servidor Python
Nesta etapa, vamos criar um servidor HTTP simples em Python. Crie o arquivo server.py:
|
1 |
touch server.py |
Abra-o em um editor de texto:
|
1 |
nano server.py |

Insira o seguinte código Python:
|
1 2 3 4 5 6 7 8 9 10 11 |
from http.server import HTTPServer, SimpleHTTPRequestHandler def run(server_class=HTTPServer, handler_class=SimpleHTTPRequestHandler): """server entrypoint""" server_address = ("0.0.0.0", 8080) httpd = server_class(server_address, handler_class) print("starting server...") httpd.serve_forever() if __name__ == "__main__": run() |

Aqui,
-
Estamos usando a classe HTTPServer e solicitando um manipulador da biblioteca padrão do Python, mantendo o programa simples.
-
A função run inicia uma instância do HTTPserver.
-
Como sugerem os argumentos de server_address, o servidor escutará qualquer conexão de entrada na porta 8080.
Agora, vamos verificar se o servidor está funcionando como esperado. Inicie o servidor:
|
1 |
python3 server.py |
![]()
A partir de um novo terminal, podemos usar curl para enviar uma requisição ao servidor:
|
1 |
curl -iv localhost:8080 |

Alternativamente, você pode acessar o link em um navegador web:
|
1 |
http://localhost:8080 |
Passo 3 – Criando um Dockerfile
Um Dockerfile contém as instruções necessárias para gerar uma imagem Docker. As instruções no arquivo são seguidas sequencialmente. Saiba mais sobre o Dockerfile.
Crie um novo Dockerfile para o nosso projeto:
|
1 |
touch Dockerfile |
Agora, vamos introduzir os códigos necessários nele. Abra-o em um editor de texto:
|
1 |
nano Dockerfile |
Insira o seguinte código:
|
1 2 3 4 5 6 7 8 9 |
FROM python:latest ENV SRC_DIR /usr/bin/src/test_server/src COPY src/* ${SRC_DIR}/ WORKDIR ${SRC_DIR} ENV PYTHONUNBUFFERED=1 CMD ["python", "server.py"] |
Aqui,
-
Qualquer Dockerfile deve começar com a FROM diretiva. No nosso caso, estamos declarando o Python como a base da imagem Docker.
-
A ENV SRC_DIR diretiva especifica a localização do diretório do contêiner.
-
A COPY diretiva copia os arquivos do diretório src que atualmente hospeda o servidor Python.
-
A variável PYTHONBUFFERED=1 especifica que o Python irá imprimir e registrar a saída diretamente no STDOUT. Caso contrário, os logs não seriam enviados para nenhum buffer.
-
A CMD diretiva especifica um comando padrão para executar ao iniciar o contêiner. Neste caso, estamos usando a diretiva para iniciar nosso servidor Python.
Passo 4 – Geração da Imagem Docker
Com o Dockerfile pronto, agora podemos gerar uma imagem. Execute o seguinte comando Docker para iniciar o processo:
|
1 |
docker build . -t python_server |

Aqui,
-
A -t flag é usada para rotular nossa imagem Docker como python_server.
-
O Docker fará o download de todos os componentes necessários e os combinará em uma imagem.
Passo 5 – Executando a Imagem
A imagem está pronta para implantação. Podemos executá-la usando o seguinte comando:
|
1 |
docker run -p 8080:8080 python_server |

Aqui, estamos encaminhando a porta 8080 da máquina local para a imagem Docker usando a -p flag.
Podemos validar facilmente se o servidor está ativo e em execução usando o curl:
|
1 |
curl -iv localhost:8080 |
Passo 6 – Terminando o Servidor
No terminal, pressione “Ctrl + C” para encerrar o processo do Docker:

Passo 7 – Exportando e Importando a Imagem Docker
Agora temos uma imagem Docker funcional hospedando nosso servidor Python. Com a ajuda dos recursos de exportação e importação do Docker, podemos migrá-la para qualquer outro sistema.
Primeiro, verifique a lista de imagens Docker no sistema atual:
|
1 |
docker images |

Nosso alvo é a imagem Docker python_server que acabamos de criar. O seguinte comando irá exportá-la como um arquivo TAR:
|
1 |
docker save python_server:latest > python_server.tar |

Após transferir o arquivo python_server.tar para a máquina de destino, use o seguinte comando para importar a imagem Docker:
|
1 |
docker load < python_server.tar |
Considerações Finais
Neste guia, demonstramos a criação de uma imagem Docker a partir de uma aplicação Python. Criamos um servidor web Python simples e construímos uma imagem Docker a partir dele. A imagem Docker agora pode ser implantada em qualquer ambiente, garantindo um comportamento consistente.
Interessado em aprender mais sobre o Docker? Confira os seguintes guias:
-
Construir e Implantar uma Aplicação Flask com Docker no Ubuntu 20.04
-
Como Proteger e Dimensionar uma Aplicação Django com Docker, Nginx e Let’s Encrypt
-
Como Implantar o WordPress com Contêineres Docker no Ubuntu 20.04
Boa Computação!




Comentários
Nenhum comentário ainda. Seja o primeiro.