‫Voraussetzung für diese Vorlesung ist, dass Sie wissen, wie man einen Container aus früheren Vorlesungen startet.
‫Wir haben gerade die letzte Vorlesung beendet und darüber gesprochen, was in einem Container von außen vor sich geht.
‫Hier geht es darum, in einen Container zu kommen, um mit dem Inneren herumzuspielen. Es gibt ein paar Befehle, die wir
‫verwenden können.
‫Der erste ist container run mit -it.
‫Wir werden darüber sprechen, wie -it funktioniert, um tatsächlich eine Shell in den Container zu bekommen.
‫Zum Ausführen von Containern, für die Sie einen zweiten Prozess ausführen möchten, können Sie auch die
‫Containerausführung verwenden, und wir zeigen einige Beispiele dafür.
‫Im weiteren Verlauf werden wir einige Unterschiede zwischen einer regulären Linux-Distribution wie Ubuntu für die
‫Installation auf einer virtuellen Maschine oder auf Hardware erwähnen.
‫Und dann, wie diese Linux-Distributionen in einem Container sind.
‫Lass uns anfangen.
‫Manchmal ist es sehr praktisch, von außen in einen Behälter zu schauen.
‫Aber eine der ersten Fragen, die mir häufig gestellt werden, ist, wie ich in den Container komme und
‫die darin enthaltenen Dinge tatsächlich über die Befehlszeile ausführe.
‫Manchmal verwechseln die Leute dies damit, dass sie einen SSH-Server in ihrem Container haben wollen, damit sie in ihn hinein
‫sshen können.
‫Dies ist jedoch nicht unbedingt erforderlich, da uns mehrere Befehle zur Verfügung stehen, mit denen wir eine
‫Shell im Container selbst installieren können, während dieser ausgeführt wird.
‫Der erste Befehl ist nur der Befehl docker container run.
‫Aber wir werden ein paar zusätzliche Optionen angeben.
‫Wir werden es tun.
‫Das -it ist eigentlich zwei getrennte Optionen.
‫Wenn ich die Hilfe nur ganz schnell zeige, können Sie sehen, dass das t uns tatsächlich eine Pseudo-Tty oder eine
‫Eingabeaufforderung gibt, die der von ssh ähnelt.
‫Und wenn wir dann zu i
‫rollen, können wir diese Sitzung wirklich offen halten, damit wir weitere Befehle ausführen können.
‫Wenn wir einen Docker-Container ausführen, führen Sie -it aus und führen Sie dann ein anderes nginx aus. Nennen wir es Proxy.
‫Dann müssen wir einen alternativen Befehl angeben.
‫Wenn Sie sich erinnern, dass wir zu Beginn dieses Abschnitts über das Format der
‫Docker-Befehlszeile gesprochen haben, als Sie einen Docker-Container-Lauf durchführten, können Sie dies anhand der Hilfe hier am Ende nach
‫dem Bild nachlesen Optionaler Befehl und Argumente, die Sie an diesen neuen Container senden können,
‫um ihm mitzuteilen, was er ausführen soll. Das Image enthält einen Standardbefehl, den wir später
‫konfigurieren werden.
‫Wenn Sie jedoch ändern möchten, was beim Start ausgeführt wurde, können Sie dies direkt von der Ausführungslinie aus tun.
‫Sagen wir einfach Bash. Weil Bash eine der gebräuchlichsten Muscheln ist, die Sie normalerweise in einem Container
‫finden, der Ihnen eine Muschel zum Arbeiten gibt.
‫Sieh dir das an. Ich bin in einer Aufforderung.
‫Sie werden feststellen, dass in meiner Eingabeaufforderung root angegeben ist, als welcher Benutzer der Container gestartet wurde. Das bedeutet nicht, dass ich auf dem Host
‫root bin.
‫Es bedeutet nur, dass ich als Root auf dem Container agiere.
‫Diese Nummer ist die eigentliche Container-ID.
‫Wenn ich ein ls -al mache, bekomme ich eine vollständige Auflistung von allem, wo ich bin.
‫Und Sie können sehen, dass ich im Stammpfad des Dateisystems innerhalb des Containers bin.
‫Eigentlich schaue ich mir alle Dateien im Container an, die auf dem Nginx-Image basieren.
‫Von hier aus konnte ich Konfigurationsdateien ändern, Pakete aus dem
‫Internet herunterladen und fast alle üblichen Verwaltungsaufgaben ausführen, die Sie von einer normalen
‫Shell aus ausführen würden.
‫Um die Shell zu verlassen, wenn Sie fertig sind, gebe ich exit ein, wie Sie es mit jeder Shell tun würden, und jetzt
‫hat dieser Container aufgehört.
‫Wenn wir tatsächlich einen Docker-Container hätten, würden Sie ihn dort nicht sehen.
‫Denken Sie daran, wir haben es Proxy genannt.
‫Also musste ich ein -a machen.
‫Und es ist da. Sehen Sie sich nun den Befehl an, der ausgeführt wurde. Der Standardbefehl für einen Nginx-Container besteht darin,
‫das Nginx-Programm selbst auszuführen.
‫Aber als wir unseren letzten Befehl eingaben, änderten wir das Standardprogramm in Bash,
‫was uns unsere Shell gab. Als wir die Granate verließen, hielt der Container an. Weil Container s wird nur so lange
‫ausgeführt, wie der beim Start ausgeführte Befehl ausgeführt wird. Da wir es in Bash geändert haben, einfach Bash beenden
‫Jetzt, was
‫wäre, wenn ich eine vollständige Linux-Distribution verwenden würde, anstatt tatsächlich Nginx zu verwenden? Lass uns ein vollständiges
‫Ubuntu machen.
‫Es wird tatsächlich das Ubuntu-Image herunterladen und mich auf die Eingabeaufforderung dieses neuen Containers hinweisen.
‫Wenn Sie jemals Ubuntu verwendet haben, kennen Sie den apt-Paketmanager.
‫Also kann ich das hier verwenden. Genau wie ich es bei einem Standard Ubuntu Server machen würde. Ich könnte tatsächlich
‫etwas
‫Apt-Get-Install -y-Curl installieren.
‫Das Besondere an Ubuntu und anderen Distributionen in einem Container ist, dass sie normalerweise sehr minimal sind.
‫Auf einer Live-CD oder einem Download der ISO von Ubuntu, die Sie normalerweise auf einer virtuellen Maschine installieren würden,
‫wird viel mehr Software standardmäßig installiert als auf einem Ubuntu-Container, der eigentlich eine sehr minimale Version von
‫Ubuntu ist, die Sie jederzeit hinzufügen können Software mit dem Apt Package Manager.
‫In diesem laufenden Container ist Curl installiert, und ich kann es genauso verwenden, wie ich es auf einem lokalen Computer tun würde.
‫Sobald ich die Shell wieder verlasse, stoppt sie den Container. Hafenarbeiter Container
‫ls. Sie bemerken, dass ich es nicht sehe. Es gibt dieses Ubuntu-Image, das wir gerade ausgeführt haben.
‫Wenn ich diesen Container wieder in Betrieb nehmen würde, wäre darin eine Wellung installiert.
‫Aber wenn ich einen neuen Container aus dem Ubuntu-Image erstellen würde, würde auf diesem anderen Container die Curl-Befehlszeile
‫nicht installiert sein.
‫Was wäre, wenn wir diesen Container erneut ausführen und Bash gleich wieder hineinbringen wollten?
‫Wir könnten den Docker-Container-Start-Befehl verwenden.
‫Sie werden bemerken, dass es ein wenig anders ist, wenn wir einen vorhandenen Container starten, aber es ist
‫dem ähnlich ... Es ist nur ein ai.
‫Dann der Name unseres Containers Ubuntu. Sie werden feststellen, dass wir gleich wieder dabei sind, und
‫ich kann Google wieder einrollen, und es funktioniert.
‫Wenn ich verlasse, wird es wieder gestoppt.
‫Was ist, wenn ich die Shell in einem laufenden Container sehen möchte, der bereits so etwas
‫wie MySQL oder Nginx ausführt?
‫Das können wir auch.
‫Und das mit dem Befehl exec. Docker Container Exec.
‫Und Sie können sehen, dass wir hier einige Optionen haben.
‫Und das häufigste ist ... Nehmen wir an, ich möchte in den MySQL-Container springen, weil ich
‫einige administrative Aufgaben in MySQL selbst ausführen muss.
‫Ich könnte das nochmal machen und dann den Namen des Containers. Dann möchte ich das Programm ausführen.
‫Und in diesem Fall ist es wieder Bash und ich bin jetzt mit MySQL im Container.
‫Ich kann tatsächlich ein ps aux direkt im Container ausführen, in dem die Prozesse aufgelistet sind. Dies zeigt mir natürlich den MySQL-Daemon, der
‫im Hintergrund ausgeführt wird, sowie den Bash-Prozess, in dem ich mich gerade befinde,
‫und den ps-Befehl, den ich
‫gerade ausgeführt habe. In dieser Shell konnte ich mit der mysql-Kommandozeile in MySQL selbst springen. Sie werden bemerken, wenn
‫ich diese Bash-Shell verlasse und ein ls mache, läuft MySQL noch. Da der Docker-Container exec tatsächlich einen zusätzlichen Prozess für einen
‫vorhandenen laufenden Container ausführt, hat dies keine Auswirkungen auf
‫den Root-Prozess für den MySQL-Daemon. Versuchen wir es noch einmal.
‫Wie Sie hier sehen können, ist dies sehr nützlich, um in Container zu springen, wenn Sie
‫Fehler beheben müssen oder wenn Sie etwas auf einem laufenden System geringfügig ändern müssen, sowie um Container mit verschiedenen Distributionen zu verwenden,
‫um Ihnen die Umgebung zu bieten, die Sie hätten, wenn Sie hätten eine volle Maschine wie ein Ubuntu
‫oder ein Alpine.
‫Was ist Alpine? Wir haben Alpine noch nie erwähnt. Alpine ist eine andere Distribution von Linux,
‫aber Alpine ist sehr klein ausgelegt.
‫Es ist eigentlich nur 5 MB groß.
‫Wenn ich ein Docker-Pull-Alpin mache, wird das neueste Alpine-Image heruntergezogen, und wenn ich ein Docker-Image mache, kann
‫man tatsächlich sehen, wie klein das Alpine-Image im Vergleich zum Ubuntu ist.
‫Das Schöne an Alpine ist, dass es auch einen eigenen Paketmanager hat.
‫Daher werden Sie im nächsten Abschnitt Alpine als Option für Docker Hub sehen, wenn wir Bilder und Docker
‫Hub durchgehen.
‫Aber jetzt machen wir eine Bash-Shell in Alpine. Docker Container Run - Es geht los!
‫Was ist hier gerade passiert?
‫Warum bin ich da reingekommen?
‫Es teilt mir mit, dass der Containerprozess gestartet wird und die ausführbare Datei bash
‫nicht im Pfad gefunden wurde. Und was das wirklich bedeutet ist, dass Bash nicht im Container ist.
‫Und das geht auf das Konzept zurück, dass wir nur Dinge in dem Container ausführen können, der bereits in seinem Image vorhanden
‫war,
‫als Sie es gestartet haben.
‫Oder vielleicht etwas, das Sie später über die Befehle exec oder run hinzugefügt haben.
‫Aber wie komme ich in diesem Fall zum alpinen Image?
‫Alpine ist so klein, dass es eigentlich keinen Bash enthält. Aber es hat sh. Also können wir den Befehl durch
‫sh ersetzen, der nicht ganz so umfangreich ist wie Bash, aber uns direkt in den Container bringt.
‫Wenn Sie Alpine Linux im Internet durchsuchen würden, würden Sie feststellen, dass der Paketmanager apk
‫ist, und wir könnten ihn tatsächlich verwenden, um Bash zu installieren, wenn wir ihn wirklich brauchen.
‫Nur um ganz schnell wiederzugeben, was wir in dieser Lektion gelernt haben.
‫Wir haben etwas über die Option -it für die Ausführung von Containern gelernt, die uns das Äquivalent einer interaktiven Shell gibt, mit
‫der wir die Dinge im Container tatsächlich so ausführen können, als würden wir sie auf einen Server übertragen.
‫Dann haben wir einen
‫neuen Befehl für docker container exec kennengelernt, der genau das Gleiche wie run ausführt, jedoch für
‫einen vorhandenen Container ausgeführt wird, der keinen neuen Container startet.
‫Zuletzt haben wir ein wenig über Alpine und die Unterschiede zu den großen Linux-Distributionen gelernt
‫und wie es eigentlich 4 MB groß und ideal für Container-Images ist.