Como transformar um script Python em um programa "real" com Docker

Ninguém se importa se você sabe como expandir uma lista vinculada - todos querem poder executar facilmente seus programas em suas máquinas. Isso é possível pelo Docker.





Para quem é este artigo?



Você já recebeu um código ou programa cuja árvore de dependências se parece com uma placa de circuito emaranhada?





Qual é a aparência do gerenciamento de dependências



Não há problema, tenho certeza de que o desenvolvedor gentilmente forneceu a você um script de instalação para fazer tudo funcionar. Então, você executa o script e imediatamente vê um monte de mensagens de log de erros no shell. “Tudo funcionou na minha máquina” - é assim que o desenvolvedor geralmente responde quando você pede ajuda.



O Docker resolve esse problema fornecendo portabilidade quase trivial para aplicativos encaixados. Neste artigo, vou mostrar como encaixar rapidamente seus aplicativos Python para que possam ser facilmente compartilhados com qualquer pessoa que tenha o Docker.



Em particular, veremos os scripts que precisam ser executados como um processo em segundo plano.



Repositórios Github e Docker



Se a visibilidade for mais conveniente para você, estude os repositórios Github e Docker onde este código será hospedado.



Mas ... por que Docker?



A conteinerização pode ser comparada a colocar seu software em um contêiner de remessa que fornece uma interface padrão para a empresa de remessa (ou outro computador host) interagir com o software.



A conteinerização de aplicativos é, na verdade, o padrão ouro para portabilidade.





Estrutura geral do Docker / Containerization



Containerization (especialmente com docker ) abre possibilidades tremendas para seu aplicativo de software. Um aplicativo em contêiner adequado (por exemplo, encaixado) pode ser implantado escalonável por meio de Kubernetes ou conjuntos de escala de qualquer provedor de nuvem. E sim, também falaremos sobre isso no próximo artigo.



Nosso aplicativo



Não haverá nada muito complicado nisso - estamos novamente trabalhando com um script simples que monitora as mudanças no diretório (já que trabalho no Linux, isto é /tmp



). Os logs serão enviados para stdout, o que é importante se quisermos que eles apareçam nos logs do docker (mais sobre isso mais tarde).





main.py: Um aplicativo simples de monitoramento de arquivos.



Este programa será executado indefinidamente.



Como de costume, temos um arquivo requirements.txt



com dependências, desta vez com apenas uma:





requisitos.txt



Criar Dockerfile



No meu artigo anterior, criamos um script para o processo de instalação no Makefile, o que os torna muito fáceis de compartilhar. Desta vez, faremos algo semelhante, mas no Docker.





Dockerfile



Não precisamos entrar em detalhes sobre a estrutura e operação do Dockerfile, existem tutoriais mais detalhados sobre isso .



Resumo do Dockerfile - começamos com uma imagem de base contendo o interpretador Python completo e seus pacotes, em seguida, instalamos as dependências (linha 6), criamos uma nova imagem minimalista (linha 9), copiamos as dependências e o código em uma nova imagem (linhas 13- 14; isso é chamado de compilação de vários estágios, no nosso caso reduziu o tamanho da imagem finalizada de 1 GB para 200 MB), definimos a variável de ambiente (linha 17) e o comando de execução (linha 20), que é onde terminamos.



Montagem da imagem



Tendo terminado o Dockerfile, simplesmente executamos o seguinte comando no diretório do nosso projeto:



sudo docker build -t directory-monitor .









Juntando a imagem



Executando a imagem



Depois de concluir a montagem, você pode começar a criar magia.



Uma das melhores coisas sobre o Docker é que ele fornece uma interface padronizada. Portanto, se você projetar seu programa corretamente e, em seguida, transferi-lo para outra pessoa, será suficiente dizer que você precisa aprender docker (se a pessoa ainda não sabe), e não ensiná-la as complexidades do dispositivo de seu programa.



Quer ver o que quero dizer?



O comando para executar o programa é assim:





Há muito o que explicar aqui, então vamos dividi-lo em partes:



-d



- iniciar a imagem no modo destacado, não no modo de primeiro plano



--restart=always



- se o contêiner do docker travar, ele será reiniciado. Podemos nos recuperar de acidentes, viva!



--e DIRECTORY='/tmp/test'



- passamos o diretório a ser monitorado por meio de variáveis ​​de ambiente. (Também podemos projetar nosso programa python para ler argumentos e passar o diretório rastreado dessa forma.)



-v /tmp/:/tmp/



- monte o diretório no diretório /tmp



de /tmp



contêiner do Docker. Isso é importante: qualquer diretório que desejamos rastrear DEVE estar visível para nossos processos no contêiner do docker e é assim que ele é implementado.



directory-monitor



- nome da imagem a ser lançada



Após o lançamento da imagem, seu estado pode ser verificado usando o comando docker ps



:





Saída do



Docker PS O Docker gera nomes malucos para a execução de contêineres porque as pessoas não se lembram dos valores de hash muito bem. Nesse caso, o nome crazy_wozniak se refere ao nosso contêiner.



Agora, como estamos rastreando /tmp/test



em minha máquina local, se eu criar um novo arquivo neste diretório, isso deve ser refletido nos logs do contêiner:





Os logs do Docker demonstram que o aplicativo está funcionando corretamente



Pronto, agora seu programa está encaixado e em execução em sua máquina. Em seguida, precisamos resolver o problema de transferir o programa para outras pessoas.



Compartilhe o programa



Seu programa encaixado pode ser útil para seus colegas, amigos, você no futuro e qualquer outra pessoa no mundo, portanto, precisamos torná-lo mais fácil de distribuir. A solução ideal para isso é o hub Docker .



Se você ainda não tem uma conta, registre-se e faça login em cli:





Faça login no Dockerhub



Next, marque e envie a imagem recém-criada para sua conta.





Adicione um rótulo e envie a imagem





Agora a imagem está em sua conta do hub do docker. Para



ter certeza de que tudo funciona, vamos tentar extrair esta imagem e usá-la no teste de ponta a ponta de todo o trabalho que fizemos:





Testando nossa imagem docker de ponta a ponta.



Todo o processo levou apenas 30 segundos.



Qual é o próximo?



Espero ter conseguido convencê-lo da incrível praticidade da conteinerização. O Docker ficará conosco por muito tempo e, quanto antes você dominá-lo, mais benefícios obterá.



O Docker visa reduzir a complexidade. Em nosso exemplo, era um script Python simples, mas você pode usar este tutorial para criar imagens de complexidade arbitrária com árvores de dependência que se parecem com espaguete, mas essas dificuldades não afetarão o usuário final .



Fontes de










Propaganda



A Vdsina oferece servidores virtuais em Linux ou Windows. Usamos equipamentos de marca exclusiva , o melhor painel de controle de servidor proprietário e um dos melhores data centers da Rússia e da UE. Apresse-se para fazer o pedido!






All Articles