Docker é uma solução gratuita e de código aberto para desenvolver, implantar e gerenciar aplicações com virtualização leve em nível de sistema operacional. Neste guia, demonstraremos como criar uma aplicação Python 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 dentro do mesmo ambiente, as coisas podem — e vão — quebrar. Quanto mais programas você adiciona, mais instável o ambiente se torna. Isso pode não ser um grande problema para usuários comuns. No entanto, quando se trata de aplicações críticas, as consequências podem ser sérias.
Quanto mais aplicações são introduzidas no sistema, maior é a superfície de ataque. Uma única aplicação comprometida pode facilmente levar ao comprometimento de todo o sistema.
Para resolver esses problemas, podemos usar contêineres Docker para isolamento em nível de software:
As aplicações dentro do contêiner terão acesso limitado aos arquivos.
Aplicações conteinerizadas não conseguem 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 ficam expostas externamente.
Empacotamento consistente de praticamente qualquer coisa entre ambientes locais e de produção.
Para demonstrar, criaremos um servidor Python simples dentro de um contêiner Docker, transformaremos o contêiner em uma imagem e implantaremos a imagem em um ambiente de produção fictício.
Etapa 1 – Configuração do sistema de arquivos
Para hospedar o projeto, primeiro criaremos um diretório dedicado:
mkdir -pv python-server-container/ cd python-server-container/
Dentro do diretório, crie um subdiretório src para armazenar nosso código:
mkdir -pv src/

Etapa 2 – Construindo o servidor Python
Nesta etapa, criaremos um servidor HTTP simples em Python. Crie o arquivo server.py:
touch server.py
Abra-o em um editor de texto:
nano server.py

Insira o seguinte código Python:
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
HTTPServere solicitando um manipulador da biblioteca padrão do Python, mantendo o programa simples.A função
runinicia uma instância deHTTPserver.Como os argumentos de
server_addresssugerem, o servidor escutará qualquer conexão de entrada na porta 8080.
Agora, verificaremos se o servidor está funcionando conforme esperado. Inicie o servidor:
python3 server.py
![]()
Em um novo terminal, podemos usar curl para enviar uma solicitação ao servidor:
curl -iv localhost:8080

Como alternativa, você pode acessar o link em um navegador web:
http://localhost:8080

Etapa 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 executadas sequencialmente. Saiba mais sobre Dockerfile.
Crie um novo Dockerfile para nosso projeto:
touch Dockerfile
Agora, adicionaremos os códigos necessários nele. Abra-o em um editor de texto:
nano Dockerfile
Insira o seguinte código:
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
Dockerfiledeve começar com a diretivaFROM. No nosso caso, declaramos Python como a base da imagem Docker.A diretiva
ENV SRC_DIRespecifica a localização do diretório do contêiner.A diretiva
COPYcopia os arquivos do diretóriosrc, que atualmente hospeda o servidor Python.A variável
PYTHONBUFFERED=1especifica que o Python imprimirá e registrará a saída diretamente emSTDOUT. Caso contrário, os logs não seriam enviados a nenhum buffer.A diretiva
CMDespecifica um comando padrão a ser executado ao iniciar o contêiner. Neste caso, usamos a diretiva para iniciar nosso servidor Python.
Etapa 4 – Geração da imagem Docker
Com o Dockerfile pronto, agora podemos criar uma imagem. Execute o seguinte comando Docker para iniciar o processo:
docker build . -t python_server

Aqui:
A flag
-té usada para marcar nossa imagem Docker comopython_server.O Docker baixará todos os componentes necessários e os combinará em uma imagem.
Etapa 5 – Executando a imagem
A imagem está pronta para implantação. Podemos executá-la usando o seguinte comando:
docker run -p 8080:8080 python_server

Aqui, estamos encaminhando a porta 8080 da máquina local para a imagem Docker usando a flag -p.
Podemos validar facilmente se o servidor está em execução usando curl:
curl -iv localhost:8080

Etapa 6 – Encerrando o servidor
No terminal, pressione “Ctrl + C” para encerrar o processo Docker:

Etapa 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:
docker images

Nosso alvo é a imagem Docker python_server que acabamos de criar. O comando a seguir a exportará como um arquivo TAR:
docker save python_server:latest > python_server.tar

Depois de transferir o arquivo python_server.tar para a máquina de destino, use o seguinte comando para importar a imagem Docker:
docker load < python_server.tar

Considerações finais
Neste guia, demonstramos como criar 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, mantendo um comportamento consistente.
Tem interesse em aprender mais sobre Docker? Confira os seguintes guias:
Crie e implante uma aplicação Flask com Docker no Ubuntu 20.04
Como proteger e escalar uma aplicação Django com Docker, Nginx e Let’s Encrypt
Como implantar WordPress com contêineres Docker no Ubuntu 20.04
Boa computação!

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