Cómo convertir un script de Python en un programa "real" con Docker

A nadie le importa si sabe cómo expandir una lista vinculada; todos quieren poder ejecutar fácilmente sus programas en su máquina. Esto es posible gracias a Docker.





¿Para quién es este artículo?



¿Alguna vez le han entregado un código o programa cuyo árbol de dependencias parece una placa de circuito enredada?





¿Cómo se ve la gestión de dependencias



? Entonces, ejecuta su script e inmediatamente ve un montón de mensajes de registro de errores en el shell. “Todo funcionó en mi máquina” , así es como suele responder el desarrollador cuando le pides ayuda.



Docker resuelve este problema proporcionando una portabilidad casi trivial a las aplicaciones acopladas. En este artículo, le mostraré cómo dockerizar rápidamente sus aplicaciones de Python para que puedan compartirse fácilmente con cualquier persona que tenga Docker.



En particular, veremos los scripts que deben ejecutarse como un proceso en segundo plano.



Repositorios de Github y Docker



Si la visibilidad es más conveniente para usted, estudie los repositorios de Github y Docker donde se alojará este código.



Pero ... ¿por qué Docker?



La contenedorización se puede comparar con colocar su software en un contenedor de envío que proporciona una interfaz estándar para que la empresa de envío (u otra computadora host) interactúe con el software.



La contenedorización de aplicaciones es en realidad el estándar de oro para la portabilidad.





General acoplable / Contenedorización Marco



El uso de contenedores (sobre todo con ventana acoplable ) abre enormes posibilidades para la aplicación de software. Una aplicación adecuadamente en contenedores (por ejemplo, acoplada) se puede implementar escalable a través de Kubernetes o Scale Sets desde cualquier proveedor de la nube. Y sí, también hablaremos de esto en el próximo artículo.



Nuestra aplicacion



No habrá nada demasiado complicado en ello: estamos nuevamente trabajando con un script simple que monitorea los cambios en el directorio (ya que trabajo en Linux, esto es /tmp



). Los registros se enviarán a la salida estándar, lo cual es importante si queremos que aparezcan en los registros de la ventana acoplable (más sobre esto más adelante).





main.py: una sencilla aplicación de supervisión de archivos.



Este programa se ejecutará de forma indefinida.



Como es habitual, tenemos un archivo requirements.txt



con dependencias, esta vez con solo una:





requirements.txt



Crear Dockerfile



En mi artículo anterior, creamos un script para el proceso de instalación en Makefile, lo que los hace muy fáciles de compartir. Esta vez haremos algo similar, pero en Docker.





Dockerfile



No es necesario que entremos en los detalles de la estructura y el funcionamiento del Dockerfile, hay tutoriales más detallados sobre esto .



Resumen de Dockerfile: comenzamos con una imagen base que contiene el intérprete de Python completo y sus paquetes, luego instalamos las dependencias (línea 6), creamos una nueva imagen minimalista (línea 9), copiamos las dependencias y el código en una nueva imagen (líneas 13- 14; esto se llama compilación de múltiples etapas, en nuestro caso redujo el tamaño de la imagen terminada de 1 GB a 200 MB), configuramos la variable de entorno (línea 17) y el comando de ejecución (línea 20), que es donde terminamos.



Ensamblando la imagen



Habiendo terminado con el Dockerfile, simplemente ejecutamos el siguiente comando desde nuestro directorio de proyecto:



sudo docker build -t directory-monitor .









Armando la imagen



Ejecutando la imagen



Después de completar el montaje, puede comenzar a crear magia.



Una de las mejores cosas de Docker es que proporciona una interfaz estandarizada. Entonces, si diseña su programa correctamente y luego lo transfiere a otra persona, será suficiente decir que necesita aprender docker (si la persona aún no lo sabe) y no enseñarle las complejidades del dispositivo de su programa.



¿Quieres ver a qué me refiero?



El comando para ejecutar el programa se ve así:





Hay mucho que explicar aquí, así que vamos a dividirlo en partes:



-d



- lanzando la imagen en modo separado, no en modo de primer plano



--restart=always



- si el contenedor de la ventana acoplable falla, se reiniciará. Podemos recuperarnos de accidentes, ¡hurra!



--e DIRECTORY='/tmp/test'



- Pasamos el directorio a monitorear usando variables de entorno. (También podemos diseñar nuestro programa Python para leer argumentos y pasar el directorio rastreado de esa manera)



-v /tmp/:/tmp/



. Monte el directorio /tmp



en el directorio /tmp



contenedor de Docker. Esto es importante: cualquier directorio del que queramos realizar un seguimiento DEBE ser visible para nuestros procesos en el contenedor de la ventana acoplable, y así es como se implementa.



directory-monitor



- nombre de la imagen que se lanzará



Después de lanzar la imagen, se puede verificar su estado usando el comando docker ps



:





Salida ps de



Docker Docker genera nombres locos para ejecutar contenedores porque la gente no recuerda muy bien los valores hash. En este caso, el nombre crazy_wozniak se refiere a nuestro contenedor.



Ahora, dado que estamos rastreando /tmp/test



en mi máquina local, si creo un nuevo archivo en este directorio, esto debería reflejarse en los registros del contenedor:





Los registros de Docker demuestran que la aplicación funciona correctamente.



Eso es todo, ahora su programa está acoplado y se está ejecutando en su máquina. A continuación, debemos resolver el problema de transferir el programa a otras personas.



Comparte el programa



Su programa acoplado puede ser útil para sus colegas, amigos, para usted en el futuro y para cualquier otra persona en el mundo, por lo que debemos facilitar su distribución. La solución ideal para esto es Docker Hub .



Si aún no tiene una cuenta, regístrese y luego inicie sesión desde cli:





Inicie sesión en Dockerhub



A continuación, marque y envíe la imagen recién creada a su cuenta.





Agrega una etiqueta y empuja la imagen





Ahora la imagen está en su cuenta de Docker Hub. Para



asegurarnos de que todo funcione, intentemos extraer esta imagen y usarla en las pruebas de extremo a extremo de todo el trabajo que hemos realizado:





Probando nuestra imagen de Docker de un extremo a otro.



Todo este proceso tomó solo 30 segundos.



¿Que sigue?



Ojalá haya podido convencerlos de la increíble practicidad de la contenedorización. Docker permanecerá con nosotros durante mucho tiempo, y cuanto antes lo domines, más beneficios obtendrás.



Docker se trata de reducir la complejidad. En nuestro ejemplo, era un simple script de Python, pero puede usar este tutorial para crear imágenes de complejidad arbitraria con árboles de dependencia que se asemejan a espaguetis, pero estas dificultades no afectarán al usuario final .



Fuentes de










Publicidad



Vdsina ofrece servidores virtuales en Linux o Windows. Utilizamos equipos de marca exclusiva , el mejor panel de control de servidor patentado de su clase y uno de los mejores centros de datos de Rusia y la UE. ¡Date prisa para hacer tu pedido!






All Articles