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:

BefehlBeschreibung
docker createErstellt einen neuen Container aus einem Image
docker startStartet einen bestehenden Container
docker stopStoppt einen bestehenden Container
docker attachVerbindet die Bash Ein/Ausgabe mir dem im Container laufenden Prozess
docker execFührt einen Befehl in einem Container aus
docker runErstellt einen neuen Conatiner aus einem Image und führt einen Befehl darin aus
docker psListet alle erstellten Container auf
docker imagesListet alle heruntergeladenen Images auf
docker renameContainer umbenennen
docker rmContainer löschen
docker rmiImages 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/

nginx-Startseite unter 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.