bguerbas / SpeedTest

Gerenciar a velocidade da internet banda larga
MIT License
139 stars 45 forks source link

Criar um docker para execução #1

Open yardz opened 3 years ago

yardz commented 3 years ago

Já pensou em criar um docker para executar o script? Vou dar o meu exemplo, eu achei a idéia super interessante, gostaria de usar mas não sei nada de Python...

Pra mim, rodar esse projeto por si só já seria um desafio... Agora se tivesse um docker seria só docker-compose up O docker também traria outras vantagens, como por exemplo, facilitaria as pessoas a contribuirem para o repo :-)

ismaell commented 3 years ago

Docker é overkill para um aplicativo assim insignificante de simples, né?

Podería se simplificar a instalação sim... mas acho que não da para usar Docker...

yardz commented 3 years ago

Cara, eu sou da opinião que todo projeto deveria ter docker. Até mesmo se for só pra dev. Eu pessoalmente não gosto de instalar nada na minha máquina. Nada de nada mesmo, deixo ela o mais limpa possível.

Então mesmo pra dev, eu acho docker importante e indispensável.

ismaell commented 3 years ago

Python tem métodos mais simples:

yardz commented 3 years ago

Pelo que eu vi, esse não parece ser o comportamento padrão... Mas mesmo se for, ainda tem a própria instalação do Python. Com docker vc não precisa fazer nem isso...

Cara, novamente, se tiver que instalar 1 coisa (qualquer) eu já prefiro docker.

ismaell commented 3 years ago

Você conhece Docker e quer usar ele em tudo, tá bom, mas isso não significa que seja necessário ou o método mais simples/eficiente, para algo tem gerenciadores de pacotes, etc.

O seu docker-compose.yml deveria ficar algo assim:

services:
    speedtest:
        network_mode: host
        build: .
        volumes: .:/opt/SpeedTest
        command: python3 /opt/SpeedTest/TestSpeed.py

E o Dockerfile:

FROM python:latest
COPY requirements.txt /tmp/requirements.txt
RUN pip3 install -r /tmp/requirements.txt
yardz commented 3 years ago

Você conhece Docker e quer usar ele em tudo, tá bom, mas isso não significa que seja necessário ou o método mais simples/eficiente, para algo tem gerenciadores de pacotes, etc.

Node tem gerenciador de pacotes o npm e yarn, PHP tem o composer e eu acredito que a maioria das linguagens modernas devem ter algum tipo de gerenciador de pacotes. Isso absolutamente não é uma exclusividade do Python (nem de nenhuma linguagem).

Virtualizar o ambiente é uma coisa completamente diferente de gerenciadores de pacote, a existência de um não invalida ou diminui a importância do outro.

Se você não entende o quão importante é a garantia de um ambiente igual para todos desenvolvedores (ou usuários). Desculpa, mas nem da pra conversar.

ismaell commented 3 years ago

Eu não estou negando a utilidade da virtualização, só estava falando de que não precisa virtualização nenhuma, mas...

Não é assim como você fala, pois para o Docker o entorno onde você cria a imagem é parte do input lamentavelmente, então ele não garante repetibilidade. Se você quer um sistema que oferece garantias maiores precisa ir para algo como o Guix (eu recomendo muito você olhar se não conhece).

O Docker é só uma das opções, e não é a melhor para criar as imagens, nem muito menos para correr um aplicativo simples.

O método mais simples é você ter o Python no sistema operacional, e criar um entorno venv para o aplicativo... você está falando de ter toda a infraestrutura do Docker instalada no sistema para criar algo que ademais é bem mais complexo, e que você não tem jeito de comprovar, então não vai ficar melhor do que seu sistema com o Python.

Ademais, se você quer garantias no desenvolvimento de software, a repetibilidade não é suficiente, nem agregando acima testing; o método deve incluir uma disciplina de qualidade completa, porque você tem que garantir que qualquer cenário onde os desenvolvedores trabalham em paralelo vai produzir uma composição válida depois, e dois aspectos muito importantes são o análise das dependências e o análise estático das propriedades do seu código nesse contexto, para validar o uso dessas APIs (sem entrar no tópico das necessidades internas ou objetivo do seu código). Desse jeito você poder provar que as dependências estão corretas, é você pode atualizar essas dependências, pois é uma loucura você dizer dep==ver e deixar isso aí 10 anos, assim é como você consegue garantir o software rot.

Perdão, eu já me estendi muito, é um tema muito longo...