Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Virtualisierung mit Docker

Container mit dem run-Befehl ausführen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Der run-Befehl ist unter allen Kommandos in Docker der mit Abstand wichtigste. Sehen Sie, wie Sie mit diesem Befehl einen Container ausführen und über welche Konfigurationsmöglichkeiten Sie verfügen.

Transkript

Der am häufigsten verwendete Befehl von Docker ist der Docker-run-Befehl. Mit diesem passiert die meiste Magie. Es werden aus Images Container erzeugt. Allerdings hat dieses Kommando sehr viele Parameter und Möglichkeiten der Einstellung. Welche für Sie relevant sind, erfahren Sie nun im Laufe dieses Videos. Die am häufigsten verwendeten Parameter und typischsten Parameter des Docker-run-Befehls ist alternativ zu sehen der -d-Operator, mit dem eine Hintergrundoperation gestartet wird. Das bedeutet der Container wird hochgefahren und startet nicht im Vordergrund. Alternativ kann mit dem Befehl -t und -i ein interaktives Terminal gestartet werden. Das heißt, wenn der Container hochfährt und man beispielsweise die bash-Kommandozeile ausführt, hat man die Möglichkeit der Interaktion. Beispielhaft kann ich nun also eine Instanz von ubuntu:trasty starten, die beispielsweise 3 Sekunden lang schläft und im Hintergrund operiert. Ich bekomme an der Stelle lediglich die entstandene Container-ID zurück. Nutze ich diesen Befehl nun mit dem Parameter -ti, sehe ich tatsächlich, wie 3 Sekunden gewartet wird, bis der Container sich beendet. Alternativ ist es auch möglichst zu steuern, welche von den verschiedenen Eingabe- und Ausgabe-Streams für ein persönlich relevant sind. Mit dem Befehl -attach und der jeweiligen Spezifikation von STDIN, STDERR oder STDOUT kann hier gewählt werden. Wenn man einen Container startet, der nur kurzzeitig eine Operation ausführt und man nicht mehr vor hat, diesen Container noch einmal zu starten, so spezifiziert man üblicherweise den Parameter --rm. Im eben gesehenen Beispiel kann man also nun sehen, dass entsprechend Containern entstanden sind und noch weiterhin existieren. Wenn ich nun denselben Befehl ausführe und zusätzlich --rm spezifiziere, warte ich nun 3 Sekunden und an der Stelle sieht man, dass kein neuer Container entstanden ist bzw. dass der Container, der entstanden ist, sofort wieder entfernt worden ist. Üblicherweise wird bei Generierung eines solchen Containers automatisch ein Name vergeben. Diesen Namen kann man auch explizit steuern durch den name-Parameter. Zusätzlich wird dieser Name dann auch als Hostname dieses Containers verwendet innerhalb anderer Container. Der nächste interessante Parameter ist das Neustart-Konzept. Mit dem Befehl -restart kann man unterschiedliche Arten eines Neustart-Konzepts spezifizieren. Das bedeutet, wenn die Anwendung innerhalb des Containers abstürzt, kann man mit der Angabe -restart=always immer dafür sorgen, dass Docker automatisch den Container neu startet. Sollte das unter Umständen zu Problemen führen können, so kann man mit der Angabe von on-failure und einer gewissen Anzahl spezifizieren, dass Docker nur eine bestimmte Menge an Wiederholungen versucht diesen Container wieder zu starten. Die nächsten wichtigen Parameter sind die Parameter, die es möglich machen die Menge an Ressourcen, die ein Container nutzt, einzuschränken. Der erste Parameter in diesem Zusammenhang ist die Angabe des cpuset. Mit cpuset ist es möglich zu spezifizieren, welche der Prozessoren, die der Maschine zur Verfügung stehen auch den Containern zur Verfügung stehen. Beginnend immer mit dem Prozessor 0 und entsprechend fortlaufend. Sollten also zum Beispiel 8 Cores vorhanden sein, würde dies cpuset von 0 bis 7 spezifizierbar sein. Der nächste interessante Parameter in diesem Zusammenhang ist cpu-shares. Mit cpu-shares gibt man ein relatives Gewicht an, das ein Container auf der CPU bekommen kann. Insgesamt stehen 1.024 Ressourcen zur Verfügung. Wenn man nun also einen Container mit der Parametrisierung cpu-shares und der Zahl 0 startet, so hat ein Container dann Zugriff auf 100 % der Ressourcen. Das ist der Standardwert. Startet man nun einen Container mit cpu-shares=512, so kann dieser Container maximal 50 % der CPU-Zeit in Anspruch nehmen. Das Ganze noch auf dem Arbeitsspeicher angewandt, kann mit der Angabe von -m 256m in diesem Fall die Anzahl an Arbeitsspeicher, die den Container zur Verfügung gestellt wird, eingeschränkt werden. Mit Hilfe der Parameter capabilities kann man zusätzlich die Sicherheit eines Containers steuern. Denn standardmäßig hat ein Container keine Rechte, die auch ein typischer Root Boot auf dem System hätte. Mit der Parametrisierung privilege kann ein Container gegebenenfalls auf Dinge zugreifen, auf die er vorher nicht zugreifen konnte. Unter Umständen sind es Möglichkeiten wie die Hostmaschine herunterzufahren oder die Netzwerkkarten der Hostmaschine zu administrieren. Es ist außerdem auch möglich, explizit bestimmte Capabilities wieder für die Instanz freizugeben. Das funktioniert mit den jeweiligen Befehlen cap-add und cap-drop und den jeweiligen Namen der Capability. Netzwerk ist eins der Knotenpunkte, die Docker zur Verfügung stellt. Über den Docker-run-Befehl kann sehr viel des Netzwerkes noch gesteuert werden. Unter anderem gibt es Parametrisierung mit einem großen P und mit einem kleinem p. Die Unterschied zwischen beiden ist wenn man ein P verwendet, werden automatisch alles Ports, die der Container explizit angibt, dass sie benutzt werden, freigegeben auf der Hostmaschine. Die entsprechenden Hostmaschinen-Ports werden in dem Fall automatisch generiert. Mit der Angabe von -p kann man explizit den Port angeben, der man auf der Hostmaschine auf den jeweiligen Port des Containers mappen möchte. Außerdem kann man dem Container vorschreiben, wie und auf welche Art er auf das Netzwerk zugreifen kann. Mit Hilfe der bridge nutzt der Container die Netzwerkverbindung der Hostmaschine. Mit der Angabe von container und der jeweiligen id des Containers kann der neu gestartete Container die Netzwerkverbindung des anderen Containers nutzen. Mit der Angabe von host nutzt der Container die Netzwerkkarte des Hosts. Der Unterschied zwischen bridge und host ist in dem Fall, dass wenn ein Port geöffnet wird bei der Parametrisierung durch host, ist der Port automatisch auch auf der Hostmaschine freigegeben ohne explizites Mapping. Und durch die Angabe von none wird entsprechend keine Netzwerkverbindung für den Container eingerichtet. Standardmäßig können sich zwei Container untereinander nicht erreichen. Durch die Angabe von link und jeweils dem Namen eines anderen Containers und einem Alias, so wie er in dem jeweils gestarteten Container sichtbar sein soll, wird der Container entsprechend verlinkt und es kann von einem auf den anderen Container einen entsprechenden Zugriff geben. Sollte es aus bestimmten Gründen notwendig sein zusätzlich einen Port nach außen hin darzustellen, der wiederum über die -p- Parameter gemappt werden kann, kann mit Hilfe von expose dieser Port nach außen hin freigegeben werden. Wenn ich also nun den Oracle-Container ausführe mit der Parametriesierung -P und danach den Befehl docker ps - a eingebe, sehe ich automatisch, dass die Ports, die vergeben worden sind für die jeweils internen Ports der Maschine sind auf dem Docker-Host selber, diese Ports automatisch generiert worden. Das handelt sich hierbei um fortlaufende Ports. Das heißt, wenn man nun eine weitere Maschine startet, werden entsprechend die nächsten Ports hierfür verwendet. Nutze ich nun hingehend die explizite Angabe von Ports, die ich wünsche, dass sie auf der Hostmaschine freigegeben werden, werden entsprechend diese genutzt. Das bedeutet, dass die Ports hier nun gleichwertig gemappt sind bis auf diesen Port. Wenn ich nun folgenden Aufruf tätige das Start in einer interaktiven Ubuntu-Instanz, in der eine Verlinkung zwischen dem Container kickass sammet also diesem Oracle-Container als Namen Oracle und dieser Neustart in Ubunut- Instanz vorgenommen wird, bin ich nun in der Lage den Hostname zu verwenden, der in dem Fall Oracle ist und die in anderen entsprechenden Container anzupingen. Dieser antwortet mir und das ist entsprechend dann auch die ip, die den Oracle-Container repräsentiert. Würde ich nun eine Datenbank-Anwendung hier nutzen, könnte ich diese mit Oracle und dem Port 1521 verbinden. Sie haben nun also die typischen Parameter kennengelernt, die im Zusammenhang mit dem Docker-run-Befehl und einem entsprechenden Image verwendet werden können. Sie wissen nun also einerseits, wie man eine interaktive Session mit einem Container startet oder wie man einem Container im Hintergrund startet. Sie wissen weiterhin, wie man einen solchen Container für das Netzwerk entsprechend konfiguriert als auch, wie man die Ressourcennutzung eines solchen Containers einschränken kann.

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!