Beiträge durchsuchen

Docker Grundlagen


Container

Starten

docker run besteht aus zwei Komponenten:

  • docker create erzeugt einen Container indem es den Inhalt des Images in den Festplatten-Bereich der Linux VM kopiert
  • docker start führt den im Image hinterlegten Befehl aus.

Existiert der Container schon, kann man ihn mit docker start -a <ContainerID>starten (das -a zeigt den Output des Containers auf der Commandline an)

Beenden

Dazu stehen zwei Befehle zur Verfügung:

  • docker stop <containerID>
  • docker kill <containerID>

docker stopist die sanftere Methode, die ein SIGTERM an den entsprechenden Prozess sendet, der dann die Möglichkeit hat, sich sauber zu beenden.
Bei docker kill wird ein SIGKILL geschickt, was den Prozess sofort beendet und ihm keine Möglichkeit lässt, hinter sich aufzuräumen.
Bei einem docker stop gibt Docker dem Prozess 10 Sekunden Zeit, sich zu beenden. Reicht das nicht sendet es automatisch ein docker kill hinterher.

Löschen

Um alle vorhandenen Container, alle damit verbundenen Netze und noch einiges mehr zu löschen, verwendet man den Befehl docker system prune.
Danach ist das System wieder sauber und der von den Containern belegte Speicherplatz wieder verfügbar.

Auflisten

docker ps --all
Der --all Parameter sorgt dafür, dass auch die beendeten Container aufgelistet werden.

Befehl in einem Container ausführen

Um von aussen einen Befehl innerhalb eines Containers abzusetzen, verwendet man folgenden Befehl:
docker exec -it <containerID> <Befehl>
Mit diesem Befehl kann man z.B. eine Shell innerhalb des Containers starten und sich dann darin frei bewegen.
Mit ctrl c kommt man wieder auf die lokale Kommandozeile zurück.
Es geht aber auch in einem Schritt: Gibt man dem run Befehl ein -it und ein Kommando (z.B. sh) mit, landet man direkt nach dem Start des Containers in der so gestarteten Shell:
docker run -it busybox sh

Logfiles

Mit dem Befehl docker logs <containerID> lassen sich alle Logs eines beendeten Containers anzeigen. Dafür wird der Container selbst in keiner Form gestartet, sondern nur die in ihm gespeicherten Logs angezeigt.

Images

Ein Image ist die Vorlage für einen Container und kann die verschiedensten Bestandteile haben, je nach gewünschtem Einsatz des daraus erzeugten Containers (z.B. einen Webserver)

Dockerfile

Ein Dockerfile ist eine Konfigurations-Datei, in der mehrere Befehle zum erstellen eines Images zusammengefasst werden. Die Befehle werden von oben nach unten abgearbeitet. Die Reihenfolge ist wichtig, denn wenn man ein Image ein zweites Mal erstellt, weil man einen zusätzlichen Befehl eingebaut hat, kann Docker die Schritte, die sich zur ersten Version nicht geändert haben, aus dem seinem Cache verwenden. Das beschleunigt die Image-Erstellung erheblich. Neu Befehle sollten also so weit unten wie möglich im Dockerfile platziert werden.

    # Use an existing docker image as a base    
    FROM alpine

    # Set the working directory to something other than root
    WORKDIR /usr/apps

    # Install redis-server by apk
    RUN apk add --update redis

    # Set start-command to the image when it starts as a container
    CMD ["redis-server"]

Um ein Image aus einem solchen Dockerfile zu erstellen, wechselt man im Terminal in das Verzeichnis, in dem das Dockerfile liegt und gibt folgenden Befehl ein:

docker build .  

Läuft der Prozess erfolgreich bis zum Ende,steht in der letzten Output Zeile die ID des neuen Images: Successfully build <Image-ID>

Tagging

Möchte man das Image später nicht unter der kryptischen ID ansprechen, sondern mit einem Namen, kann man das Image beim Erstellen auch taggen:

docker build -t <Deine-Docker-ID>/<Name-des-Images>:<Version> .

Dateien in den Container kopieren

COPY <Pfad zur lokalen Datei> <Ziel-Pfad im Container>

Mit dieser Zeile im ‚Dockerfile` kann man lokale Dateien in den zu erstellenden Container kopieren.

Parameter im Dockerfile

  • FROM : Gibt an, welches Image als Basis verwendet werden soll
  • RUN : Alles was hier steht, wird während des Build-Prozesses ausgeführt
  • CMD : Das Kommando, das beim Start des Containers ausgeführt wird (lässt sich auf der Kommandozeile überschreiben)
  • WORKDIR : Ohne Angabe dieses Parameters ist das Working Directory /. Hier kann man ein Verzeichnis seiner Wahl angeben. Existiert das Verzeichnis im Image noch nicht, wird es automatisch während des Build-Prozesses angelegt. Hier startet auch eine Shell, die man im Container startet.

Netzwerk

Standardmäßig ist ein Container nicht von aussen über das Netzwerk zu erreichen. Es gibt aber die Möglichkeit des Portmappings. Dazu wird zur Laufzeit angegeben, welcher lokale Port zu welchem Port innerhalb des Containers umgeleitet werden soll:

docker run -p <lokaler Port> : <Port im Container> <ImageID>

Auch untereinander können zwei Container nur dann kommunizieren, wenn man dies über die entsprechenden Parameter beim Aufruf konfiguriert. Das ist aber auf die Dauer zu umständlich weshalb es Docker-Compose gibt.

1 comment on Docker Grundlagen

Kommentare sind geschlossen.