Comment transformer un script Python en un "vrai" programme avec Docker

Personne ne se soucie de savoir comment développer une liste chaînée - tout le monde veut pouvoir exécuter facilement vos programmes sur sa machine. Ceci est rendu possible par Docker.





A qui est destiné cet article?



Vous a-t-on déjà remis un code ou un programme dont l'arborescence de dépendances ressemble à un circuit imprimé enchevêtré?





À quoi ressemble la gestion des dépendances



Pas de problème, je suis sûr que le développeur vous a gentiment fourni un script d'installation pour que tout fonctionne. Ainsi, vous exécutez son script, et vous voyez immédiatement un tas de messages du journal des erreurs dans le shell. «Tout a fonctionné sur ma machine» , c'est ainsi que le développeur répond généralement lorsque vous lui demandez de l'aide.



Docker résout ce problème en offrant une portabilité presque insignifiante aux applications dockerisées. Dans cet article, je vais vous montrer comment ancrer rapidement vos applications Python afin qu'elles puissent être facilement partagées avec toute personne disposant de Docker.



En particulier, nous examinerons les scripts qui doivent s'exécuter en tant que processus d'arrière-plan.



Dépôts Github et Docker



Si la visibilité est plus pratique pour vous, étudiez les référentiels Github et Docker où ce code sera hébergé.



Mais ... pourquoi Docker?



La conteneurisation peut être comparée au placement de votre logiciel dans un conteneur d'expédition qui fournit une interface standard permettant à la compagnie maritime (ou à un autre ordinateur hôte) d'interagir avec le logiciel.



La conteneurisation des applications est en fait la référence en matière de portabilité.





Général Docker / Containerization Framework La



conteneurisation (en particulier avec docker ) ouvre d'énormes possibilités pour votre application logicielle. Une application correctement conteneurisée (par exemple, dockerisée) peut être déployée de manière évolutive via Kubernetes ou Scale Sets à partir de n'importe quel fournisseur de cloud. Et oui, nous en parlerons également dans le prochain article.



Notre application



Il n'y aura rien de trop compliqué dedans - nous travaillons à nouveau avec un script simple qui surveille les changements dans le répertoire (puisque je travaille sous Linux, c'est le cas /tmp



). Les journaux seront poussés vers stdout, ce qui est important si nous voulons qu'ils apparaissent dans les journaux du docker (nous en reparlerons plus tard).





main.py: Une simple application de surveillance de fichiers



Ce programme fonctionnera indéfiniment.



Comme d'habitude, nous avons un fichier requirements.txt



avec des dépendances, cette fois avec une seule:





requirements.txt



Créer Dockerfile



Dans mon article précédent, nous avons créé un script pour le processus d'installation dans le Makefile, ce qui les rend très faciles à partager. Cette fois, nous ferons quelque chose de similaire, mais dans Docker.





Dockerfile



Nous n'avons pas besoin d'entrer dans les détails de la structure et du fonctionnement du Dockerfile, il existe des tutoriels plus détaillés à ce sujet .



Résumé du Dockerfile - nous commençons avec une image de base contenant l'interpréteur Python complet et ses packages, puis installons les dépendances (ligne 6), créons une nouvelle image minimaliste (ligne 9), copions les dépendances et le code dans une nouvelle image (lignes 13- 14; cela s'appelle une construction en plusieurs étapes, dans notre cas, cela a réduit la taille de l'image finie de 1 Go à 200 Mo), nous définissons la variable d'environnement (ligne 17) et la commande d'exécution (ligne 20), qui c'est là que nous terminons.



Assembler l'image



Après avoir terminé avec le Dockerfile, nous exécutons simplement la commande suivante à partir de notre répertoire de projet:



sudo docker build -t directory-monitor .









Assembler l'image



Lancer l'image



Après avoir terminé l'assemblage, vous pouvez commencer à créer de la magie.



L'un des avantages de Docker est qu'il fournit une interface standardisée. Donc, si vous concevez correctement votre programme, puis le transférez à quelqu'un d'autre, il suffira de dire que vous devez apprendre docker (si la personne ne le sait pas encore), et ne pas lui apprendre les subtilités de l'appareil de votre programme.



Tu veux voir ce que je veux dire?



La commande pour exécuter le programme ressemble à ceci:





Il y a beaucoup à expliquer ici, alors décomposons-le en plusieurs parties:



-d



- lancement de l'image en mode détaché, pas en mode premier plan



--restart=always



- si le conteneur docker plante, il redémarrera. Nous pouvons nous remettre des accidents, hourra!



--e DIRECTORY='/tmp/test'



- on passe le répertoire à surveiller à l'aide de variables d'environnement. (Nous pouvons également concevoir notre programme python pour lire les arguments et transmettre le répertoire suivi de cette manière.)



-v /tmp/:/tmp/



- monter le répertoire /tmp



dans le répertoire du /tmp



conteneur Docker. Ceci est important: tout répertoire dont nous voulons garder une trace DOIT être visible par nos processus dans le conteneur docker, et c'est ainsi qu'il est implémenté.



directory-monitor



- nom de l'image à lancer



Après le lancement de l'image, son état peut être vérifié à l'aide de la commande docker ps



:









Docker ps output Docker génère des noms fous pour exécuter des conteneurs car les gens ne se souviennent pas très bien des valeurs de hachage. Dans ce cas, le nom crazy_wozniak fait référence à notre conteneur.



Maintenant, puisque nous effectuons un suivi /tmp/test



sur ma machine locale, si je crée un nouveau fichier dans ce répertoire, cela devrait être reflété dans les journaux du conteneur:





Les journaux Docker démontrent que l'application fonctionne correctement



Voilà, maintenant votre programme est ancré et s'exécute sur votre machine. Ensuite, nous devons résoudre le problème du transfert du programme à d'autres personnes.



Partagez le programme



Votre programme dockerisé peut être utile à vos collègues, amis, à vous à l'avenir et à n'importe qui d'autre dans le monde, nous devons donc le rendre plus facile à distribuer. La solution idéale pour cela est le hub Docker .



Si vous n'avez pas encore de compte, inscrivez-vous puis connectez-vous à partir de cli:





Connectez-vous à Dockerhub



Ensuite, marquez et poussez l'image nouvellement créée sur votre compte.





Ajouter une étiquette et pousser l'image





Maintenant, l'image est dans votre compte docker hub.Pour



nous assurer que tout fonctionne, essayons de tirer cette image et de l'utiliser dans des tests de bout en bout de tout le travail que nous avons effectué:





Test de notre image docker de bout en bout.



L'ensemble du processus n'a duré que 30 secondes.



Et après?



J'espère avoir été en mesure de vous convaincre de l'incroyable caractère pratique de la conteneurisation. Docker restera avec nous pendant longtemps, et plus tôt vous le maîtriserez, plus vous obtiendrez d'avantages.



Docker vise à réduire la complexité. Dans notre exemple, il s'agissait d'un simple script Python, mais vous pouvez utiliser ce tutoriel pour créer des images d'une complexité arbitraire avec des arbres de dépendances qui ressemblent à des spaghettis, mais ces difficultés n'affecteront pas l'utilisateur final .



Sources de










Publicité



Vdsina propose des serveurs virtuels sous Linux ou Windows. Nous utilisons exclusivement des équipements de marque , le meilleur panneau de contrôle de serveur propriétaire et l'un des meilleurs centres de données en Russie et dans l'UE. Dépêchez-vous de commander!






All Articles