In diesem Beitrag geht es darum, aus fertigen Images Container zu erstellen und diese zu nutzen.
Hinweis: Ich werde nicht erklären, wie man Docker installiert. Wer trotzdem Hilfe braucht wird hier fündig.
Images finden
Um ein Docker Image erstellen zu können muss man dessen Namen kennen. Docker ist Standardmäßig auf die Registry DockerHub voreingestellt. Hier liegen eigentlich alle öffentlich zugänglichen Images. Schaut doch mal selber rein und erforscht ein paar Seiten. Hier finden sich dann auch oft wichtige Informationen dazu, wie man die Images benutzt und welche unterschiedlichen Versionen (Tags) es gibt. Dazu mehr im nächsten Beitrag.
Beispiel nginx
Wir nutzen als Beispiel nun das Image nginx (ein simpler Webserver). Normalerweise besitzen Images einen Ersteller und einen Namen im Schema „ersteller/name“. In diesem Fall ist es allerdings ein Image welches zur DockerHub Standard Bibliothek gehört. Deshalb nur der einfache Name nginx.
Wir werden nun erstmal versuchen einen einfachen Container zu erstellen und die nginx-Landingpage im Webbrowser aufzurufen. Dafür benötigen wir einige Befehle.
Docker CLI
Die wichtigsten Docker Befehle sind:
Befehl | Beschreibung |
docker create | Erstellt einen neuen Container aus einem Image |
docker start | Startet einen bestehenden Container |
docker stop | Stoppt einen bestehenden Container |
docker attach | Verbindet die Bash Ein/Ausgabe mir dem im Container laufenden Prozess |
docker exec | Führt einen Befehl in einem Container aus |
docker run | Erstellt einen neuen Conatiner aus einem Image und führt einen Befehl darin aus |
docker ps | Listet alle erstellten Container auf |
docker images | Listet alle heruntergeladenen Images auf |
docker rename | Container umbenennen |
docker rm | Container löschen |
docker rmi | Images löschen |
Mehr lassen sich mit docker –help auflisten. Zu dem jeweiligen Befehl gibt es auch immer eine Hilfeseite. Desweitern gibt es Dokumentation hier.
Beispiel Container starten
Nun laden wir zunächst das Image runter und erstellen den Container mittels:
docker create --name "nginx-test" -p 8080:80 nginx
Dies erstellt einen Container mit dem namen „nginx-test“. Der -p Parameter steht für publish und gibt den internen Port 80, der nur im Docker-internen Netzwerk zur Verfügung steht an die Host-Maschine auf Port 8080 frei. Das benutzte Image steht am Ende. Woher weiß ich welchen Port ich veröffentlichen muss? Das ist von Image zu Image unterschiedlich und findet ihr auf der entsprechenden Docker Hub Seite. 8080 habe ich mir frei ausgesucht.
Unser Container ist jetzt erstellt, aber noch nicht gestartet. Dies können wir mittels docker start tun. Hier sieht man wieso es sinnvoll ist seinen Containern Namen zu geben:
docker start nginx-test
Der Conatiner läuft nun im Hintergrund und wir sollten in der Lage sein per Webbrowser die Standard-Nginx-Seite zu sehen, auf http://localhost:8080/
Eine Übersicht bekommen
Wir können auch mal nachschauen was unser Container so macht, mittels:
docker ps
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f3ce09f2cbce nginx "nginx -g 'daemon of…" 8 minutes ago Up 8 minutes 0.0.0.0:8080->80/tcp nginx-test
Wir sehen hier welche Container zur Zeit erstellt sind, in welchem Status sie sich befinden und welche Ports sie freigegeben haben. Sehr nützlich.
Spielt auch ruhig mit den anderen Befehlen aus der Tabelle oben etwas herum. Starten, stoppen, löschen, erstellen etc.
In den Container gehen
Docker Container sind in sich abgeschlossen. Man sollte sie also im betsen Fall nur starten und stoppen müssen. Alles was darin vorgeht ist uns egal. Manchmal ist es jedoch trotzdem nützlich in einen Container zu bashen um beispielsweise Fehler zu suchen oder Programme zu testen. Es gibt dafür 2 Möglichkeiten:
docker attach verbindet euch mit dem gerade im Container laufenden Prozess. Vorsicht, wenn ihr hier mittels Strg+C verlassen wollt, beendet ihr den Haupt-Prozess und damit den Container! Zum abkapseln nutzt ihr Strg+P, Strg+Q
docker exec -it <Container Name> /bin/bash startet einen neuen Terminal Prozess im Container (bin/bash wird ausgeführt) und verbindet euch dann mit diesem. -ti sind eigentlich zwei Parameter, die benötigt weden um ein Terminal zu emulieren. Auch hier gilt, Strg+C beendet den Terminal Prozess!
Was noch kommt
Was jetzt noch fehlt ist:
- Wie bringe ich meine Datein in den Container?
- Wie verbinde ich meine Container untereinander?
- Wie kreiere ich meine eigenen Container?
All das wird in den nächsten Parts dieser Reihe folgen. Falls ihr noch Fragen habt, schreibt sie mir gerne. Ich vervöllständige bei Bedarf dann diesen Post.