2016-09-10 1 views
2

Ich möchte mit der Erstellung geeigneter isolierter Umgebungen für Django-Web-Apps beginnen. Meine erste Neigung ist es, Docker zu benutzen. Außerdem wird normalerweise empfohlen, virtualenv mit einem beliebigen Python-Projekt zu verwenden, um Abhängigkeiten zu isolieren.DevOps Einfaches Setup

Ist virtualenv noch erforderlich, wenn ich Projekte über Docker Bilder isoliert?

Antwort

2

Wenn Ihr Docker-Container relativ langlebig ist oder sich Ihre Projektabhängigkeiten ändern, ist die Verwendung einer virtuellen Python-Umgebung weiterhin sinnvoll. Abgesehen von (relativ) isolierenden Abhängigkeiten einer Codebasis von anderen Projekten und dem zugrundeliegenden System (und insbesondere dem Projekt in einem bestimmten Zustand) ermöglicht es ein bestimmtes Maß, den Zustand der Anforderungen zu einem bestimmten Zeitpunkt zu bezeichnen.

Sagen Sie zum Beispiel, dass Sie heute ein Docker-Image für Ihre Django-App erstellen und es für die nächsten drei Wochen verwenden. Wird Ihre requirements.txt Datei zwischenzeitlich geändert? Können Sie sich ein Szenario vorstellen, in dem Sie ein Hotpatch veröffentlichen, das mit Umweltveränderungen einhergeht?

Ab Python 3.3 ist virtual-env stdlib, was bedeutet, dass es sehr billig zu verwenden ist, also würde ich es weiter verwenden, nur für den Fall, dass der Docker-Container nicht so verfügbar ist wie ursprünglich geplant. Anders gesagt, selbst wenn Ihre Docker-Image-Pipeline ziemlich ausgereift ist und die Version von Python und Abhängigkeiten "vorgebacken" sind, ist es so niedrig hängende Frucht, dass es zwar nicht explizit notwendig ist, aber Best Practices beizubehalten.

+0

Wie hilft mir ein virtualenv für Abhängigkeitsänderungen mehr als keinen zu haben? – johnharris85

+0

Durch Bereitstellung einer guten Isolierung und deklarativen Abhängigkeitsverwaltung. Wenn Sie für jede Abhängigkeitsänderung ein neues Docker-Image erstellen (z. B. some_dependency 0.1-> 0.2 oder, noch wichtiger, beim Entfernen eines Pakets) und sicher sind, dass der Python-Pfad Ihres Skripts nur den erwarteten Pfaden folgt, großartig. Aber so habe ich es in der Praxis nicht und virtualenv macht diese kleinen Garantien einfach. Ich meine, man könnte einfach Docker auslassen und LXC benutzen, aber wir reden in Komforttönen. –

+0

virtualenv soll verschiedene Apps trennen. Wenn jeder docker Container etwas ist, nützt dir virtualenv nichts, oder? dh. MyDjangoApp wird niemals eine isolierte Abhängigkeitsstruktur im MyDjangoApp-Container benötigen. –

0

Nein, nicht wirklich, wenn jeder Python/Django in seinem eigenen Container leben wird.

Verwandte Themen