{"id":31641,"date":"2019-10-31T21:42:19","date_gmt":"2019-10-31T18:42:19","guid":{"rendered":"https:\/\/prohoster.info\/blog\/docker-eto-igrushka-ili-net-ili-vsyo-taki-da\/"},"modified":"2019-10-31T21:42:19","modified_gmt":"2019-10-31T18:42:19","slug":"docker-eto-igrushka-ili-net-ili-vsyo-taki-da","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/docker-eto-igrushka-ili-net-ili-vsyo-taki-da","title":{"rendered":"Ist Docker ein Spielzeug oder nicht? Oder vielleicht doch?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hallo zusammen!<\/p>\n<p><\/p>\n<p>Ich m\u00f6chte sofort zum Thema kommen, aber es ist besser, ein wenig \u00fcber meine Geschichte zu erz\u00e4hlen:<\/p>\n<p><\/p>\n<h2>Einleitung<\/h2>\n<p><\/p>\n<p>Ich bin Programmierer mit Erfahrung in der Entwicklung von Frontend-Einzelseitenanwendungen, Scala\/Java und Node.js auf dem Server. <\/p>\n<p><\/p>\n<p>Lange Zeit (schon bestimmt zwei bis drei Jahre) war ich der Meinung, dass Docker ein wahres Geschenk des Himmels ist, ein beeindruckendes Tool, das jeder Entwickler beherrschen sollte. Daraus folgt, dass Docker auf jedem Entwickler-PC installiert sein sollte. Aber was sage ich da \u00fcber meine Meinung? Schaut euch einfach die Stellenanzeigen auf Plattformen wie hh an. In jeder zweiten wird Docker erw\u00e4hnt, und wenn ihr damit vertraut seid, ist das euer Wettbewerbsvorteil \ud83d\ude09<\/p>\n<p><\/p>\n<p>Auf meinem Weg habe ich vielen Menschen begegnet, die unterschiedliche Ansichten zu Docker und seiner \u00d6kosystem hatten. Einige sagten, es sei eine praktische Sache, die Plattformunabh\u00e4ngigkeit garantiert. Andere verstanden nicht, warum sie in Containern arbeiten sollten und welchen Vorteil es bringt. Dritte war es v\u00f6llig egal; sie schrieben einfach ihren Code und gingen nach Hause \u2013 ich beneide sie \u00fcbrigens \ud83d\ude42<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Gr\u00fcnde f\u00fcr die Nutzung<\/h2>\n<p><\/p>\n<p>Warum habe ich Docker verwendet? Wahrscheinlich aus folgenden Gr\u00fcnden:<\/p>\n<p><\/p>\n<ul>\n<li>Datenbank starten, 99 % der Anwendungen nutzen sie.<\/li>\n<li>Nginx f\u00fcr die Bereitstellung von Frontend und Proxierung auf Backend starten.<\/li>\n<li>Es ist m\u00f6glich, die Anwendung in ein Docker-Image zu packen, somit l\u00e4uft meine Anwendung \u00fcberall, wo Docker vorhanden ist, das Problem der Verteilung ist damit bereits gel\u00f6st.<\/li>\n<li>Service Discovery ist standardm\u00e4\u00dfig integriert, es k\u00f6nnen Mikrodienste erstellt werden, jeder Container (der mit dem gemeinsamen Netzwerk verbunden ist) kann leicht \u00fcber einen Alias auf einen anderen zugreifen, sehr praktisch.<\/li>\n<li>Es ist interessant, einen Container zu erstellen und darin zu 'spielen'.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Was mir an Docker immer NICHT gefallen hat:<\/h2>\n<p><\/p>\n<ul>\n<li>Damit meine Anwendung funktioniert, ben\u00f6tige ich Docker auf dem Server. Warum sollte ich das tun, wenn meine Anwendungen bereits auf JRE oder Node.js basieren und die Umgebung daf\u00fcr schon auf dem Server vorhanden ist?<\/li>\n<li>Wenn ich mein (privates) lokal erstelltes Image auf einem Remote-Server starten m\u00f6chte, ben\u00f6tige ich mein eigenes Docker-Repository, ich muss daf\u00fcr sorgen, dass irgendwo ein Registry l\u00e4uft, und ich muss HTTPS konfigurieren, denn Docker CLI funktioniert nur \u00fcber HTTPS. Oh Mann\u2026 nat\u00fcrlich gibt es Optionen, das Image lokal zu speichern \u00fcber <code>docker save<\/code> Und \u00fcber scp einfach das Image zu verschieben... Aber das erfordert so viele Schritte. Au\u00dferdem sieht es bis zur Implementierung eines eigenen Repos wie eine 'Notl\u00f6sung' aus.<\/li>\n<li><code>version: '1'\n    services:\n        simplesample-sonar:\n            image: sonarqube:lts\n            ports:\n                - 9001:9000\n                - 9092:9092\n            network_mode: bridge<\/code>. Es ist nur f\u00fcr das Starten von Containern notwendig. Das war's. Es kann nichts anderes. <code>Docker-compose<\/code> hat eine Menge Versionen seiner Dateien, seine eigene Syntax. So deklarativ es auch sein mag, ich m\u00f6chte deren Dokumentation nicht lesen. Ich brauche sie sonst nirgends.<\/li>\n<li>Wenn man im Team arbeitet, schreiben die meisten Leute Dockerfiles sehr schlecht, verstehen nicht, wie Caching funktioniert, f\u00fcgen alles Notwendige und Unn\u00f6tige zum Image hinzu, leiten von Images ab, die nicht auf Docker Hub oder in privaten Repositories vorhanden sind, und erstellen irgendwelche <code>version: '1'\n    services:\n        simplesample-sonar:\n            image: sonarqube:lts\n            ports:\n                - 9001:9000\n                - 9092:9092\n            network_mode: bridge<\/code> Die Dateien mit den Datenbanken werden nicht persistent gespeichert. Gleichzeitig verk\u00fcnden die Entwickler stolz, dass Docker gro\u00dfartig ist, alles lokal funktioniert und HR in den Stellenanzeigen betont: 'Wir nutzen Docker und suchen einen Kandidaten mit dieser Erfahrung.'<\/li>\n<li>Sie sind st\u00e4ndig besessen von der Idee, alles und jeden in Docker hochzufahren: PostgreSQL, Kafka, Redis. Schade, dass nicht alles in Containern l\u00e4uft und nicht alles leicht konfiguriert und gestartet werden kann. Dies wird von externen Entwicklern unterst\u00fctzt und nicht von den Anbietern selbst. Und \u00fcbrigens stellt sich sofort die Frage, warum sich die Anbieter nicht um die Unterst\u00fctzung ihrer Produkte in Docker k\u00fcmmern. Wissen sie vielleicht etwas, das wir nicht wissen?<\/li>\n<li>Immer wieder stellt sich die Frage nach der Persistenz der Container-Daten. Und dann \u00fcberlegt man, ob ich einfach das Host-Verzeichnis einbinden, ein Docker-Volume erstellen oder einen Data-Container nutzen sollte, der jetzt... <code>deprecated<\/code>? \u0415\u0441\u043b\u0438 \u044f \u043c\u043e\u043d\u0442\u0438\u0440\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0442\u043e \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0447\u0442\u043e uid \u0438 gid \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 id \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0432\u0448\u0435\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u0438\u043d\u0430\u0447\u0435 \u0444\u0430\u0439\u043b\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u043c \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0441 \u043f\u0440\u0430\u0432\u0430\u043c\u0438 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 root. \u0415\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e <code>volume<\/code> die Daten einfach in irgendeinem... <code>\/usr\/*<\/code> Und es wird die gleiche Geschichte mit uid und gid geben wie beim ersten Mal. Wenn du eine Drittanbieterkomponente startest, musst du die Dokumentation sorgf\u00e4ltig durchlesen und nach der Antwort auf die Frage suchen: 'In welche Verzeichnisse schreibt die Komponente Dateien im Container?'<\/li>\n<\/ul>\n<p>Ich mochte es schon immer nicht, dass ich zu lange mit Docker herumhantieren musste. <strong>In der Anfangsphase<\/strong>: habe ich dar\u00fcber nachgedacht, wie ich Container starte, aus welchen Images ich starten soll, und habe Makefiles erstellt, die Aliase f\u00fcr lange Docker-Befehle enthielten. Ich konnte Docker-Compose nicht ausstehen, weil ich nicht ein weiteres Werkzeug im Docker-\u00d6kosystem lernen wollte. Und... <code>docker-compose up<\/code> es hat mich gestresst, besonders wenn dort auch noch... <code>build<\/code> Konstrukte vorkamen und nicht bereits gebaute Images. Alles, was ich wirklich wollte, war, das Produkt effizient und schnell zu erstellen. Doch ich konnte Docker einfach nicht klar strukturieren.<\/p>\n<p><\/p>\n<h2>Die Bekanntschaft mit Ansible<\/h2>\n<p><\/p>\n<p>Vor etwa drei Monaten arbeitete ich mit einem DevOps-Team, dessen fast jedes Mitglied eine negative Einstellung zu Docker hatte. Gr\u00fcnde daf\u00fcr waren:<\/p>\n<p><\/p>\n<ul>\n<li>Docker ver\u00e4ndert die iptables (wobei man das in daemon.json deaktivieren kann)<\/li>\n<li>Docker ist instabil und wir m\u00f6chten es nicht in der Produktion einsetzen<\/li>\n<li>Wenn der Docker-Daemon abst\u00fcrzt, fallen dementsprechend alle Container der Infrastruktur aus<\/li>\n<li>Docker ist nicht notwendig<\/li>\n<li>Warum Docker, wenn es Ansible und virtuelle Maschinen gibt?<\/li>\n<\/ul>\n<p><\/p>\n<p>Bei der gleichen Arbeit lernte ich ein weiteres Tool kennen \u2014 Ansible. Fr\u00fcher hatte ich schon davon geh\u00f6rt, aber nie eigene Playbooks geschrieben. Jetzt begann ich mit meinen Tasks zu experimentieren und meine Sichtweise \u00e4nderte sich vollst\u00e4ndig! Denn ich erkannte: Ansible hat Module, um die gleichen Docker-Container, Image-Bauten, Netzwerke usw. zu starten, und die Container k\u00f6nnen nicht nur lokal, sondern auch auf entfernten Servern gestartet werden! Meine Begeisterung kannte keine Grenzen \u2014 ich fand ein WERKZEUG, das wirklich funktioniert, und verworfen meine Makefile- und Docker-Compose-Dateien, die durch YAML-Tasks ersetzt wurden. Der Code wurde durch die Verwendung von Konstruktionen wie <code>loop<\/code>, <code>when<\/code>, usw.<\/p>\n<p><\/p>\n<h2>Docker zum Starten von externen Komponenten wie Datenbanken<\/h2>\n<p><\/p>\n<p>K\u00fcrzlich habe ich mich mit SSH-Tunneln vertraut gemacht. Es stellte sich heraus, dass es sehr einfach ist, einen Remote-Server-Port auf einen lokalen Port weiterzuleiten. Der Remote-Server kann sowohl eine Cloud-Maschine als auch eine virtuelle Maschine sein, die in VirtualBox l\u00e4uft. Wenn ich oder mein Kollege eine Datenbank (oder ein anderes externes Element) ben\u00f6tigen, k\u00f6nnen wir einfach den Server mit diesem Element starten und ihn abschalten, wenn er nicht mehr ben\u00f6tigt wird. Die Portweiterleitung hat denselben Effekt wie eine in einem Docker-Container laufende Datenbank.<\/p>\n<p><\/p>\n<p>Dieser Befehl leitet meinen lokalen Port an den Remote-Server mit PostgreSQL weiter:<\/p>\n<p><\/p>\n<blockquote><p>ssh -L 9000:localhost:5432 user@example.com<\/p><\/blockquote>\n<p>Die Verwendung eines Remote-Servers l\u00f6st das Problem der Teamarbeit in der Entwicklung. An diesem Server k\u00f6nnen mehrere Entwickler gleichzeitig arbeiten, ohne PostgreSQL konfigurieren oder sich mit Docker und anderen Feinheiten auseinandersetzen zu m\u00fcssen. Auf dem Remote-Server kann dieselbe Datenbank in Docker installiert werden, falls eine spezielle Version erforderlich ist. Alles, was die Entwickler ben\u00f6tigen, ist SSH-Zugang!<\/p>\n<p><\/p>\n<p>Neulich habe ich gelesen, dass SSH-Tunnel eine eingeschr\u00e4nkte Funktionalit\u00e4t im Vergleich zu einem herk\u00f6mmlichen VPN bieten! Man kann einfach OpenVPN oder andere VPN-Implementierungen einrichten, die Infrastruktur konfigurieren und diese den Entwicklern zur Verf\u00fcgung stellen. Das ist doch gro\u00dfartig!<\/p>\n<p><\/p>\n<p>Zum Gl\u00fcck bieten AWS, Google Cloud und andere einen kostenlosen Jahrgang, nutzen Sie sie also! Sie sind kosteng\u00fcnstig, wenn man sie nur dann nutzt, wenn man sie ben\u00f6tigt. Ich habe mich immer gefragt, wof\u00fcr ich einen Remote-Server wie GCloud brauchen k\u00f6nnte \u2013 es scheint, als h\u00e4tte ich die Antwort gefunden.<\/p>\n<p><\/p>\n<p>Als virtuelle Maschine vor Ort kann man dasselbe Alpine verwenden, das aktiv in Docker-Containern genutzt wird. Oder man nimmt andere leichtgewichtige Distributionen, um die Maschine schneller zu starten.<\/p>\n<p><\/p>\n<p>Fazit: Datenbanken und andere infrastrukturelle Tools sollten auf entfernten Servern oder in VirtualBox gestartet werden. Docker ben\u00f6tige ich f\u00fcr diese Zwecke nicht.<\/p>\n<p><\/p>\n<h2>Ein bisschen \u00fcber Docker-Images und Distribution<\/h2>\n<p><\/p>\n<p>Ich habe bereits geschrieben <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/443136\/\">den Artikel<\/a><\/noindex> Ich wollte vermitteln, dass die Verwendung von Docker-Images keine Garantie bietet. Docker-Images sind lediglich dazu da, um einen Docker-Container zu erstellen. Wenn Sie mit einem Docker-Image arbeiten, arbeiten Sie mit Docker-Containern, und Sie werden nur damit arbeiten.<\/p>\n<p><\/p>\n<p>Haben Sie jemals gesehen, dass Softwareentwickler ihre Produkte ausschlie\u00dflich in einem Docker-Image portiert haben?<br \/>\nDas Ergebnis der meisten Produkte sind Bin\u00e4rdateien f\u00fcr eine bestimmte Plattform, die einfach in ein Docker-Image integriert werden, das von der entsprechenden Plattform erbt. Haben Sie sich niemals gefragt, warum es so viele \u00e4hnliche Images auf Docker Hub gibt? Geben Sie zum Beispiel nginx ein, und Sie werden tausende von Images von verschiedenen Leuten sehen. Diese Personen haben nicht selbst nginx entwickelt; sie haben einfach das offizielle nginx in ihr Docker-Image integriert und ihre Konfigurationen hinzugef\u00fcgt, um die Containerbereitstellung zu erleichtern. <\/p>\n<p><\/p>\n<p>Im Allgemeinen kann man einfach in tgz speichern. Wenn jemand das in Docker ausf\u00fchren m\u00f6chte, sollte er tgz in das Dockerfile hinzuf\u00fcgen, das passende Umfeld erben und zus\u00e4tzliche Funktionen erstellen, die die Anwendung in tgz nicht \u00e4ndern. Derjenige, der das Docker-Image erstellt, wird wissen, was dieses tgz ist und was er f\u00fcr die Arbeit ben\u00f6tigt. So nutze ich Docker. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kondaurovDev\/dockerfile\">hier<\/a><\/noindex><\/p>\n<p><\/p>\n<p>Fazit: Ich brauche kein Docker-Registry, sondern verwende irgendeinen S3-Dienst oder einfach einen Dateispeicher wie Google Drive\/Dropbox.<\/p>\n<p><\/p>\n<h2>Docker in CI<\/h2>\n<p><\/p>\n<p>Alle Unternehmen, in denen ich gearbeitet habe, sind einander \u00e4hnlich. Sie sind in der Regel produktorientiert, das hei\u00dft, sie haben eine bestimmte Anwendung und einen Technologie-Stack (vielleicht ein paar Programmiersprachen).<\/p>\n<p><\/p>\n<p>Diese Unternehmen nutzen Docker auf ihren Servern, wo der CI-Prozess l\u00e4uft. Die Frage ist: Warum sollte man Projekte in einem Docker-Container auf seinen Servern bauen? Warum nicht einfach die Umgebung f\u00fcr den Build vorbereiten, zum Beispiel ein Ansible-Playbook schreiben, das die erforderlichen Versionen von Node.js, PHP, JDK installiert, SSH-Schl\u00fcssel usw. auf den Server kopiert, auf dem der Build stattfindet? <\/p>\n<p><\/p>\n<p>Jetzt verstehe ich, dass das sch\u00e4dlich ist, weil Docker mit seiner Isolation keinen Gewinn bringt. Hier sind die Probleme mit CI in Docker, mit denen ich konfrontiert war:<\/p>\n<p><\/p>\n<ul>\n<li>Ich ben\u00f6tige erneut ein Docker-Image f\u00fcr den Build. Ich muss nach einem Image suchen oder mein eigenes Dockerfile schreiben.<\/li>\n<li>Es besteht eine 90%ige Wahrscheinlichkeit, dass ich SSH-Schl\u00fcssel oder geheime Daten weitergeben muss, die ich nicht im Docker-Image hinterlegen m\u00f6chte.<\/li>\n<li>Der Container wird erstellt und stirbt, wodurch alle Caches verloren gehen. Der n\u00e4chste Build wird alle Projektabh\u00e4ngigkeiten erneut herunterladen, was lange dauert und ineffizient ist. Zeit ist schlie\u00dflich Geld.<\/li>\n<\/ul>\n<p><\/p>\n<p>Entwickler bauen Projekte nicht in Docker-Containern. Ich war fr\u00fcher auch einmal ein Fan davon, aber ich bedaure mein fr\u00fcheres Ich. In Java gibt es die M\u00f6glichkeit, mehrere Versionen zu haben und mit einem Befehl auf die ben\u00f6tigte Version umzuschalten. In Node.js funktioniert es genauso, da gibt es nvm.<\/p>\n<p><\/p>\n<h2>Fazit<\/h2>\n<p><\/p>\n<p>Ich denke, dass Docker ein \u00e4u\u00dferst leistungsf\u00e4higes und flexibles Werkzeug ist, was auch seinen Nachteil darstellt (klingt seltsam, oder?). Damit k\u00f6nnen Unternehmen sich leicht darauf verlassen und es dort einsetzen, wo es n\u00f6tig ist, aber auch wo es nicht n\u00f6tig w\u00e4re. Entwickler starten ihre Container, erstellen ihre Umgebung, und all das flie\u00dft dann nahtlos in die CI und Produktion \u00fcber. Das DevOps-Team entwickelt verschiedene L\u00f6sungen, um diese Container zu starten.<\/p>\n<p><\/p>\n<p>Verwenden Sie Docker nur in <strong>der letzten Phase<\/strong> Ihres Arbeitsprozesses, bringen Sie es nicht zu Beginn ins Projekt ein. Es wird Ihre Gesch\u00e4ftsprobleme nicht l\u00f6sen. Es verschiebt die Probleme lediglich auf eine ANDERE Ebene und bietet Ihnen eigene L\u00f6sungsvorschl\u00e4ge an, w\u00e4hrend Sie doppelte Arbeit leisten.<\/p>\n<p><\/p>\n<p><strong><em>Wann Docker n\u00f6tig ist<\/em><\/strong>: Ich bin zu dem Schluss gekommen, dass Docker hervorragend darin ist, den etablierten Prozess zu optimieren, jedoch nicht beim Aufbau grundlegender Funktionalit\u00e4ten.<\/p>\n<p><\/p>\n<p>Falls Sie sich dennoch f\u00fcr die Nutzung von Docker entscheiden:<\/p>\n<p><\/p>\n<ul>\n<li>Seien Sie \u00e4u\u00dferst vorsichtig.<\/li>\n<li>Zwingen Sie den Entwicklern nicht auf, Docker zu verwenden.<\/li>\n<li>Lokalisieren Sie seinen Einsatz an einem Ort, verteilen Sie nicht die Dockefile und docker-compose \u00fcber alle Repositories.<\/li>\n<\/ul>\n<p><\/p>\n<p>PS:<\/p>\n<p><\/p>\n<ul>\n<li>K\u00fcrzlich stie\u00df ich auf <noindex><a rel=\"nofollow\" href=\"https:\/\/www.packer.io\/\">packer<\/a><\/noindex> Und er sagt, dass es sehr gut mit Ansible funktioniert und den Prozess der Erstellung von Images (einschlie\u00dflich Docker-Images) vereinheitlicht.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.smashcompany.com\/technology\/docker-is-a-dangerous-gamble-which-we-will-regret\">Auch \u00fcber Docker, ein interessanter Artikel.<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p>Danke, dass Sie bis hierher gelesen haben. Ich w\u00fcnsche Ihnen transparente L\u00f6sungen in Ihren Gesch\u00e4ften und produktive Arbeitstage!<\/p>\n<p>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/445914\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041e\u043e\u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0442\u0435\u043c\u0435, \u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u043c\u043e\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e: \u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u042f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0441 \u043e\u043f\u044b\u0442\u043e\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 frontend \u043e\u0434\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, scala\/java \u0438 nodejs \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435. \u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0433\u043e (\u0443\u0436\u0435 \u0442\u043e\u0447\u043d\u043e \u043f\u0430\u0440\u0443 \u2014 \u0442\u0440\u043e\u0439\u043a\u0443 \u043b\u0435\u0442), \u044f \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b\u0441\u044f \u043c\u043d\u0435\u043d\u0438\u044f, \u0447\u0442\u043e docker \u044d\u0442\u043e \u043c\u0430\u043d\u043d\u0430 \u043d\u0435\u0431\u0435\u0441\u043d\u0430\u044f \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0443\u0442\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0438 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043a\u0430\u0436\u0434\u044b\u0439 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-31641","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041e\u043e\u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0442\u0435\u043c\u0435, \u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u043c\u043e\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e: \u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u042f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0441 \u043e\u043f\u044b\u0442\u043e\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 frontend \u043e\u0434\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, scala\/java \u0438 nodejs \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435. \u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0433\u043e (\u0443\u0436\u0435 \u0442\u043e\u0447\u043d\u043e \u043f\u0430\u0440\u0443 \u2014 \u0442\u0440\u043e\u0439\u043a\u0443 \u043b\u0435\u0442), \u044f \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b\u0441\u044f \u043c\u043d\u0435\u043d\u0438\u044f, \u0447\u0442\u043e docker \u044d\u0442\u043e \u043c\u0430\u043d\u043d\u0430 \u043d\u0435\u0431\u0435\u0441\u043d\u0430\u044f \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0443\u0442\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0438 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043a\u0430\u0436\u0434\u044b\u0439\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/docker-eto-igrushka-ili-net-ili-vsyo-taki-da\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Docker \u2014 \u044d\u0442\u043e \u0438\u0433\u0440\u0443\u0448\u043a\u0430 \u0438\u043b\u0438 \u043d\u0435\u0442? \u0418\u043b\u0438 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0434\u0430? | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041e\u043e\u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0442\u0435\u043c\u0435, \u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u043c\u043e\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e: \u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u042f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0441 \u043e\u043f\u044b\u0442\u043e\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 frontend \u043e\u0434\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, scala\/java \u0438 nodejs \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435. \u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0433\u043e (\u0443\u0436\u0435 \u0442\u043e\u0447\u043d\u043e \u043f\u0430\u0440\u0443 \u2014 \u0442\u0440\u043e\u0439\u043a\u0443 \u043b\u0435\u0442), \u044f \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b\u0441\u044f \u043c\u043d\u0435\u043d\u0438\u044f, \u0447\u0442\u043e docker \u044d\u0442\u043e \u043c\u0430\u043d\u043d\u0430 \u043d\u0435\u0431\u0435\u0441\u043d\u0430\u044f \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0443\u0442\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0438 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043a\u0430\u0436\u0434\u044b\u0439\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/docker-eto-igrushka-ili-net-ili-vsyo-taki-da\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:42:19+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:42:19+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Ist Docker ein Spielzeug oder nicht? Oder vielleicht doch?","description":"Hallo zusammen! Ich m\u00f6chte am liebsten sofort mit dem Thema anfangen, aber es w\u00e4re besser, ein wenig \u00fcber meine Geschichte zu erz\u00e4hlen: Einleitung Ich bin Programmierer mit Erfahrung in der Entwicklung von Frontend-Einseitenanwendungen, Scala\/Java und Node.js auf dem Server. Lange Zeit (schon sicher zwei bis drei Jahre) war ich der Meinung, dass Docker ein Geschenk des Himmels und ein absolut tolles Tool ist und dass es jeder sollte.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/docker-eto-igrushka-ili-net-ili-vsyo-taki-da","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Docker \u2014 \u044d\u0442\u043e \u0438\u0433\u0440\u0443\u0448\u043a\u0430 \u0438\u043b\u0438 \u043d\u0435\u0442? \u0418\u043b\u0438 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0434\u0430? | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041e\u043e\u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0442\u0435\u043c\u0435, \u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u043c\u043e\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e: \u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u042f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0441 \u043e\u043f\u044b\u0442\u043e\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 frontend \u043e\u0434\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, scala\/java \u0438 nodejs \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435. \u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0433\u043e (\u0443\u0436\u0435 \u0442\u043e\u0447\u043d\u043e \u043f\u0430\u0440\u0443 \u2014 \u0442\u0440\u043e\u0439\u043a\u0443 \u043b\u0435\u0442), \u044f \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b\u0441\u044f \u043c\u043d\u0435\u043d\u0438\u044f, \u0447\u0442\u043e docker \u044d\u0442\u043e \u043c\u0430\u043d\u043d\u0430 \u043d\u0435\u0431\u0435\u0441\u043d\u0430\u044f \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0443\u0442\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0438 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043a\u0430\u0436\u0434\u044b\u0439","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/docker-eto-igrushka-ili-net-ili-vsyo-taki-da","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:42:19+00:00","article:modified_time":"2019-10-31T18:42:19+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"31641","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 07:08:22","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:13:28","updated":"2026-01-21 07:08:22"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/31641","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=31641"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/31641\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=31641"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=31641"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=31641"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}