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 kopiertdocker 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 stop
ist 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 Kommentar zu Docker Grundlagen
Kommentare sind geschlossen.