In den Beiträgen „Dockers, a new Container has arrived!“, „HowTo: Docker Installation (Linux)“ und „HowTo: Docker Installation (Windows)“ haben wir geklärt, was Docker ist, wie man es in Linux und Windows installiert. Nun ist es an der Zeit einen Docker Container aufzusetzen und mit ihm Erfahrungen zu sammeln.
Auch hier gibt es wieder zwei Möglichkeiten die Dinge anzugehen: Einmal manuell nur mit Befehlen in der Ubuntu-Kommandozeile (Bash) oder mit einem Dockerfile und Docker-Compose, mit dem ein eigenes Image erstellt wird, mit welchem wir vorkonfigurierte Container innerhalb von Sekunden aufsetzen können. Aber der Reihe nach. Hier kümmern wir uns zuerst um das manuelle Aufsetzen des Containers.
Ziehe ein Ubuntu Docker-Image
Zuerst brauchen wir ein Docker-Image eines Programms oder Dienstes, von dem wir Docker Container aufsetzen wollen. Hier ist das ein Ubuntu-Image. Um es zu bekommen, geben wir den folgenden Befehl in die Kommandozeile (in Ubuntu auf dem Docker installiert ist) ein.
docker pull ubuntuCode-Sprache: Bash (bash)
Das wird die aktuellste Version des Ubuntu Docker-Image von Docker-Hub herunterladen. In meinem Fall sind das stolze 28 MB. Wie in „Dockers, a new Container has arrived!“ beschrieben sieht man hier einen Vorteil von Docker, nämlich, dass die Container, als auch die Images, sehr wenig Platz brauchen. Wollte man eine virtuelle Maschine mit Ubuntu aufsetzen, würde man bereits nur für das Betriebssystem aktuell 6 GB (Ubuntu 24.04 LTS) benötigen. Das ist 250-mal mehr Speicherplatz!
Ubuntu Docker Container aufsetzen
Nun müssen wir den Docker-Container nur noch starten. Dazu reicht im Prinzip ein einfaches docker run ubuntu aus. Jedoch ist es sinnvoll, den docker run Befehl zu wie folgt zu modifizieren:
docker run -d -t -p 2020:2001 --name mycontainer_ubuntu ubuntuCode-Sprache: Bash (bash)
Der Zusatzbefehl “-d” bedeutet “detached” und führt dazu, dass der Docker Container im Hintergrund aufgesetzt wird, also dass man die Kommandozeile weiter benutzen kann und sie nicht auf die Beendigung des Containers abwartet. Außerdem wird durch diesen Zusatzbefehl (Flag) die Container ID ausgegeben, sobald er erfolgreich aufgesetzt ist.
Der Zusatzbefehl „-t“ steht für „teletypewriter“ und ordnet einen pseudo-TTY zu. Dies ist eine Schnittstelle zu einem Computersystem durch textbasierte Ein- und Ausgabe wie ein virtuelles Terminal oder eine Befehlszeilenschnittstelle (command-line interface (CLI)).
Mit „-p“ spezifizieren wir die Ports. Die erste Zahl ist der Port, mit dem wir den Container später per SSH erreichen können, und die zweite Zahl ist der Ubuntu-Container interne Port, mit dem wir interagieren. Bei Ubuntu und auch anderen Linus-basierten Betriebssystemen ist dieser Port normalerweise standardmäßig 22. Wir stellen ihn aber weiter unten um.
Mit dem Zusatzbefehl „–name“ können wir dem aufgesetzten Container einen Namen geben. Wenn wir mehrere Ubuntu-Container aufsetzen wollen würden, würde uns das die Zuordnung deutlich erleichtern. Hier haben wir den Namen „mycontainer_ubuntu“ gewählt.
Der letzte Teil des Befehles ist der Name des Docker-Images, von dem wir ein Container erzeugen wollen. Also das eben heruntergeladene 28 MB große aktuellste Ubuntu Image.
Das Ausführen des Befehls sollte nur ein paar Sekunden in Anspruch nehmen und es sollte eine Container-ID ausgegeben werden. In unserem Fall ist das 6ff8b4884bac2f1c6c76f7e2fe3d5317e5c27f9742094f905e9b2e337d5dc869. Diese Ausgabe zeigt uns, dass der Container ordnungsgemäß aufgesetzt wurde. Wunderbar!
Docker Container überprüfen und erste Schritte
Wir können uns die aktuell laufenden Docker Container anzeigen lassen, durch
docker psCode-Sprache: Bash (bash)
In der ausgegebenen Tabelle können wir unter „STATUS“ den Zustand unseres „mycontainer_ubuntu“ überprüfen. In unserem Fall finden wir „Up About a minute“, was bedeutet, dass er schon fast eine Minute läuft.
Gleichen können wir mit dem Befehl
docker container lsCode-Sprache: Bash (bash)
ausgeben lassen.
Mit dem Ubuntu Container interagieren
Wir haben ein oben einen Betriebssystem Docker Container aufgesetzt. Jetzt wollen wir gerne mit ihm interagieren und auf ihn zugreifen. Noch können wir dazu SSH noch nicht verwenden, weil das in unserem Ubuntu-Image nicht enthalten ist. Also müssen wir auf andere Art und Weise auf den Container zugreifen. Dazu können wir den docker exec Befehl verwenden:
docker exec -it mycontainer_ubuntu bashCode-Sprache: Bash (bash)
Hierbei steht “exec” für “execute“, also das ausführen eines Befehls des Containers. Hier verwenden wir den auszuführenden Befehl „bash“, was bedeutet, dass wir mit der Kommandozeile des Containers interagieren wollen. Die Zusatzbefehl „-it“ ist aus „-i“ und „-t“ zusammengesetzt, welche für „interactive“ und „tty“ stehen.
Wir der Befehl ausgeführt, verändert sich die Kommandozeile von „username@host: ~“ zu „root@somenumber:/#“ und ist eine Folge dessen, dass wir nun in der Kommandozeile des aufgesetzten Ubuntu Containers sind.
Weil aber der SSH-Dienst noch nicht installiert ist, können wir das nun nachholen.
SSH-Verbindung konfigurieren
Hier wird gezeigt, wie man in Ubuntu den SSH-Dienst aufsetzen kann und in konfiguriert. Diese Anleitung funktioniert nicht nur in Ubuntu Docker Containern sondern auch in ganz normalen und virtuellen Ubuntu Installationen.
Passwort setzen
Es ist eine gute Idee, das Root-Password zu setzen, vor allen Dingen wenn es sich um einen frisch aufgesetzten Docker Container handelt
passwd rootCode-Sprache: Bash (bash)
Das Passwort sollte man verinnerlichen, da man es später benötigen wird.
Ubuntu updaten und upgraden
Wie immer ist es eine gute Idee die apt-Paketverwaltung auf den neusten Stand zu bringen und Pakte upzugraden.
sudo apt-get update && sudo apt-get upgrade -yCode-Sprache: Bash (bash)
Der Zusatzbefehl “-y” sorgt dafür, dass eventuelle Upgrades ausgeführt und die benötigten Pakete automatisch heruntergeladen werden.
Hier fanden wir die Ausgabe „0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.“ vor, was bedeutet, dass alles auf dem neusten Stand ist.
SSH-Dienst installieren
Den SSH-Dienst kann man mittels
apt install openssh-serverCode-Sprache: Bash (bash)
installieren. Man wird gefragt ob man die benötigten Pakete herunterladen will (hier 124 MB) und in welcher Zeitzone man sich befindet. Man hätte auch „-y“ noch ergänzen können, dann wäre es zu solchen Fragen nicht gekommen. Durch
service --status-allCode-Sprache: Bash (bash)
den Status des SSH-Dienstes abfragen. Hier sollten wir unter „ssh“ ein „[ – ]“ finden. Das heißt, der Dienst existiert (jetzt), aber ist nicht aktiv.
Nun müssen wir den SSH-Dienst aktivieren und optional den Port anpassen, auf dem der SSH-Dienst arbeiten soll. Zu diesem Zweck müssen wir die ssh-Konfigurationsdatei mit einem Texteditor konfigurieren. Wir werden hier den Texteditor Nano verwenden. Falls Nano-Editor noch nicht installiert ist, installieren wir ihn mit
apt install nanoCode-Sprache: Bash (bash)
Dann öffnen wir die SSH-Konfigurationsdatei
nano /etc/ssh/sshd_configCode-Sprache: Bash (bash)
Und suchen nach „#PermitRootLogin Yes“ und entfernen die Raute. Nun können wir uns in den Ubuntu Docker Container mittels SSH als root-Benutzer einlogen. Zusätzlich können wir den internen Port verändern. Dazu suchen wir die Zeile „#Port 22“ und entfernen die Raute und ersetzen die „22“ durch einen Wert zwischen 1024 und 65536 (hier 2001). Das verändern des internen Ports ist optional. Wenn wir damit fertig sind können wir mit „Strg“ + „x“ das Dokument schließen, darauffolgend mit „y“ und „enter“ bestätigen, dass wir die Datei im gleichen Verzeichnis überschreiben wollen.
SSH-Dienst starten
Wir können nun den SSH-Dienst starten durch
service ssh startCode-Sprache: Bash (bash)
und überprüfen ob er korrekt arbeitet durch
service --status-allCode-Sprache: Bash (bash)
Nun sollten wir bei „ssh“ ein „[ + ]“ sehen. Mit
exitCode-Sprache: Bash (bash)
verlassen wir den Ubuntu Docker Container wieder.
Mit SSH auf Ubuntu (Container) zugreifen
Nun haben wir alles konfiguriert, um auf den Ubuntu Docker Container mit SSH zuzugreifen:
ssh root@localhost -p 2020Code-Sprache: Bash (bash)
Mit diesem Befehl in der Kommandozeile (z.B. Eingabeaufforderung unter Windows) können wir per SSH auf den Ubuntu Docker Container zugreifen. Wir müssen mit „-p“ den Port 2020 auswählen, da wir ihn oben für SSH-Dienste geöffnet haben.
Wenn wir nach dem Fingerprint gefragt werden, geben wir „yes“. Dann werden wir aufgefordert das root Passwort einzugeben, was wir machen. Und nun sind wir wie mit „docker exec“ in der Kommandozeile unseres Docker Containers.
Der obige Befehl funktioniert aber nur auf der Maschine, auf der wir Docker installiert haben mit dem wir den Ubuntu Container aufgesetzt haben. Wenn wir auf einem anderen Rechner arbeiten, der sich im gleichen Netzwerk befindet, wie die Docker-Maschine können wir mit
ssh root@localhostIPaddressofDockermaschine -p 2020Code-Sprache: Bash (bash)
Auf den Container zugreifen. Dabei muss „localhostIPaddressofDockermachine“ durch die IP-Adresse der Dockermaschine ersetzt werden (z.B. 123.123.123.12).
