{"id":91905,"date":"2020-08-20T07:42:23","date_gmt":"2020-08-20T05:42:23","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii"},"modified":"2020-08-20T07:42:23","modified_gmt":"2020-08-20T05:42:23","slug":"chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii","title":{"rendered":"Was ist Docker: ein kurzer \u00dcberblick \u00fcber die Geschichte und die wichtigsten Abstraktionen","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Am 10. August startete <noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/2patKQ\">ein Videokurs zu Docker<\/a><\/noindex>, in dem wir ihn vollst\u00e4ndig behandeln \u2013 von den grundlegenden Abstraktionen bis zu den Netzwerkkonfigurationen. <\/p>\n<p><\/p>\n<p>In diesem Artikel sprechen wir \u00fcber die Geschichte von Docker und seine grundlegenden Abstraktionen: Image, Cli, Dockerfile. Die Lektion richtet sich an Anf\u00e4nger, weshalb sie wahrscheinlich f\u00fcr erfahrene Benutzer nicht interessant sein wird. Hier wird es keine Blutbad, keinen Blinddarm und kein tiefes Eintauchen geben. Die Grundlagen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Was ist Docker: ein kurzer \u00dcberblick \u00fcber die Geschichte und die wichtigsten Abstraktionen\" src=\"\/wp-content\/uploads\/2020\/08\/f01af417f24c838577b09bdf90f02fb9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"chto-takoe-docker\">Was ist Docker<\/h2>\n<p><\/p>\n<p>Schauen wir uns die Definition von Docker auf Wikipedia an.<\/p>\n<p><\/p>\n<blockquote><p>Docker ist eine Software zur Automatisierung der Bereitstellung und Verwaltung von Anwendungen in containerisierten Umgebungen.<\/p><\/blockquote>\n<p>Aus dieser Definition wird nichts klar. Besonders unklar ist, was \u201ein containerisierten Umgebungen\u201c bedeutet. Um dies zu kl\u00e4ren, gehen wir zur\u00fcck in die Vergangenheit. Beginnen wir in der Zeit, die ich bedingt als \u201emonolithische \u00c4ra\u201c bezeichne.<\/p>\n<p><\/p>\n<h2 id=\"monolitnaya-era\">Monolithische \u00c4ra<\/h2>\n<p><\/p>\n<p>Die monolithische \u00c4ra ist der Anfang der 2000er Jahre, als alle Anwendungen monolithisch waren und viele Abh\u00e4ngigkeiten hatten. Die Entwicklung dauerte lange. Zu dieser Zeit gab es nicht viele Server, wir kannten sie alle beim Namen und \u00fcberwachten sie. Es gibt einen am\u00fcsanten Vergleich:<\/p>\n<p>\n<center><div class=\"youtube-placeholder\" data-id=\"Od7e6hqis7A\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/Od7e6hqis7A\/hqdefault.jpg\" alt=\"Video abspielen\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<p>Haustiere \u2013 das sind Haustiere. In der monolithischen \u00c4ra behandelten wir unsere Server wie Haustiere, pflegten und hegen sie und bliesen den Staub ab. Um die Ressourcen besser zu verwalten, nutzten wir Virtualisierung: Wir nahmen einen Server und teilten ihn in mehrere virtuelle Maschinen, um damit Isolierung der Umgebung zu gew\u00e4hrleisten.<\/p>\n<p><\/p>\n<h2 id=\"sistemy-virtualizacii-na-baze-gipervizora\">Virtualisierungssysteme auf Hypervisor-Basis<\/h2>\n<p><\/p>\n<p>\u00dcber Virtualisierungssysteme hat sicherlich jeder schon geh\u00f6rt: VMware, VirtualBox, Hyper-V, Qemu KVM usw. Sie bieten Isolierung f\u00fcr Anwendungen und Ressourcenmanagement, haben jedoch auch Nachteile. Um Virtualisierung zu erm\u00f6glichen, wird ein Hypervisor ben\u00f6tigt. Und ein Hypervisor bedeutet Ressourcen\u00fcberkopf. Au\u00dferdem ist die virtuelle Maschine normalerweise ziemlich gro\u00df \u2013 ein schweres Image, mit einem Betriebssystem, Nginx, Apache und m\u00f6glicherweise MySQL. Das Image ist gro\u00df, und es ist unpraktisch, mit einer virtuellen Maschine zu arbeiten. Infolgedessen kann die Arbeit mit virtuellen Maschinen langsam sein. Um dieses Problem zu l\u00f6sen, wurden Virtualisierungssysteme auf Kernel-Ebene entwickelt.<\/p>\n<p><\/p>\n<h2 id=\"sistemy-virtualizacii-na-urovne-yadra\">Virtualisierungssysteme auf Kernel-Ebene<\/h2>\n<p><\/p>\n<p>Die Virtualisierung auf Kernel-Ebene wird von Systemen wie OpenVZ, Systemd-nspawn, LXC unterst\u00fctzt. Ein bekanntes Beispiel f\u00fcr eine solche Virtualisierung ist LXC (Linux-Container). <\/p>\n<p><\/p>\n<p>LXC ist ein Betriebssystem-Virtualisierungssystem, das es erm\u00f6glicht, mehrere isolierte Instanzen des Betriebssystems Linux auf einem einzigen Knoten auszuf\u00fchren. LXC verwendet keine virtuellen Maschinen, sondern erstellt eine virtuelle Umgebung mit eigenem Prozess- und Netzwerk-Stack.<\/p>\n<p><\/p>\n<p>Im Grunde erstellt LXC Container. Was ist der Unterschied zwischen virtuellen Maschinen und Containern?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Was ist Docker: ein kurzer \u00dcberblick \u00fcber die Geschichte und die wichtigsten Abstraktionen\" src=\"\/wp-content\/uploads\/2020\/08\/55afdcfd700d4869c9de488033a8e314.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Container sind nicht geeignet, um Prozesse zu isolieren: In Virtualisierungssystemen auf Kernel-Ebene werden Schwachstellen gefunden, die es erlauben, aus dem Container auf den Host zu gelangen. Wenn Sie also etwas isolieren m\u00fcssen, ist es besser, eine virtuelle Maschine zu verwenden.<\/p>\n<p><\/p>\n<p>Die Unterschiede zwischen Virtualisierung und Containerisierung sind in dem Diagramm zu sehen.<br \/>\nEs gibt hardwarebasierte Hypervisoren, Hypervisoren \u00fcber Betriebssystemen und Container. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Was ist Docker: ein kurzer \u00dcberblick \u00fcber die Geschichte und die wichtigsten Abstraktionen\" src=\"\/wp-content\/uploads\/2020\/08\/a0c06e9adc1fab3b4b5e9e1b05b51d66.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hardware-Hypervisoren sind eine gro\u00dfartige L\u00f6sung, wenn Sie tats\u00e4chlich etwas isolieren m\u00f6chten. Denn dort gibt es die M\u00f6glichkeit, auf Seitenebene und Prozessoren zu isolieren.<\/p>\n<p><\/p>\n<p>Es gibt Hypervisoren als Programme und es gibt Container, \u00fcber die wir nun sprechen werden. In Containerisierungssystemen gibt es keinen Hypervisor, aber es gibt eine Container-Engine, die Container erstellt und verwaltet. Diese L\u00f6sung ist leichter, weshalb der Overhead durch die Arbeit mit dem Kernel geringer ist oder gar nicht vorhanden.<\/p>\n<p><\/p>\n<blockquote>\n<h2 id=\"chto-ispolzuetsya-dlya-konteynerizacii-na-urovne-yadra\">Was wird auf Kernel-Ebene zur Containerisierung verwendet?<\/h2>\n<p>Die Haupttechnologien, die es erm\u00f6glichen, einen von anderen Prozessen isolierten Container zu erstellen, sind Namespaces und Control Groups.<\/p>\n<p>Namespaces: PID, Networking, Mount und User. Es gibt noch weitere, aber der Einfachheit halber konzentrieren wir uns auf diese.<\/p>\n<p>Der PID-Namespace beschr\u00e4nkt Prozesse. Wenn wir beispielsweise einen PID-Namespace erstellen und einen Prozess dort platzieren, erh\u00e4lt dieser die PID 1. Normalerweise ist PID 1 in Systemen systemd oder init. Wenn wir also einen Prozess in einen neuen Namespace verschieben, erh\u00e4lt er ebenfalls die PID 1.<\/p>\n<p>Der Networking-Namespace erm\u00f6glicht es, das Netzwerk zu beschr\u00e4nken\/zu isolieren und darin eigene Schnittstellen zu platzieren. Mount ist die Beschr\u00e4nkung des Dateisystems. User ist die Beschr\u00e4nkung der Benutzer.<\/p>\n<p>Control Groups: Memory, CPU, IOPS, Network \u2013 insgesamt etwa 12 Einstellungen. Sie werden auch Cgroups (\u201eC-Gruppen\u201c) genannt.<\/p>\n<p>Control Groups verwalten die Ressourcen f\u00fcr den Container. \u00dcber Control Groups k\u00f6nnen wir festlegen, dass der Container nicht mehr als eine bestimmte Menge an Ressourcen verbrauchen darf.<\/p>\n<p>Damit die Containerisierung voll funktionsf\u00e4hig ist, werden zus\u00e4tzliche Technologien verwendet: Capabilities, Copy-on-Write und andere.<\/p>\n<p>Capabilities sind die Vorgaben, was ein Prozess machen darf und was nicht. Auf Kernel-Ebene sind das einfach Bitmaps mit vielen Parametern. Zum Beispiel hat der Benutzer root volle Berechtigungen und kann alles tun. Der Zeitserver kann die Systemzeit \u00e4ndern: Er hat Capabilities f\u00fcr die Time Capsule, und das war's. Mit Privilegien k\u00f6nnen Einschr\u00e4nkungen f\u00fcr Prozesse flexibel eingestellt und somit die Sicherheit erh\u00f6ht werden.<\/p>\n<p>Das Copy-on-Write-System erm\u00f6glicht es uns, effizienter mit Docker-Images zu arbeiten.<\/p>\n<p><em>Zurzeit hat Docker Kompatibilit\u00e4tsprobleme mit Cgroups v2, daher behandelt der Artikel speziell Cgroups v1.<\/em><\/p><\/blockquote>\n<p>Aber kehren wir zur Geschichte zur\u00fcck. <\/p>\n<p><\/p>\n<p>Mit dem Aufkommen von Virtualisierungssystemen auf Kernel-Ebene wurden diese aktiv eingesetzt. Der Overhead auf den Hypervisor entfiel, aber einige Probleme blieben bestehen:<\/p>\n<p><\/p>\n<ul>\n<li>gro\u00dfe Images: In die gleiche OpenVZ werden das Betriebssystem, Bibliotheken und eine Menge anderer Software gedr\u00e4ngt, und am Ende ist das Image immer noch recht gro\u00df;<\/li>\n<li>es gibt keinen ordentlichen Standard f\u00fcr Verpackung und Lieferung, was das Abh\u00e4ngigkeitsproblem verursacht. Es gibt Situationen, in denen zwei Code-St\u00fccke die gleiche Bibliothek, aber mit unterschiedlichen Versionen verwenden. Zwischen ihnen kann es zu Konflikten kommen.<\/li>\n<\/ul>\n<p><\/p>\n<p>Um all diese Probleme zu l\u00f6sen, kam die n\u00e4chste \u00c4ra.<\/p>\n<p><\/p>\n<h2 id=\"era-konteynerov\">Die \u00c4ra der Container<\/h2>\n<p><\/p>\n<p>Als die \u00c4ra der Container begann, \u00e4nderte sich die Philosophie im Umgang mit ihnen:<\/p>\n<p><\/p>\n<ul>\n<li>Ein Prozess \u2014 ein Container.<\/li>\n<li>Alle f\u00fcr den Prozess notwendigen Abh\u00e4ngigkeiten bringen wir in seinen Container. Das erfordert das Aufteilen von Monolithen in Mikrodienste.<\/li>\n<li>Je kleiner das Image, desto besser \u2014 weniger m\u00f6gliche Schwachstellen, schnellere Bereitstellung und so weiter.<\/li>\n<li>Instanzen werden fl\u00fcchtig. <\/li>\n<\/ul>\n<p><\/p>\n<p>Erinnert ihr euch, ich habe von Haustieren vs. Vieh gesprochen? Fr\u00fcher waren Instanzen wie Haustiere, jetzt sind sie wie Vieh. Fr\u00fcher gab es einen Monolithen \u2014 eine Anwendung. Jetzt sind es 100 Mikrodienste, 100 Container. Einige Container k\u00f6nnen 2-3 Replikate haben. Es ist uns nicht mehr so wichtig, jeden Container zu kontrollieren. Vielmehr ist uns die Verf\u00fcgbarkeit des Dienstes selbst wichtig: das, was diese Gruppe von Containern tut. Das ver\u00e4ndert die Ans\u00e4tze im Monitoring.<\/p>\n<p><\/p>\n<p>In den Jahren 2014-2015 erlebte Docker einen Aufschwung \u2014 diese Technologie, \u00fcber die wir jetzt sprechen werden.<\/p>\n<p><\/p>\n<p>Docker hat die Philosophie ver\u00e4ndert und die Verpackung von Anwendungen standardisiert. Mit Docker k\u00f6nnen wir eine Anwendung verpacken, sie in ein Repository senden, von dort herunterladen und bereitstellen. <\/p>\n<p><\/p>\n<p>In einem Docker-Container packen wir alles Notwendige, weshalb das Problem der Abh\u00e4ngigkeiten gel\u00f6st ist. Docker garantiert Reproduzierbarkeit. Ich denke, viele haben schon einmal das Problem der Nicht-Reproduzierbarkeit erlebt: Es funktioniert alles bei dir, aber sobald du es ins Produktionssystem l\u00e4dst, funktioniert es dort nicht mehr. Mit Docker geh\u00f6rt dieses Problem der Vergangenheit an. Wenn dein Docker-Container startet und das tut, was er tun soll, dann wird er mit hoher Wahrscheinlichkeit auch in der Produktion starten und das Gleiche tun.<\/p>\n<p><\/p>\n<blockquote>\n<h2 id=\"otstuplenie-pro-overhed\">Ein Exkurs \u00fcber Overhead<\/h2>\n<p>Es gibt st\u00e4ndig Diskussionen \u00fcber den Overhead. Einige glauben, dass Docker keine zus\u00e4tzliche Belastung darstellt, da es den Linux-Kernel und alle seine Prozesse nutzt, die f\u00fcr die Containerisierung erforderlich sind. Man sagt, \"wenn du sagst, dass Docker Overhead ist, dann ist auch der Linux-Kernel Overhead\".<\/p>\n<p>Auf der anderen Seite gibt es tats\u00e4chlich einige Dinge in Docker, die man mit einem gewissen Vorbehalt als Overhead bezeichnen kann.<\/p>\n<p>Erstens \u2013 der PID-Namespace. Wenn wir einen Prozess in einen Namespace setzen, erh\u00e4lt er die PID 1. Gleichzeitig hat dieser Prozess eine weitere PID, die sich im Host-Namespace au\u00dferhalb des Containers befindet. Zum Beispiel, wenn wir Nginx in einem Container starten, wird es PID 1 (Hauptprozess). Auf dem Host hat es jedoch die PID 12623. Es ist schwer zu sagen, wie viel Overhead das verursacht.<\/p>\n<p>Das zweite Thema sind die Cgroups. Nehmen wir Cgroups f\u00fcr den Speicher, also die M\u00f6glichkeit, die Speicherkapazit\u00e4t des Containers zu begrenzen. Wenn diese aktiviert werden, aktivieren sich Z\u00e4hler, die memory accounting erm\u00f6glichen: Der Kernel muss verstehen, wie viele Seiten zugewiesen wurden und wie viele noch frei sind f\u00fcr diesen Container. Das k\u00f6nnte ein Overhead sein, aber ich habe keine genauen Studien gesehen, die zeigen, wie sich das auf die Leistung auswirkt. Ich habe selbst nicht bemerkt, dass Anwendungen, die in Docker ausgef\u00fchrt werden, pl\u00f6tzlich erheblich an Leistung verlieren. <\/p>\n<p>Und noch eine Bemerkung zur Leistung. Einige Kernel-Parameter werden vom Host in den Container \u00fcbertragen. Insbesondere einige Netzwerkeinstellungen. Wenn du also etwas Hochleistungsf\u00e4higes in Docker starten m\u00f6chtest, zum Beispiel etwas, das das Netzwerk intensiv nutzen wird, musst du diese Parameter zumindest anpassen. Beispielsweise nf_conntrack. <\/p><\/blockquote>\n<p><\/p>\n<h2 id=\"o-koncepcii-docker\">\u00dcber das Konzept von Docker<\/h2>\n<p><\/p>\n<p>Docker besteht aus mehreren Komponenten: <\/p>\n<p><\/p>\n<ol>\n<li>Docker Daemon \u2013 das ist die Container Engine; sie startet Container. <\/li>\n<li>Docker CII \u2013 ist ein Tool zur Verwaltung von Docker.<\/li>\n<li>Dockerfile \u2013 eine Anleitung, wie man ein Image erstellt.<\/li>\n<li>Image \u2013 das Image, aus dem der Container erstellt wird.<\/li>\n<li>Container.<\/li>\n<li>Docker-Registry \u2013 ein Speicher f\u00fcr Images.<\/li>\n<\/ol>\n<p><\/p>\n<p>Schematically sieht das ungef\u00e4hr so aus:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Was ist Docker: ein kurzer \u00dcberblick \u00fcber die Geschichte und die wichtigsten Abstraktionen\" src=\"\/wp-content\/uploads\/2020\/08\/73ccc02c14485f72cfd7c64e3074f3b9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Auf dem Docker_host l\u00e4uft der Docker-Daemon, der Container startet. Es gibt einen Client, der Befehle \u00fcbertr\u00e4gt: erstelle ein Image, lade ein Image herunter, starte einen Container. Der Docker-Daemon greift auf die Registry zu und f\u00fchrt diese aus. Der Docker-Client kann sowohl lokal (\u00fcber einen Unix-Socket) als auch \u00fcber TCP von einem Remote-Host aus zugreifen.<\/p>\n<p><\/p>\n<p>Lass uns jeden Bestandteil durchgehen.<\/p>\n<p><\/p>\n<p><u>Docker Daemon (Daemon)<\/u> \u2013 ist der Serverteil, der auf der Host-Maschine l\u00e4uft: er l\u00e4dt Images herunter und startet Container daraus, erstellt Netzwerke zwischen Containern und sammelt Protokolle. Wenn wir sagen \u201eErstelle ein Image\u201c, k\u00fcmmert sich auch der Daemon darum.<\/p>\n<p><\/p>\n<p><u>Docker CLI<\/u> \u2013 ist der Clientteil von Docker, ein Konsolen-Tool zur Arbeit mit dem Daemon. Ich m\u00f6chte betonen, dass es nicht nur lokal, sondern auch \u00fcber das Netzwerk arbeiten kann. <\/p>\n<p><\/p>\n<p><strong>Grundbefehle:<\/strong><\/p>\n<p><\/p>\n<p>docker ps \u2013 zeigt die Container an, die momentan auf dem Docker-Host laufen.<br \/>\ndocker images \u2013 zeigt die lokal heruntergeladenen Images an.<br \/>\ndocker search  \u2013 Suche nach einem Image in der Registry.<br \/>\ndocker pull  \u2013 Lade ein Image aus der Registry auf die Maschine.<br \/>\ndocker build &lt;&gt; \u2013 erstelle ein Image.<br \/>\ndocker run  \u2013 starte den Container.<br \/>\ndocker rm  \u2013 l\u00f6sche den Container.<br \/>\ndocker logs  \u2013 Protokolle des Containers<br \/>\ndocker start\/stop\/restart  \u2013 Arbeit mit dem Container\n<\/p>\n<p>Wenn du diese Befehle beherrschst und sicher damit umgehst, kannst du davon ausgehen, dass du Docker als Benutzer zu 70 % gemeistert hast.<\/p>\n<p><\/p>\n<p><u>Dockerfile<\/u> \u2013 Anleitung zur Erstellung eines Images. Fast jeder Befehl in der Anleitung ist eine neue Schicht. Schauen wir uns ein Beispiel an.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Was ist Docker: ein kurzer \u00dcberblick \u00fcber die Geschichte und die wichtigsten Abstraktionen\" src=\"\/wp-content\/uploads\/2020\/08\/4d61b58d0d0d8b2e4ddbbfe573f34f7e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>So sieht ein Dockerfile ungef\u00e4hr aus: links die Befehle, rechts die Argumente. Jeder Befehl, der hier steht (und generell im Dockerfile steht), schafft eine neue Schicht im Image. <\/p>\n<p><\/p>\n<p>Selbst wenn man sich die linke Seite ansieht, kann man ungef\u00e4hr verstehen, was passiert. Wir sagen: \u201eErstelle uns einen Ordner\u201c \u2014 das ist eine Schicht. \u201eMach den Ordner aktiv\u201c \u2014 das ist eine weitere Schicht, und so weiter. Der Schichtkuchen erleichtert das Leben. Wenn ich eine weitere Dockerdatei erstelle und in der letzten Zeile etwas \u00e4ndere \u2014 anstatt \u201epython\u201c \u201emain.py\u201c auszuf\u00fchren, etwas anderes mache oder Abh\u00e4ngigkeiten aus einer anderen Datei installiere \u2014 werden die vorherigen Schichten wie ein Cache wiederverwendet.<\/p>\n<p><\/p>\n<p><u>Bild<\/u> \u2014 das ist das Container-Image, aus dem Container gestartet werden. Wenn man Docker als Paketmanager betrachtet (als ob wir mit deb- oder rpm-Paketen arbeiten), dann ist das Image im Grunde ein rpm-Paket. Mit yum install k\u00f6nnen wir eine Anwendung installieren, sie entfernen, im Repository suchen und herunterladen. Hier ist es \u00e4hnlich: Aus dem Image werden Container gestartet, sie werden im Docker-Registry (analog zu yum, im Repository) gespeichert, und jedes Image hat einen SHA-256-Hash, einen Namen und ein Tag.<\/p>\n<p><\/p>\n<p>Das Image wird nach den Anweisungen im Dockerfile erstellt. Jede Anweisung im Dockerfile erzeugt eine neue Schicht. Schichten k\u00f6nnen wiederverwendet werden.<\/p>\n<p><\/p>\n<p><u>Docker-Registry<\/u> \u2014 das ist ein Repository f\u00fcr Docker-Images. Analog zu Betriebssystemen hat Docker ein \u00f6ffentliches Standard-Registry \u2014 dockerhub. Aber man kann auch sein eigenes Repository, seine eigene Docker-Registry erstellen. <\/p>\n<p><\/p>\n<p><u>Container<\/u> \u2014 das, was aus dem Image gestartet wird. Nach der Anleitung im Dockerfile haben wir das Image erstellt, dann starten wir es aus diesem Image. Dieser Container ist von anderen Containern isoliert, er muss alles Notwendige f\u00fcr den Betrieb der Anwendung enthalten. Dabei gilt: Ein Container \u2014 ein Prozess. Manchmal muss man zwei Prozesse erstellen, aber das widerspricht etwas der Ideologie von Docker.<\/p>\n<p><\/p>\n<p>Die Anforderung \u201eein Container \u2014 ein Prozess\u201c h\u00e4ngt mit dem PID-Namespace zusammen. Wenn in einem Namespace ein Prozess mit PID 1 gestartet wird und dieser pl\u00f6tzlich stirbt, stirbt auch der gesamte Container. Wenn jedoch zwei Prozesse gestartet sind: einer lebt, der andere ist gestorben, bleibt der Container trotzdem am Leben. Aber das ist eine Frage der Best Practices, \u00fcber die wir in anderen Materialien sprechen werden.<\/p>\n<p><\/p>\n<p>Eine detailliertere Untersuchung der Besonderheiten und des vollst\u00e4ndigen Kursprogramms finden Sie unter dem Link: \u201e<noindex><a rel=\"nofollow\" href=\"http:\/\/to.slurm.io\/2patKQ\">Videokurs \u00fcber Docker<\/a><\/noindex>\u00bb. <\/p>\n<p><\/p>\n<p><em>Autor: Marsel Ibraev, zertifizierter Kubernetes-Administrator, praktizierender Ingenieur bei Southbridge, Sprecher und Kursentwickler bei Sljorm.<\/em><\/p>\n<p>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/515508\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>10 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u0432 \u0421\u043b\u0451\u0440\u043c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b \u0432\u0438\u0434\u0435\u043e\u043a\u0443\u0440\u0441 \u043f\u043e Docker, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u2014 \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u0434\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u0435\u0442\u0438. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e\u0431 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f Docker \u0438 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f\u0445: Image, Cli, Dockerfile. \u041b\u0435\u043a\u0446\u0438\u044f \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u0430 \u043d\u0430 \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0440\u044f\u0434 \u043b\u0438 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430 \u043e\u043f\u044b\u0442\u043d\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c. \u0417\u0434\u0435\u0441\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043a\u0440\u043e\u0432\u0438, \u0430\u043f\u043f\u0435\u043d\u0434\u0438\u043a\u0441\u0430 \u0438 \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0433\u043e \u043f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u0438\u044f. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":91906,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-91905","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"10 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u0432 \u0421\u043b\u0451\u0440\u043c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b \u0432\u0438\u0434\u0435\u043e\u043a\u0443\u0440\u0441 \u043f\u043e Docker, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u2014 \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u0434\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u0435\u0442\u0438.\" \/>\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\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\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\udd47\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Docker: \u043a\u0440\u0430\u0442\u043a\u0438\u0439 \u044d\u043a\u0441\u043a\u0443\u0440\u0441 \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"10 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u0432 \u0421\u043b\u0451\u0440\u043c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b \u0432\u0438\u0434\u0435\u043e\u043a\u0443\u0440\u0441 \u043f\u043e Docker, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u2014 \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u0434\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u0435\u0442\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii\" \/>\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=\"2020-08-20T05:42:23+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-20T05:42:23+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\udd47Was ist Docker: Ein kurzer \u00dcberblick \u00fcber die Geschichte und grundlegende Abstraktionen | ProHoster","description":"Am 10. August startete bei Sljorm ein Videokurs \u00fcber Docker, in dem wir es vollst\u00e4ndig behandeln \u2014 von den grundlegenden Abstraktionen bis zu Netzwerkkonfigurationen.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii","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\udd47\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Docker: \u043a\u0440\u0430\u0442\u043a\u0438\u0439 \u044d\u043a\u0441\u043a\u0443\u0440\u0441 \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 | ProHoster","og:description":"10 \u0430\u0432\u0433\u0443\u0441\u0442\u0430 \u0432 \u0421\u043b\u0451\u0440\u043c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b \u0432\u0438\u0434\u0435\u043e\u043a\u0443\u0440\u0441 \u043f\u043e Docker, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u2014 \u043e\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 \u0434\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u0435\u0442\u0438.","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/chto-takoe-docker-kratkij-ekskurs-v-istoriyu-i-osnovnye-abstrakczii","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":"2020-08-20T05:42:23+00:00","article:modified_time":"2020-08-20T05:42:23+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"91905","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":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:18:28","updated":"2022-10-01 05:09:53","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/91905","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=91905"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/91905\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/91906"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=91905"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=91905"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=91905"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}