Docker für das Frontend. Teil 2. Was bist du?


Ich entschlüssele weiterhin meinen Docker- Bericht für das Front-End von der FrontendConf 2019- Konferenz.


Im vorherigen Teil habe ich versucht, die Frage zu beantworten, warum der Front-End-Entwickler Docker möglicherweise benötigt. Heute werde ich versuchen, in einer einfachen Sprache zu beschreiben, was für ein Tool es ist, wie es funktioniert, und es mit anderen im Frontend bekannten Konzepten zu vergleichen.


Inhalt


  1. Docker für das Frontend. Teil 1. Warum?
  2. Docker für das Frontend. Teil 2. Was bist du?
  3. Docker für das Frontend. Teil 3. Einige Rezepte

Was bist du


Wer nicht weiß, was Docker ist, stellt es sich anders vor.



Jemand denkt, dass dies ein Mittel ist, um den Container auf der Maschine zu installieren.



Unter der Ankündigung im VK des vorherigen Teils dieses Artikels erschienen einige komische Kommentare.



Und nur Systemadministratoren scheinen etwas zu wissen.



Die Jungs von Docker, Inc präsentieren uns dieses Tool mit dem Marketing-Slogan:


Debuggen Sie Ihre Anwendung, nicht Ihre Umgebung
Sammeln, teilen und starten Sie jede Anwendung sicher und überall

Sie ist ein bisschen gerissen. Es ist wirklich möglich, zu sammeln, zu teilen und zu starten. Aber mit "sicher" und mit "überall" ist es nicht ganz so.


Sie können sich zum Beispiel in diesem Artikel über Sicherheitsprobleme informieren, aber über "irgendwo" werde ich noch etwas weiter reden.


Virtualisierung


Die Möglichkeit einer Virtualisierung ist lange her.


Als ich mich 2012 weiterentwickelte, hat mein Team Ruby on Rails-Projekte durchgeführt. Ich musste Dinge wie Ruby , MySQL , PostgreSQL auf meinem Laptop ausführen. Dies alles funktionierte unter Windows ziemlich schlecht, so dass ich Virtualisierung verwenden musste.


Dann gab es Lösungen wie VirtualBox , VMware Workstation , Vagrant . Die gesamte Arbeitsumgebung wurde auf die virtuelle Maschine übertragen, und nur die IDE , Git und der Browser blieben im Hostsystem.



Dieses Diagramm aus der Docker-Dokumentation zeigt lediglich, wie virtuelle Maschinen ( VMs ) funktionieren.


Wir haben Infrastruktur (unser Computer) und Hypervisor (VMWare, VirtualBox oder etwas anderes). Und für all dies führen wir eine virtuelle Maschine aus, die das Gastbetriebssystem ( Guest OS ), die erforderlichen Bibliotheken ( Bins / Libs ) und unsere Anwendung ( App ) enthält.


Natürlich waren die virtuellen Maschinen selbst sehr groß und langsam. Der Aufwand für die Wartung der virtuellen Maschine war hoch. Mein Laptop hat kaum alles rausgenommen.



Docker, Inc schlug vor, das Gastbetriebssystem nicht in einen virtuellen Container zu ziehen, sondern das Hostsystem zu verwenden und die Prozessisolierung mithilfe des cgroups- Mechanismus in Linux zu erhalten .


Dadurch wurde die Größe der Bilder erheblich reduziert. Ein alpine: 3.11.0-Image (eine Linux-Distribution, die sich auf Sicherheit, Leichtigkeit und geringe Ressourcenanforderungen konzentriert) wiegt beispielsweise nur 2,5 MB und ein Docker-Image mit node: alpine nur 27 MB .


Das heißt Unsere Site / Anwendung kann in ein 30-MB- Image gepackt werden, das ausreicht, um in Docker ausgeführt zu werden. Funktioniert es überall? Ja, aber es gibt Nuancen.


Installieren Sie Docker


Docker wird in zwei Editionen vertrieben: Community Edition (CE) und Enterprise Edition (EE) . Wir brauchen Docker CE , weil Es ist kostenlos und löst alle Probleme, die wir brauchen.


Und Docker ist auch Desktop und Server .



Server


Serverversionen können unter Linux installiert werden und unterstützen 4 Distributionen und nur einige Architekturen. Daher ist die Aussage, dass Sie den Docker-Container "überall" ausführen können, nicht ganz richtig.


Desktop


Desktop- Versionen sind für die Installation auf Computern durch Entwickler vorgesehen. Und das wird uns bei der Entwicklung unserer coolen Anwendungen helfen. Insbesondere verwende ich Docker Desktop für Mac .


Die Installation auf einem Computer kommt einem Mac-Benutzer so bekannt wie möglich vor.



Oder wenn Sie Homebrew mögen.


brew cask install docker 

Danach wird die Anwendung in der oberen Statusleiste und über die Konsole verfügbar.



Die Einschränkung besteht darin, dass Linux-Kontrollgruppen ( cgroups ) auf Mac und Windows fehlen (Überraschung, Überraschung). Docker Desktop verwendet daher das Mac OS Hypervisor-Framework bzw. Microsoft Hyper-V .



Das heißt, um die Virtualisierung zu unterstützen, müssen etwa 4 GB RAM freigegeben werden. Dann benötigen Arbeitscontainer jedoch bereits viel weniger Platz, als wenn sie auf separaten virtuellen Maschinen ausgeführt würden.


Die Ausgabe des docker stats :


 CONTAINER ID NAME MEM USAGE e4941ea92ce7 nginx_1 3.16MiB 1b023bfff38f api_1 351.5MiB e07c6958e378 pg_1 18.64MiB 1fa783f5fdbc terminal-front_1 14.89MiB 72e9dfa0805a adminer_1 11.19MiB e9ce9f965867 admin-front_1 1.312MiB 3edacc59a77b certbot_1 1.547MiB 

Wir sehen, dass die Datenbank 19 MB und die Java-API - 352 MB beansprucht .


Was ist in Docker Desktop enthalten?


Docker ist modular aufgebaut. Wenn Sie Docker Desktop installieren, erhalten Sie mehrere Programme gleichzeitig.


Docker-Engine


Die Docker Engine enthält Tools zum Erstellen von Containern, eine Container-Registrierung, Orchestrierungs-Tools, eine Laufzeitumgebung und vieles mehr. Dies ist ein Open Source-Projekt, das in Go geschrieben wurde. Es startet als Daemon , der eine RESTful-API zum Ausführen von Befehlen bereitstellt.


Mit dieser Lösung können Sie Container von nahezu jedem Ort aus verwalten, z. B. von einem Browser , Node.js oder sogar von Minecraft aus .



Docker CLI-Client


Konsolenclient für die Docker Engine-API.


Auch ein Open-Source-Projekt in Go geschrieben .


Docker verfassen


Ein Tool zum Beschreiben und Starten von Anwendungen mit mehreren Containern. Extrem nützliche Sache in der Entwicklung.


Fühlt sich an wie ein SRE . Natürlich in Python geschrieben.


Docker-Maschine


Ein Tool zum Verwalten von Remote-Hosts, auf denen Docker installiert ist. Wir werden nicht in der Entwicklung eingesetzt, sondern kommen mit dem Rest.


Kitematisch


Open Source Docker Engine API GUI geschrieben in JavaScript (Electron) .


Ideal für diejenigen, die die Konsole nicht mögen und auch für GIT die grafische Oberfläche verwenden.


Das Tool ist ziemlich grob, funktioniert aber ( v0.17.9 , > 800 offene Probleme ).



Docker ist nicht nur für Administratoren


Jetzt ein bisschen freie Analogie für Front-End-Entwickler, um zu zeigen, dass dieses Tool vieles gemeinsam hat mit Dingen, die uns Front-End-Entwicklern wie Node.js und NPM vertraut sind.


Bild


Docker-Bild. Wir können es irgendwo veröffentlichen, zum Beispiel in DockerHub. Wir können auch ein NPM- .


Dockerfile


Das Rezept für ein Bild. Wir haben keine Rezepte, aber es gibt ein Paket- / Anwendungsmanifest - package.json .


Docker bauen


Zusammensetzen des Docker-Images. Nun, am Frontend bauen wir unsere Anwendung - npm run build .


Dockerhub



Nicht zu verwechseln mit einem anderen beliebten Hub. Dies ist eine Registrierung von Docker-Bildern. Wir haben unsere eigene Registry - NPM Registry .


Hafenarbeiter laufen


Der Konsolenbefehl, der den Container startet. Das nächste Analogon aus der Welt des Frontends ist der Befehl npm start .


Das Projekt begann als Eigenentwicklung


Das Docker- Projekt begann 2008 als interne Eigenentwicklung von dotCloud und wurde erst im März 2013 in Open Source veröffentlicht.


Wir haben Node.js , das war zwar ursprünglich Open Source, aber bis Februar 2015 und die skandalöse Geschichte mit io.js wurde von Joyent verwaltet .


Für alles verwendet


Wir alle wissen, dass NPM der Node Package Manager ist . Früher war es so, aber jetzt gibt es Pakete nicht nur für Node.js , sondern auch für den Browser .


Und möglicherweise gibt es dort keine Pakete. Wenn Sie möchten, können Sie dort eine Reihe von Schriftarten oder sogar einen Film einfügen.


Gleiches gilt für DockerHub . Sie können dort alles veröffentlichen. Es gibt keine Vormoderation.


Es gibt Alternativen, die ersetzt werden sollen


Wir alle wissen, dass es alternative Paketmanager gibt, die Sie verwenden können, wenn Sie NPM nicht mögen. Dies ist Yarn , PNP , JSPM .


Docker kann auch durch Alternativen ersetzt werden. Zum Beispiel Podmad oder Buildah .


Einige Rezepte


Ich hoffe, dass ich in der Lage war, allgemein über dieses Tool zu skizzieren.


Im nächsten Teil plane ich , Rezepte und spezielle Fälle der Verwendung von Docker für das Front-End zu zeigen.

Source: https://habr.com/ru/post/de479018/


All Articles