Virtualisierung mit Docker

Container ohne SSH administrieren

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Container sind zur Laufzeit typischerweise nur schwer zu administrieren. Abhilfe schafft hier in der Regel ein SSH-Daemon. Wie das mit Hilfe von Bordmitteln umgangen werden kann, erfahren Sie in diesem Film.

Transkript

Die Grundidee von Containern so wie sie Docker beschreibt, sind einzelne Prozesse. Das bedeutet, im Idealbild enthält ein Container nicht mehr als nur einen einzigen Prozess. Mit diesem Konzept stößt man aber schnell auf Probleme. Denn die Behebung von Fehlern der Anwendungen innerhalb der Container gestaltet sich schwierig, falls man keinen Zugriff auf diesen Container hat. Viele Leute die also nun Container entwerfen, schaffen sich Abhilfe dadurch, dass neben der Anwendung in dem Container zusätzlich ein so genannter SSH-Deamon installiert wird. Mit Hilfe des SSH-Daemon und der Bindung an einen Port ist es so einfach möglich den Container über SSH zu orchestrieren. Allerdings ist dieses Konzept sehr aufwendig und entspricht nicht den Prinzipien eines Containers. Seit Version 1.3 bietet Docker selbst Möglichkeiten um das zu tun. Mit dem Befehl docker und exec für execution ist es möglich beispielsweise eine Shell wie Bash innerhalb eines bereits laufenden Container auszuführen. Das heißt, die Anwendung Bash wird zusätzlich gestartet und wenn diese Anwendung beendet wird, wird der Container nicht automatisch beendet. Falls man eine Version vor Docker 1.3 verwendet, gibt es trotzdem die Möglichkeit ein ähnliches Verhalten abzubilden. Die Anwendung hierfür ist name spacer enter oder auch nsenter. Vom Prinzip her funktioniert diese Anwendung eins zu eins wie die docker exec-Funktion. Da die Installation unter Umständen allerdings nicht so einfach ist, gibt es ein eigenes Docker-Image, das die Installation für einen erledigen kann. Diese beiden Möglichkeiten, also docker exec und nsenter, möchte ich nun Live demonstrieren. Auf dieser Maschine hier läuft aktuell ein Container, der die Oracle-Anwendung Database Express Edition 11g beinhaltet. Aus gegebenem Anlass möchte ich nun Änderungen am Dateisystem dieses Containers vornehmen. Zunächst einmal suche ich mir hierfür die Container-ID heraus. Diese finde ich mit dem docker ps-Befehl und unter dem Container-ID-Feld. Ich kopiere also nun diesen Wert und benutze den Befehl docker exec. Über docker exec gebe ich nun an, dass ich gerne eine interaktive Session möchte mit einem Terminal auf dieser jeweiligen Container-ID und in dem Container führe ich nun die Kommandozeile bin/bash aus. Alternativ könnte ich auch jegliche andere Anwendung, von der ich weiß, dass sie sich innerhalb dieses Containers befindet über die Kommandozeile hier ausführen. Dies würde Sinn machen, wenn ich von extern einen Clean-up-Prozess starten möchte. Sobald ich diesen Befehl bestätige, befinde ich mich nun innerhalb des Containers. Erkennbar anhand der ID hier für den Hostname und dem Root-Nutzer auf dieser ID. Ich befinde mich hier im Root-Verzeichnis. Um mir das noch mal klar zu machen, möchte ich nun die Prozessliste sehen. Über den Befehl top bekomme ich eine Fehlermeldung, dass das TERM-Environment nicht gesetzt ist. Dies ist der Fall, weil ich die Bash pur ausgeführt habe. Ich setze nun die Umgebungsvariable TERM auf xterm. Und wenn ich nun top ausführe, kann ich entsprechend die Prozessliste sehen. In dem Fall ist klar erkennbar, dass wir uns innerhalb des Containers befinden und dort dementsprechend die Oracle-Prozesse laufen. An der Stelle kann ich auch ganz bequem im Dateisystem navigieren, das das Dateisystem des Containers ist. In dem Fall befindet sich im Root-Verzeichnis zum Beispiel die Oracle-Installation, durch die ich an der Stelle navigieren kann und dementsprechend auch Konfigurationen vornehmen könnte. Will ich den Container dann entsprechend später neu starten, würde Oracle auch diese Konfigurationen so laden. Als Nächstes möchte ich die für alle Docker-Versionen kompatible Möglichkeit nsenter verwenden. Dafür verlasse ich zunächst den aktuellen Container und nutze nun den Docker-run-Befehl um das Image jpetazzo nsenter herunterzuladen und auszuführen. Wichtig an der Stelle zu wissen ist, dass mit Hilfe dieses Mappings vom Container aus in meinen Order user/local/bin, eine Verknüpfung mit dem Namen docker enter als auch die binary nsenter installiert werden. Danach wird der Container via rm automatisch entfernt und ich kann zukünftig über die Kommandozeile den Befehl docker enter benutzen. Bestätige das Ganze also nun mit Enter und der Vorgang ist bereits abgeschlossen. An der Stelle ist es also nun möglich, den Befehl docker enter zu benutzen. Die Parametrisierung ist ähnlich wie docker exec. Das bedeutet, es ist nötig die Container-ID anzugeben. Allerdings muss man hier standardmäßig nicht die Anwendung angeben, die man ausführen möchte, denn es wird angenommen, dass man die Bash-Anwendung ausführen möchte, Ich bestätige also auch hier wieder mit Enter und sehe nun anhand des veränderten Hostnames, dass ich mich innerhalb des Containers befinde. Die Umgebung an sich ist die Gleiche, wie gewohnt. Das bedeutet standardmäßig ist die TERM-Variable nicht gesetzt und kann ganz einfach mit Hilfe von export TERM und xterm gesetzt werden. Und dann entsprechend auch auf den Task Manager zuzugreifen Oder auch mit Tools VVI besser arbeiten zu können. Sie haben nun also gesehen, wie Sie ohne die komplizierte Installation eines SSH-Deamons auf einen bereits bestehenden Container zur Laufzeit zugreifen können. Im Zukunft können Sie diesen Weg für alle administrativen Zwecke anhand eines Containers nutzen.

Virtualisierung mit Docker

Steigen Sie in die Container-Virtualisierung ein und entdecken Sie einfaches Prototyping neuer und unkomplizierte Skalierung bestehender Anwendungen.

3 Std. 36 min (36 Videos)
Derzeit sind keine Feedbacks vorhanden...

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!