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
- https://runnable.com/docker/python/dockerize-your-python-application
- https://www.docker.com/
- https://kubernetes.io/
- https://stackoverflow.com/questions/30449313/how-do-i-make-a-docker-container-start-automatically-on-system-boot
- https://docs.docker.com/docker-hub/repos/
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!