Image
Herunterladen
Image herunterladen:
docker [image] pull [Quelle]/[Name vom Image]:[Version]
Beispiel:
docker pull mariadb
bzw.
docker pull mariadb:latest
bzw.
docker image pull mariadb
Lokale Images anzeigen
Alle lokalen Images anzeigen:
docker image ls
Historie
Die Historie eines Images abrufen:
docker image history [Name vom Image]
Beispiel:
docker image history ubuntu
Detaillierte Infos zu einem Image
Detaillierte Infos zu einem Image abfragen (z.B.„Created“)
docker image inspect [Name vom Image]
Beispiel:
docker image inspect ubuntu
Du kannst auch gezielt eine Eigenschaft abfragen.
Beispiel:
docker image inspect ubuntu --format="{{.Created}}"
Tag
Tags erlauben es dir verschiedene Versionen von Images anzusteuern.
docker image tag [Name vom Image] [neuer tag für Image]
Beispiel:
docker image tag ubuntu ubuntu-new
Images löschen
docker image rm [Name vom Image bzw tag]
Beispiel:
docker image rm ubuntu-new
Container
Erstellen
docker [container] create
Beispiel:
docker create nginx
oder
docker create –it ubuntu
Starten
docker [container] start [Name des Containers]
Beispiel:
docker start con_mariadb
Run
Beim Ausführen von docker nun wird immer ein neuer Container erzeugt und gestartet!
docker run
Modes
- -t (mit einem Terminal)
- -i (interaktiv)
- -d (detached -> im Hintergrund)
- -it (interaktiv und mit Terminal
Alle Container auflisten
docker container ls –a -s
- -a (zeigt alle Container an; sonst werden nur aktive Container angezeigt)
- -s (zeigt auch die Größe des Containers an)
Arbeitsspeichernutzung von Container anzeigen:
docker container stats
Detaillierte Infos zu einem Image
docker [container] inspect
Container benennen / umbenennen
Ein Container besitzt immer einen zufällig generierten Namen. Dieser kann angepasst werden.
Eigenen Namen beim Erzeugen festlegen mit der Flag –name
docker create --name ubuntu-test -it ubuntu
docker run --name ubuntu-test -it ubuntu
Namen nachträglich ändern:
docker (container) rename [alter Name] [neuer Name]
docker rename [alter Name] ubuntu-test
Container stoppen, neu starten, pausieren
Container stoppen:
docker stop [ID / Name]
Container pausieren / fortsetzen:
docker pause [ID / Name]
docker unpause [ID / Name]
Container löschen
docker [container] rm [Name/ID vom Container]
Container automatisch nach dem Beenden löschen
Mit der Flag –rm kannst du spezifizieren, dass ein Container direkt nach seinem Beenden automatisch wieder gelöscht wird.
docker run -it --rm ubuntu
Container: Programme starten
docker container run [OPTIONS] IMAGE [COMMAND]
docker container create [OPTIONS] IMAGE [COMMAND]
Container: Zusätzliche Programme starten
docker container exec [OPTIONS] CONTAINER COMMAND
Beispiel:
docker container exec -it linktree-apache-1 bash
Logs
Wenn ein Container im Hintergrund läuft(-d), kannst du mit docker logs die Ausgabe einsehen.
Restart-Policy
Standardmäßig wird ein Container nicht neu gestartet. Mit der Restart-Policy kann dies jedoch veranlasst werden. Folgende Optionen gibt es:
- on-failure[:max-retries] (wird neu gestartet, wenn ein Fehler passiert – mit X maximalen Versuchen)
- always (wird immer neu gestartet, auch nach System-Neustart)
- unless-stopped (bleibt gestoppt, wenn gestoppt wird)
Beispiel:
docker run -d --restart unless-stopped [Image-Name]
docker update --restart unless-stopped [Container-ID / Name]
--restart=always
Ports
Zunächst sind Container nicht über den normalen Rechner verfügbar. Wenn ein Container / Dienst auf einem normalen Rechner ebenfalls angesprochen bzw. verfügbar sein soll, so muss der Container-Port auf einen Port des Hosts gelegt / veröffentlicht werden.
Dies geschieht mit dem Flag -p
docker run –p Host-Port:Container-Port Image-Name
Beispiel:
docker run -p 8888:80 nginx
Danach ist der WebServer nginx über http://localhost:8888 verfügbar.
Es können auch mehrere Ports veröffentlicht werden.
Beispiel:
docker run -p 8080:80 -p 8443:443 nginx
Dateien in Container speichern
Mit dem Befehl docker cp kannst du schnell Dateien oder Ordner in einen Container und aus einem Container kopieren.
Element vom Host-System in einen Container hinein kopieren:
docker cp [Element im Host-System bzw. Pfad dahin] [Name/ID desContainers]:[Verzeichnis im Container]
Element aus einem Container heraus in das Host-System kopieren:
docker cp [Name/ID des Containers]:[Element im Container bzw.Pfad dahin] [Verzeichnis im Host-System]
Mounts
Als Mounts bezeichnet man allgemein die Verknüpfung von der Verzeichnisstruktur eines Containers mit Daten, die außerhalb vom Container liegen.
- bind (Ein Container wird mit deinem lokalen Dateisystem verknüpft)
- volume (Bestimmte Daten in deinem Container werden an einen Docker-spezifischen Speicherort ausgelagert)
- tmpfs (nur unter Linux verfügbar! Daten werden in den Arbeitsspeicher deines lokalen Systems geschrieben.)
Bind Mount
- Flag –mount setzen und spezifizieren.
- type=bind
- source: enthält den Pfad zum lokalen Verzeichnis, das du mit der Verzeichnisstruktur des Containers verknüpfen möchtest
- destination: enthält den Pfad zum Verzeichnis im Container
Syntax:
--mount type=bind,source=[Pfad zu deinem lokalen Verzeichnis],destination=[Pfad zum Container-Verzeichnis]
Alternative Syntax:
-v [absoluter Pfad zu deinem lokalen Verzeichnis]:[Pfad zum Container-Verzeichnis]
Bind Mount -> ReadOnly
um ,readonly bzw. :ro ergänzen
Syntax:
--mount type=bind,source=[Pfad zu deinem lokalen Verzeichnis],destination=[Pfad zum Container- Verzeichnis],readonly
Alternative Syntax:
-v [absoluter Pfad zu deinem lokalen Verzeichnis]:[Pfad zum Container-Verzeichnis]:ro
Environment
-e PMA_HOST=dbhost
Volume
Eine Möglichkeit, um Daten außerhalb eines Containers zu speichern.
Z.B. für Datenbanken relevant. Nach dem Beenden des Containers wären sonst alle Daten weg. Liegen die Daten in einem Volume, wird nach dem Starten des Containers einfach wieder auf die Datenbank zugegriffen.
Unter Linux werden deine Volumes in deinem lokalen System indem Verzeichnis
/var/lib/docker/volumes/
gespeichert.
Volume erzeugen
docker volume create [Name]
Beispiel:
docker volume create ubu-vol
Alle Volumes anzeigen
docker volume ls
Details zum Volume
docker volume inspect [Name]
Volume löschen
docker volume rm [Name]
Volumes mit Container verknüpfen (–mount)
- type=volume
- source: der Name von deinem Volume
- destination: enthält den Pfad zum Verzeichnis im Container, das du mit dem Volume verbinden möchtest.
Syntax
--mount type=volume,source=[dein Volume],destination=[Pfad zum Container-Verzeichnis]
Volumes mit Container verknüpfen (-v)
-v [Name von deinem Volume]:[Verzeichnis im Container]
Achtung: Das ist sehr ähnlich zur Schreibweise von einem bind mount!
Du kannst natürlich auch einen Container mit mehreren Volumes verbinden (einfach –v mehrfach angeben).
Beispiel mariadb:
docker run -it -v mariadb-vol:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password123 mariadb
Netzwerk
- Bridge (Standard. Erlaubt die Kommunikation unter den Containern)
- host (Container sind 1:1 auf dem Host verfügbar)
- none (kein Netzwerk, wird deaktiviert)
Dockerfiles
Automatisiert eigene Container bauen lassen.
Compose
Mehrere Container automatisiert und mit einer strukturierten Datei starten / erzeugen.
Die entsprechende Datei „compose.yaml“ wird in einem Projekt-Ordner abgespeichert. Der Name des Projekt-Ordners dient anschließend als Name für die Container und das Netzwerk.
Beispiel-Datei für mariadb, phpmyadmin und WordPress:
services:
db:
image: mariadb
environment:
- MARIADB_ROOT_PASSWORD=geheim
- MARIADB_DATABASE=blog
- MARIADB_USER=blog
- MARIADB_PASSWORD=geheimes-passwort
restart: on-failure:10
volumes:
- db-vol:/var/lib/mysql
profiles:
- backend
- debug
- frontend
pma:
image: phpmyadmin
environment:
- PMA_HOST=db
ports:
- 6080:80
restart: on-failure:10
depends_on:
- db
profiles:
- debug
wp:
image: wordpress
environment:
- WORDPRESS_DB_HOST=db
- WORDPRESS_DB_USER=blog
- WORDPRESS_DB_PASSWORD=geheimes-passwort
- WORDPRESS_DB_NAME=blog
ports:
- 6081:80
restart: on-failure:10
depends_on:
- db
profiles:
- frontend
volumes:
db-vol:
name: mariadb_data
Mehrere Container starten:
docker compose up
Die Container stoppen, die Container und das Netzwerk automatisch löschen, Volumes bleiben natürlich bestehen:
docker compose down
Weitere nützliche Sub-Kommandos.
Container temporär stoppen:
docker compose stop
Container wieder starten:
docker compose start
Container pausieren / fortsetzen:
docker compose pause
docker compose unpause
Docker Swarm
Cluster mit Docker betreiben.