Ich entwickle hauptsächlich mit Visual Studio unter Windows. Das Problem ist, dass Windows nach einer Weile festsitzt und ich Windows neu installieren muss. Ebenso ist die Umstellung auf neue Maschinen ein Problem.
Die Neuinstallation von Windows ist schmerzhaft, da meine Entwicklungsumgebung viele Abhängigkeiten aufweist (z. B. zusätzliche MSBuild-Konfigurationsdateien, VS-Erweiterungen, npm, Java usw.). Ich kann mir nicht vorstellen, dass ich mit einem komplexen System allein bin, und die Wiederherstellung würde wahrscheinlich mindestens einen Tag dauern.
Ich habe Docker nicht wirklich verwendet, aber theoretisch klingt es so, als könnte ich meine Entwicklungsumgebung in einem Windows-Container einrichten und sie dann einfach versenden (z. B. auf meinen Laptop kopieren, eine neue Windows-Installation durchführen) und es sollte schmerzlos sein .
Ist das, was ich beschreibe, möglich? Gibt es Nachteile wie Leistung, Zuverlässigkeit? Andere Fallstricke?
Antworten:
Dies ist kein ungewöhnliches Problem, aber Docker ist nicht wirklich das richtige Werkzeug, um es zu lösen. Container im Allgemeinen (einschließlich Docker) sollen eine Anwendungslaufzeit für einen einzelnen Prozess , z. B. einen Webserver, bereitstellen , nicht für ein Szenario mit mehreren Prozessen, z. B. eine Entwicklungsumgebung. In kann getan werden, ist aber keine sehr elegante Lösung.
Ein besserer (und häufigerer) Ansatz besteht darin, VMs entweder über einen herkömmlichen Hypervisor wie VirtualBox oder Hyper-V zu erstellen (da Sie unter Windows arbeiten). Ein typischer Workflow ist:
Vagrant ist auch ein fantastisches Werkzeug, um viele der oben genannten Aufgaben strukturierter zu erledigen.
Ein Nebeneffekt von all dem ist, dass Sie jetzt standardisierte Umgebungen haben, die mit Ihrem gesamten Team geteilt werden können, wodurch jeder die Mühe erspart. Dies ist besonders gut geeignet, um schnell neue Leute zu gewinnen.
Zurück zu Ihrer ursprünglichen Frage, Docker ist nicht wirklich dafür gedacht, aber wenn Sie eine ausreichend kleine Entwicklungsumgebung hätten (z. B. PHP unter Linux), könnten Sie dies in einem Container tun, und der Vorteil wäre ein viel kleineres Image (möglicherweise) unter 100 MB gegenüber vielen GB für eine Windows-VM mit virtueller Festplatte).
quelle
Nicht in einem Docker-Container, sondern in n Docker-Containern.
Während Sie theoretisch Ihre gesamte Entwicklungsumgebung in einem einzigen Container zusammenstellen konnten, war Docker nicht dazu gedacht.
Stattdessen sollten Sie jeden Dienst in separaten Containern bereitstellen, Docker Compose verwenden und Ihre gesamte Infrastruktur in einer einzigen Datei verwalten, wobei jeder Dienst über eine eigene Protokolldatei, einen eigenen Benutzerbereich, ein eigenes Netzwerk usw. verfügt.
Lassen Sie mich ein Beispiel geben, dies ist ein Entwurf von mir
docker-compose.yml
Es gibt einen Nginx-Proxy (myproxy), zwei ähnliche Postgres-Datenbanken (mydb1 und 2), einen alten Java-Webanwendungsserver (www), einen Java-Jetty-Container, der einen Rest-Webdienst bereitstellt, und schließlich einen sehr einfachen SMTP-Postfix-Container.
Alles startet - normalerweise :) -
docker-compose up
entweder auf meiner Entwicklungsmaschine oder in der Produktion; Protokolldateien werden zu einer einfach zu lesenden Datei zusammengefasst, und es ist möglich, fast alle Funktionen lokal zu replizieren, mit der Garantie, dass sie funktionieren, wenn sie auf meinem Laptop funktionieren.quelle
Ich benutze VirtualBox-VMs für solche Dinge.
Die Portabilität, Ihre Entwicklungsumgebung in einem Container zu haben, ist praktisch, aber das wirklich Schöne ist, dass ich das Ding vor jedem Upgrade-Versuch als Schnappschuss erstellen kann. Wenn ich es vermassle, ist es kein Problem, zurückzugreifen und erneut zu starten.
Ich finde es auch hilfreich, dies zu tun, da ich häufig mit mehreren Versionen von Dingen wie Qt arbeite und keine Lust habe, herauszufinden, wie die beiden Versionen nebeneinander existieren können. Stattdessen lege ich sie einfach auf verschiedene VMs und Ich muss mich nicht um Interaktionen kümmern, weil ich etwas falsch installiert habe.
quelle