So verwandeln Sie ein Python-Skript mit Docker in ein "echtes" Programm

Es interessiert niemanden, ob Sie wissen, wie man eine verknüpfte Liste erweitert - jeder möchte in der Lage sein, Ihre Programme einfach auf seinem Computer auszuführen . Dies wird durch Docker ermöglicht.





Für wen ist dieser Artikel?



Wurde Ihnen jemals ein Code oder Programm übergeben, dessen Abhängigkeitsbaum wie eine verschlungene Leiterplatte aussieht?





Wie das Abhängigkeitsmanagement aussieht



Kein Problem, ich bin sicher, der Entwickler hat Ihnen freundlicherweise ein Installationsskript zur Verfügung gestellt, damit alles funktioniert. Sie führen also das Skript aus und sehen sofort eine Reihe von Fehlerprotokollmeldungen in der Shell. „Auf meinem Computer hat alles funktioniert“ - so antwortet der Entwickler normalerweise, wenn Sie ihn um Hilfe bitten.



Docker löst dieses Problem, indem es Docker-Anwendungen eine nahezu triviale Portabilität bietet. In diesem Artikel werde ich Ihnen zeigen, wie Sie Ihre Python-Anwendungen schnell andocken können, damit sie problemlos für alle Benutzer von Docker freigegeben werden können.



Insbesondere werden wir uns Skripte ansehen, die als Hintergrundprozess ausgeführt werden müssen.



Github- und Docker-Repositorys



Wenn die Sichtbarkeit für Sie bequemer ist, lesen Sie die Github- und Docker- Repositorys, in denen dieser Code gehostet wird.



Aber ... warum Docker?



Die Containerisierung kann mit dem Platzieren Ihrer Software in einem Versandcontainer verglichen werden, der eine Standardschnittstelle für die Reederei (oder einen anderen Host-Computer) zur Interaktion mit der Software bietet.



Die Containerisierung von Anwendungen ist eigentlich der Goldstandard für Portabilität.





Allgemeines Docker / Containerization Framework Die



Containerisierung (insbesondere mit Docker ) eröffnet Ihrer Softwareanwendung enorme Möglichkeiten. Eine ordnungsgemäß containerisierte (z. B. dockerisierte) Anwendung kann von jedem Cloud-Anbieter skalierbar über Kubernetes oder Scale Sets bereitgestellt werden. Und ja, darüber werden wir auch im nächsten Artikel sprechen.



Unsere Bewerbung



Es wird nichts zu kompliziertes sein - wir arbeiten wieder mit einem einfachen Skript, das Änderungen im Verzeichnis überwacht (da ich unter Linux arbeite, ist dies /tmp



). Protokolle werden auf stdout verschoben. Dies ist wichtig, wenn sie in Docker-Protokollen angezeigt werden sollen (dazu später mehr).





main.py: Eine einfache Dateiüberwachungsanwendung



Dieses Programm wird auf unbestimmte Zeit ausgeführt.



Wie üblich haben wir eine Datei requirements.txt



mit Abhängigkeiten, diesmal mit nur einer:





Anforderungen.txt



Erstellen Sie eine Docker-Datei



In meinem vorherigen Artikel haben wir ein Skript für den Installationsprozess im Makefile erstellt, mit dem sie sehr einfach freigegeben werden können. Diesmal machen wir etwas Ähnliches, aber in Docker.





Dockerfile



Wir müssen nicht auf die Details der Struktur und Funktionsweise der Dockerfile eingehen, es gibt detailliertere Tutorials dazu .



Dockerfile-Zusammenfassung - Wir beginnen mit einem Basis-Image, das den vollständigen Python-Interpreter und seine Pakete enthält, installieren dann die Abhängigkeiten (Zeile 6), erstellen ein neues minimalistisches Image (Zeile 9), kopieren die Abhängigkeiten und den Code in ein neues Image (Zeilen 13-). Dies wird als mehrstufiger Build bezeichnet. In unserem Fall wurde die Größe des fertigen Images von 1 GB auf 200 MB reduziert. Wir setzen die Umgebungsvariable (Zeile 17) und den Ausführungsbefehl (Zeile 20) Hier enden wir.



Bild zusammenbauen



Nachdem wir mit der Docker-Datei fertig sind, führen wir einfach den folgenden Befehl aus unserem Projektverzeichnis aus:



sudo docker build -t directory-monitor .









Das Bild zusammenstellen



Ausführen des Bildes



Nach Abschluss der Montage können Sie beginnen, Magie zu erschaffen.



Eines der großartigen Dinge an Docker ist, dass es eine standardisierte Schnittstelle bietet. Wenn Sie also Ihr Programm richtig entwerfen und es dann an eine andere Person übertragen, reicht es aus, zu sagen, dass Sie Docker lernen müssen (wenn die Person es noch nicht weiß) und ihm nicht die Feinheiten des Geräts Ihres Programms beibringen müssen.



Willst du sehen, was ich meine?



Der Befehl zum Ausführen des Programms sieht folgendermaßen aus:





Hier gibt es viel zu erklären, also teilen wir es in Teile auf:



-d



- Starten des Bildes im getrennten Modus, nicht im Vordergrundmodus



--restart=always



- Wenn der Docker-Container abstürzt, wird es neu gestartet . Wir können uns von Unfällen erholen, Hurra!



--e DIRECTORY='/tmp/test'



- Wir übergeben das zu überwachende Verzeichnis mithilfe von Umgebungsvariablen. (Wir können unser Python-Programm auch so gestalten, dass Argumente gelesen und das verfolgte Verzeichnis auf diese Weise übergeben werden.)



-v /tmp/:/tmp/



- Hängen Sie das Verzeichnis /tmp



in das /tmp



Docker-Containerverzeichnis ein. Dies ist wichtig: Jedes Verzeichnis, das wir verfolgen möchten, MUSS für unsere Prozesse im Docker-Container sichtbar sein, und so wird es implementiert.



directory-monitor



- Name des zu



startenden Bildes Nach dem Start des Bildes kann dessen Status mit dem folgenden Befehl überprüft werden docker ps



:









Docker ps output Docker generiert verrückte Namen für das Ausführen von Containern, da sich die Benutzer nicht sehr gut an Hash-Werte erinnern. In diesem Fall bezieht sich der Name crazy_wozniak auf unseren Container.



Da wir nun /tmp/test



auf meinem lokalen Computer nachverfolgen, sollte dies in den Containerprotokollen angezeigt werden, wenn ich eine neue Datei in diesem Verzeichnis erstelle:





Docker-Protokolle zeigen, dass die Anwendung ordnungsgemäß funktioniert.



Jetzt ist Ihr Programm dockerisiert und läuft auf Ihrem Computer. Als nächstes müssen wir das Problem der Übertragung des Programms auf andere Personen lösen.



Teilen Sie das Programm



Ihr Docker-Programm kann für Ihre Kollegen, Freunde, Sie in Zukunft und alle anderen auf der Welt nützlich sein. Daher müssen wir die Verteilung vereinfachen. Die ideale Lösung hierfür ist der Docker Hub .



Wenn Sie noch kein Konto haben, registrieren Sie sich und melden Sie sich dann bei cli an:





Melden Sie sich bei Dockerhub an. Markieren Sie als



Nächstes das neu erstellte Bild und senden Sie es an Ihr Konto.





Fügen Sie eine Beschriftung hinzu und drücken Sie das Bild





Jetzt befindet sich das Image in Ihrem Docker-Hub-Konto.



Um sicherzustellen, dass alles funktioniert, versuchen wir, dieses Image abzurufen und es für End-to-End-Tests aller von uns geleisteten Arbeit zu verwenden:





End-to-End-Test unseres Docker-Images.



Dieser gesamte Vorgang dauerte nur 30 Sekunden.



Was weiter?



Hoffentlich konnte ich Sie von der erstaunlichen Praktikabilität der Containerisierung überzeugen. Docker wird lange bei uns bleiben, und je früher Sie es beherrschen, desto mehr Vorteile erhalten Sie.



Bei Docker geht es darum, die Komplexität zu reduzieren. In unserem Beispiel war es ein einfaches Python-Skript, aber Sie können dieses Tutorial verwenden, um Bilder beliebiger Komplexität mit Abhängigkeitsbäumen zu erstellen, die Spaghetti ähneln. Diese Schwierigkeiten wirken sich jedoch nicht auf den Endbenutzer aus .



Quellen von










Werbung



Vdsina bietet virtuelle Server unter Linux oder Windows an. Wir verwenden ausschließlich Markengeräte , das beste proprietäre Server-Control-Panel seiner Art und eines der besten Rechenzentren in Russland und der EU. Beeilen Sie sich, um zu bestellen!






All Articles