So wird Docker genutzt
Mal wieder ein guter Link:
Entfernen von Docker-Images, -Containern und -Volumen
oder hier:
Docker run reference
Sobald Docker komplett incl. Engine installiert ist, kann Docker auch genutzt werden. Um Docker zu nutzen, muss man die Image-Namen wissen. Diese sind z.B. auf dem Docker Hub zu finden.
Docker-Image herunterladen
Um zu prüfen, welche Images heruntergeladen worden sind, gilt folgender Befehl:
Um zu prüfen, welche Container laufen, ist die Option **-a** wegzulassen:
Da noch kein Container gestartet wurde, wird auch noch nichts angezeigt, was an Containern läuft.
Mit dem folgenden Befehl wird ein Container aus dem vorher heruntergeladenen Image erstellt und gestartet:
Hier wäre der Dienst im Hintergrund und läuft vor sich hin (detached)
oder
Hier wäre der Dienst interaktiv und benutzbar (tached)
Hinweis
Wenn der run-Befehl ausgeführt wird, dann wird z.B. hinten nach dem Imagenamen ein Befehl angehängt, der dann ausgeführt werden soll. Wenn nichts angegeben wird, wird der Standardprozess gestartet.
Beispiel
Ubuntu - der Aufruf des Images zur Erstellung des Container kann mit ... ubuntu bash ... enden, damit nach dem Start des Containers sofort eine Bash vorhanden ist.
Es wird eine lange ID ausgegeben, wobei die ersten 12 Stellen wohl später die ID für die laufen Container darstellen.
Um zu prüfen, ob der Container läuft, ist wieder folgender Befehl abzusetzen:
Nun wird gezeigt, welche Container laufen. In diesem Falle ist es nur der Golang-Container.
Was der Name myneuesdocker, den ich selber kreiert habe, zu bedeuten hat, weiß ich noch nicht.
Ich weiß auch noch nicht, wo Docker den Pull-Download ablegt und wo der Container wirklich liegt. Denn eigentlich müsste mindestens eine Datei zu finden sein. In Linux wird alles in Dateien erledigt.
Um mit dem Container arbeiten zu können, ist folgender Befehl notwendig:
sudo docker exec -it myneuesdocker bash
root@0b2cb8ecefe8:/go#
In diesem Falle landet man als root in einem Bash-Terminal und kann loslegen.
Um zu prüfen, welche Ordner bzw. Dateien nun zur Verfügung stehen, ist nur der **ls**-Befehl notwendig:
root@0b2cb8ecefe8:/go# ls
bin src
Die Ausgabe ist sehr minimalistisch, da nur die notwendigen Abhängigkeiten erfüllt werden. Das ist eben der große Vorteil von Docker mit den Containern gegenüber den Virtualisierungstools.
Um den Container zu verlassen, ist nur dies erforderlich:
Damit ist man wieder auf der eigenen Maschine unterwegs und nicht mehr im Container. Der Container läuft aber noch und ist somit jederzeit wieder zu betreten.
Um einen Container mit dem Host, also dem eigenen Computer zu verbinden, ist beim Aufruf von run der Port mitzugeben:
Dieser Aufruf wurde auf dem Kanal von NetworkChuck in Verbindung mit einem anderen Betriebssystem genutzt. Ob das mit meinem Beispiel auch so geht, weiß ich nicht. Aber man kann Container mit dem eigenen Betriebssystem verbinden.
In dem Beispiel hat er in dem Container seine Trainingswebseite in einem Browser aufgerufen.
Um einen Container zu beenden, ist folgender Befehl notwendig:
Wenn man prüfen will, ob das Stoppen durchgeführt wurde, hilft wieder:
Sollte man den Container nochmal benutzen müssen, kann man ihn wieder starten:
Die Prüfung zeigt, dass der Container wieder gestartet ist:
Dieses Start und Stop ist nicht mit dem **run**-Befehl zu verwechseln, denn damit wurde das Image gestartet. Der Container wurde dann separat in einem nächsten Schritt gestartet (docker exec ...)
Je nach dem mit welcher Computerausstattung man unterwegs ist, muss man die Ressourcen im Auge behalten. Auch dafür ist gesorgt und mit folgendem Befehl kann man die Speicherauslastung prüfen:
Die Ausgabe dieses Befehls zeigt die Auslastung von CPU, RAM usw.
Da nur ein Container läuft, ist die Ausgabe relativ knapp:
Das Management von Images und Containern ist nicht unbedingt einfach. Über folgenden Befehl kann man sich die Hilfe anzeigen lassen:
Will man zu einzelnen Kommandos etwas wissen, muss der Befehl so aussehen:
Damit werden dann weitere Hilfen angezeigt, was man eben machen kann.
Im Laufe der Zeit werden sich vielleicht einige Images und Container ansammeln, die man nicht mehr haben will oder gebrauchen kann/möchte.
Um herauszufinden, welche Images vorhanden sind, ist dieser Befehl notwendig:
Dieser Befehl ist nicht mit der ps-Option zu verwechseln, die Container betrifft.
Diese Auflistung kann dazu verwendet werden, dass Images, die nicht mehr gewünscht sind, entfernt werden (es können mehrere Images angegeben werden):
Der Löschbefehl wurde nicht akzeptiert. Verstanden habe ich das bislang noch nicht.
Exkurs
Das habe ich hier gefunden Docker error cannot delete docker container, conflict: unable to remove repository reference
Mit dem ersten Befehl werden alle Container gelistet.
Mit dem zweiten Befehl werden alle Images gelistet.
Diese Befehle sind notwendig, um die ID von Container und Images herauszufinden. Anscheinend müssen erst die Container entsorgt werden, bevor die Images gelöscht werden können.
Nun wird zunächst ein Container (Hello-World aus der Installation) gelöscht:
Hiermit wird dann geprüft, ob der Container weg ist:
Sobald der Container gelöscht ist, kann auch das Images gelöscht werden:
Und hier die Prüfung der vorhandenen Images:
Das Image wurde tatsächlich gelöscht.
Es gibt auch eine radikale Methode, um verwaiste Container zu entsorgen. Da muss man schon ein bisschen aufpassen, um nicht zu viel zu entsorgen:
Aus der Webseite zum Entfernen von Containern
Entfernen von Containern
Entfernen von einem oder mehreren spezifischen Containern
Verwenden Sie den Befehl docker ps mit dem Flag -a, um den Namen oder die ID der Container zu finden, die Sie entfernen möchten.
Auflisten:
Entfernen:
Entfernen eines Containers beim Beenden
Falls Sie bei der Erstellung eines Containers wissen, dass Sie ihn nicht behalten möchten, wenn Sie damit fertig sind, können Sie `docker run --rm` ausführen, um ihn beim Beenden automatisch zu löschen.
Ausführen und entfernen:
Entfernen aller beendeten Container
Sie können Container mit `docker ps -a` finden und anhand ihres Status filtern: erstellt, wird neu gestartet, wird ausgeführt, angehalten oder beendet. Zum Überprüfen der Liste der beendeten Container verwenden Sie das Flag `-f`, um anhand des Status zu filtern. Wenn Sie wissen, dass Sie diese Container entfernen möchten, nutzen Sie `-q`, um die IDs an den Befehl `docker rm` zu übergeben.
Auflisten:
Entfernen:
Löschen aller unbenutzten oder unreferenzierten Images, Container, Volumen und Netzwerke
Docker bietet einen einzelnen Befehl zur Bereinigung beliebiger Ressourcen – Images, Container, Volumen und Netzwerke –, die unreferenziert (also nicht mit einem Container verknüpft) sind:
Um auch angehaltene Container und alle nicht verwendeten Images zu entfernen (nicht nur unreferenzierte Images), fügen Sie dem Befehl das Flag `-a` hinzu:
Entfernen von Docker-Images
Entfernen von einem oder mehreren spezifischen Images
Verwenden Sie den Befehl `docker images` mit dem Flag `-a`, um die ID der Images zu finden, die Sie entfernen möchten. Dadurch wird Ihnen jedes Image angezeigt, einschließlich dazwischenliegender Image-Ebenen. Wenn Sie die Images gefunden haben, die Sie löschen möchten, können Sie ihre ID oder ihr Tag `docker rmi` übergeben:
Auflisten:
Entfernen:
Entfernen von unreferenzierten Images
Docker-Images bestehen aus mehreren Ebenen. Unreferenzierte Images sind Ebenen, die keine Beziehung zu getaggten Images haben. Sie dienen keinem Zweck mehr und verbrauchen Festplattenspeicher. Sie lassen sich finden, indem Sie das Filter-Flag (`-f`) mit dem Wert `dangling=true` zum Befehl `docker images` hinzufügen. Wenn Sie sicher sind, dass Sie sie löschen möchten, können Sie den Befehl `docker images purge` verwenden:
Anmerkung:
Wenn Sie ein Image erstellen, ohne es mit einem Tag zu versehen, wird das Image in der Liste der unreferenzierten Images angezeigt, da es keine Zuordnung zu einem getaggten Image aufweist. Sie können diese Situation vermeiden, indem Sie beim Erstellen ein Tag angeben; außerdem können Sie Images mit dem Befehl docker tag im Nachhinein mit einem Tag versehen.
Auflisten:
Entfernen:
Entfernen von Images gemäß einem Muster
Sie können alle Images finden, die mit einem Muster übereinstimmen, indem Sie eine Kombination aus docker images und grep nutzen. Wenn Sie damit zufrieden sind, können Sie sie durch awk löschen, um die IDs an `docker rmi` zu übergeben. Beachten Sie, dass diese Dienstprogramme nicht von Docker bereitgestellt werden und nicht unbedingt für alle Systeme verfügbar sind:
Auflisten:
Entfernen:
Alle Images entfernen
Alle Docker-Images in einem System können aufgelistet werden, indem Sie dem Befehl docker images -a hinzufügen. Wenn Sie sicher sind, dass Sie alle löschen möchten, können Sie das Flag -q hinzufügen, um die Image-ID an docker rmi zu übergeben:
Auflisten:
Entfernen:
Noch eine Hilfe, sollte man mehrere Container laufen haben:
If you want to cleanup docker images and containers
CAUTION: this will flush everything
stop all containers
remove all containers
remove all images
Wo liegen die Docker-Images?
Mit folgendem Befehl kann man die Docker-Infos ermitteln:
Die Ausgabe länger und die Antwort auf die Frage im letzten Teil der Ausgabe zu sehen:
Der docker-root-ordner liegt hier:
docker ist ein Ordner, der mit einem Schloss versehen ist:
Die Images und Container werden in diesem Pfad abgespeichert, aber nicht namtlich erkennbar, sondern mit SHA256-Codenamen. Somit sind diese Dateien außerhalb der Einflussnahme durch den User, also durch mich. Ich kann nur das Management betreiben. So sieht der Ordner im Midnight-Commander aus:
Somit kann ich nun am 16.08.2021 in das echte Handling von Docker einsteigen.
Docker kann nur Serversoftware verarbeiten. Grafische Oberflächen kann Docker nicht darstellen und war auch nicht Sinn und Zweck für die Entwicklung dieses Tools. Die möglichen Betriebssystem, die in Docker laufen, sind also immer nur die Serverversionen, nie die Desktop-Versionen.
Damit der Normaluser mit Docker arbeiten kann, ist er zur Gruppe Docker hinzuzufügen:
Nach einer Neuanmeldung ist die Gruppenzuordnung aktiv.
Exkurs
Im Normalfall wird erst der Pull-Befehl und dann der Run-Befehl ausgeführt. Man kann aber auch direkt den Run-Befehl ausführen. Wird das Images nicht gefunden, wird es heruntergeladen. Also wird der Pull-Befeh implizit ausgeführt.
Die Option -d im Run-Befehl sorgt dafür, dass der Container im Hintergrund läuft.
Die Option -p 8080:80 sorgt dafür, dass man innerhalb des Container einen nach außen geöffneten Port zur Verfügung hat. Bei Webserver, die später im Webbrowser ausgeführt werden, oder bei anderen Webanwendungen (z.B. Ghost) ist das notwendig. Im Browser wäre anzugeben: localhost:8080
Die wichtigsten Befehle nochmal zusammengefasst:
Eigene Daten sollte man nicht in den Container kopieren, sondern via Volumes bereitstellen, die dann vom Container genutzt werden. Da ist z.B. für einen Webserver gut, der in einem Container läuft und die HTML-Seiten liegen dann im Volume.
Zwar läuft z.B. ein Webserver in einem Container, aber gleichzeitig wird er auch vom Host, also vom eigenen Computer erkannt. Mit folgendem Befehl kann man prüfen, ob z.B. nginx ausgeführt wird, der in eiinem Container läuft:
Mal wieder ein guter Link:
Entfernen von Docker-Images, -Containern und -Volumen
oder hier:
Docker run reference
Sobald Docker komplett incl. Engine installiert ist, kann Docker auch genutzt werden. Um Docker zu nutzen, muss man die Image-Namen wissen. Diese sind z.B. auf dem Docker Hub zu finden.
Docker-Image herunterladen
Code:
sudo docker pull golang
Um zu prüfen, welche Images heruntergeladen worden sind, gilt folgender Befehl:
Code:
sudo docker ps -a
[sudo] Passwort für user:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3b4a2640dd52 golang "bash" 19 hours ago Exited (0) 19 hours ago mystifying_wu
0ee81db39223 ubuntu "bash" 21 hours ago Exited (0) 21 hours ago stupefied_buck
e5afa06d8d02 hello-world "/hello" 21 hours ago Exited (0) 21 hours ago mystifying_bell
Um zu prüfen, welche Container laufen, ist die Option **-a** wegzulassen:
Code:
sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Da noch kein Container gestartet wurde, wird auch noch nichts angezeigt, was an Containern läuft.
Mit dem folgenden Befehl wird ein Container aus dem vorher heruntergeladenen Image erstellt und gestartet:
Hier wäre der Dienst im Hintergrund und läuft vor sich hin (detached)
Code:
sudo docker run -d -it --name myneuesdocker golang
oder
Hier wäre der Dienst interaktiv und benutzbar (tached)
Code:
sudo docker run -it --name myneuesdocker golang
0b2cb8ecefe8dbabb95a2078419a8585dc5b224693809a1560fff8321c429f0e
Hinweis
Wenn der run-Befehl ausgeführt wird, dann wird z.B. hinten nach dem Imagenamen ein Befehl angehängt, der dann ausgeführt werden soll. Wenn nichts angegeben wird, wird der Standardprozess gestartet.
Beispiel
Ubuntu - der Aufruf des Images zur Erstellung des Container kann mit ... ubuntu bash ... enden, damit nach dem Start des Containers sofort eine Bash vorhanden ist.
Es wird eine lange ID ausgegeben, wobei die ersten 12 Stellen wohl später die ID für die laufen Container darstellen.
Um zu prüfen, ob der Container läuft, ist wieder folgender Befehl abzusetzen:
Code:
sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0b2cb8ecefe8 golang "bash" About a minute ago Up About a minute myneuesdocker
Nun wird gezeigt, welche Container laufen. In diesem Falle ist es nur der Golang-Container.
Was der Name myneuesdocker, den ich selber kreiert habe, zu bedeuten hat, weiß ich noch nicht.
Ich weiß auch noch nicht, wo Docker den Pull-Download ablegt und wo der Container wirklich liegt. Denn eigentlich müsste mindestens eine Datei zu finden sein. In Linux wird alles in Dateien erledigt.
Um mit dem Container arbeiten zu können, ist folgender Befehl notwendig:
sudo docker exec -it myneuesdocker bash
root@0b2cb8ecefe8:/go#
In diesem Falle landet man als root in einem Bash-Terminal und kann loslegen.
Um zu prüfen, welche Ordner bzw. Dateien nun zur Verfügung stehen, ist nur der **ls**-Befehl notwendig:
root@0b2cb8ecefe8:/go# ls
bin src
Die Ausgabe ist sehr minimalistisch, da nur die notwendigen Abhängigkeiten erfüllt werden. Das ist eben der große Vorteil von Docker mit den Containern gegenüber den Virtualisierungstools.
Um den Container zu verlassen, ist nur dies erforderlich:
Code:
root@0b2cb8ecefe8:/go# exit
exit
user@user:~$
Damit ist man wieder auf der eigenen Maschine unterwegs und nicht mehr im Container. Der Container läuft aber noch und ist somit jederzeit wieder zu betreten.
Um einen Container mit dem Host, also dem eigenen Computer zu verbinden, ist beim Aufruf von run der Port mitzugeben:
Code:
sudo docker run -d -t -p 80:80 --name myneuesdocker golang
Dieser Aufruf wurde auf dem Kanal von NetworkChuck in Verbindung mit einem anderen Betriebssystem genutzt. Ob das mit meinem Beispiel auch so geht, weiß ich nicht. Aber man kann Container mit dem eigenen Betriebssystem verbinden.
In dem Beispiel hat er in dem Container seine Trainingswebseite in einem Browser aufgerufen.
Um einen Container zu beenden, ist folgender Befehl notwendig:
Code:
user@user:~$ sudo docker stop myneuesdocker
myneuesdocker
Wenn man prüfen will, ob das Stoppen durchgeführt wurde, hilft wieder:
Code:
user@user:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Sollte man den Container nochmal benutzen müssen, kann man ihn wieder starten:
Code:
user@user:~$ sudo docker start myneuesdocker
myneuesdocker
Die Prüfung zeigt, dass der Container wieder gestartet ist:
Code:
user@user:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0b2cb8ecefe8 golang "bash" 54 minutes ago Up 25 seconds myneuesdocker
Dieses Start und Stop ist nicht mit dem **run**-Befehl zu verwechseln, denn damit wurde das Image gestartet. Der Container wurde dann separat in einem nächsten Schritt gestartet (docker exec ...)
Je nach dem mit welcher Computerausstattung man unterwegs ist, muss man die Ressourcen im Auge behalten. Auch dafür ist gesorgt und mit folgendem Befehl kann man die Speicherauslastung prüfen:
Code:
sudo docker stats
Die Ausgabe dieses Befehls zeigt die Auslastung von CPU, RAM usw.
Da nur ein Container läuft, ist die Ausgabe relativ knapp:
Code:
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
0b2cb8ecefe8 myneuesdocker 0.00% 824KiB / 62.73GiB 0.00% 12.2kB / 0B 0B / 0B 1
Das Management von Images und Containern ist nicht unbedingt einfach. Über folgenden Befehl kann man sich die Hilfe anzeigen lassen:
Code:
docker --help
Will man zu einzelnen Kommandos etwas wissen, muss der Befehl so aussehen:
Code:
docker system --help
Damit werden dann weitere Hilfen angezeigt, was man eben machen kann.
Im Laufe der Zeit werden sich vielleicht einige Images und Container ansammeln, die man nicht mehr haben will oder gebrauchen kann/möchte.
Um herauszufinden, welche Images vorhanden sind, ist dieser Befehl notwendig:
Code:
sudo docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
golang latest 0821480a2b48 10 days ago 862MB
ubuntu latest 1318b700e415 2 weeks ago 72.8MB
hello-world latest d1165f221234 5 months ago 13.3kB
Dieser Befehl ist nicht mit der ps-Option zu verwechseln, die Container betrifft.
Diese Auflistung kann dazu verwendet werden, dass Images, die nicht mehr gewünscht sind, entfernt werden (es können mehrere Images angegeben werden):
Code:
user@user:~$ sudo docker rmi hello-world
Error response from daemon: conflict: unable to remove repository reference "hello-world" (must force) - container e5afa06d8d02 is using its referenced image d1165f221234
Der Löschbefehl wurde nicht akzeptiert. Verstanden habe ich das bislang noch nicht.
Exkurs
Das habe ich hier gefunden Docker error cannot delete docker container, conflict: unable to remove repository reference
Code:
docker container ls -a
docker image ls
docker container rm <container_id>
docker image rm <image_id>
Mit dem ersten Befehl werden alle Container gelistet.
Mit dem zweiten Befehl werden alle Images gelistet.
Diese Befehle sind notwendig, um die ID von Container und Images herauszufinden. Anscheinend müssen erst die Container entsorgt werden, bevor die Images gelöscht werden können.
Nun wird zunächst ein Container (Hello-World aus der Installation) gelöscht:
Code:
user@user:~$ sudo docker container rm e5afa06d8d02
e5afa06d8d02
Hiermit wird dann geprüft, ob der Container weg ist:
Code:
user@user:~$ sudo docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0b2cb8ecefe8 golang "bash" 2 hours ago Up 41 minutes myneuesdocker
3b4a2640dd52 golang "bash" 20 hours ago Exited (0) 20 hours ago mystifying_wu
0ee81db39223 ubuntu "bash" 23 hours ago Exited (0) 23 hours ago stupefied_buck
Sobald der Container gelöscht ist, kann auch das Images gelöscht werden:
Code:
django@django:~$ sudo docker image rm d1165f221234
Untagged: hello-world:latest
Untagged: hello-world@sha256:0fe98d7debd9049c50b597ef1f85b7c1e8cc81f59c8d623fcb2250e8bec85b38
Deleted: sha256:d1165f2212346b2bab48cb01c1e39ee8ad1be46b87873d9ca7a4e434980a7726
Deleted: sha256:f22b99068db93900abe17f7f5e09ec775c2826ecfe9db961fea68293744144bd
Und hier die Prüfung der vorhandenen Images:
Code:
user@user:~$ sudo docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
golang latest 0821480a2b48 10 days ago 862MB
ubuntu latest 1318b700e415 2 weeks ago 72.8MB
Das Image wurde tatsächlich gelöscht.
Es gibt auch eine radikale Methode, um verwaiste Container zu entsorgen. Da muss man schon ein bisschen aufpassen, um nicht zu viel zu entsorgen:
Code:
docker system prune -a
WARNING! This will remove:
all stopped containers
all networks not used by at least one container
all unused images
all build cache
Aus der Webseite zum Entfernen von Containern
Entfernen von Containern
Entfernen von einem oder mehreren spezifischen Containern
Verwenden Sie den Befehl docker ps mit dem Flag -a, um den Namen oder die ID der Container zu finden, die Sie entfernen möchten.
Auflisten:
Code:
docker ps -a
Entfernen:
Code:
docker rm ID_or_Name ID_or_Name
Entfernen eines Containers beim Beenden
Falls Sie bei der Erstellung eines Containers wissen, dass Sie ihn nicht behalten möchten, wenn Sie damit fertig sind, können Sie `docker run --rm` ausführen, um ihn beim Beenden automatisch zu löschen.
Ausführen und entfernen:
Code:
docker run --rm image_name
Entfernen aller beendeten Container
Sie können Container mit `docker ps -a` finden und anhand ihres Status filtern: erstellt, wird neu gestartet, wird ausgeführt, angehalten oder beendet. Zum Überprüfen der Liste der beendeten Container verwenden Sie das Flag `-f`, um anhand des Status zu filtern. Wenn Sie wissen, dass Sie diese Container entfernen möchten, nutzen Sie `-q`, um die IDs an den Befehl `docker rm` zu übergeben.
Auflisten:
Code:
docker ps -a -f status=exited
Entfernen:
Code:
docker rm $(docker ps -a -f status=exited -q)
Löschen aller unbenutzten oder unreferenzierten Images, Container, Volumen und Netzwerke
Docker bietet einen einzelnen Befehl zur Bereinigung beliebiger Ressourcen – Images, Container, Volumen und Netzwerke –, die unreferenziert (also nicht mit einem Container verknüpft) sind:
Code:
docker system prune
Um auch angehaltene Container und alle nicht verwendeten Images zu entfernen (nicht nur unreferenzierte Images), fügen Sie dem Befehl das Flag `-a` hinzu:
Code:
docker system prune -a
Entfernen von Docker-Images
Entfernen von einem oder mehreren spezifischen Images
Verwenden Sie den Befehl `docker images` mit dem Flag `-a`, um die ID der Images zu finden, die Sie entfernen möchten. Dadurch wird Ihnen jedes Image angezeigt, einschließlich dazwischenliegender Image-Ebenen. Wenn Sie die Images gefunden haben, die Sie löschen möchten, können Sie ihre ID oder ihr Tag `docker rmi` übergeben:
Auflisten:
Code:
docker images -a
Entfernen:
Code:
docker rmi Image Image
Entfernen von unreferenzierten Images
Docker-Images bestehen aus mehreren Ebenen. Unreferenzierte Images sind Ebenen, die keine Beziehung zu getaggten Images haben. Sie dienen keinem Zweck mehr und verbrauchen Festplattenspeicher. Sie lassen sich finden, indem Sie das Filter-Flag (`-f`) mit dem Wert `dangling=true` zum Befehl `docker images` hinzufügen. Wenn Sie sicher sind, dass Sie sie löschen möchten, können Sie den Befehl `docker images purge` verwenden:
Anmerkung:
Wenn Sie ein Image erstellen, ohne es mit einem Tag zu versehen, wird das Image in der Liste der unreferenzierten Images angezeigt, da es keine Zuordnung zu einem getaggten Image aufweist. Sie können diese Situation vermeiden, indem Sie beim Erstellen ein Tag angeben; außerdem können Sie Images mit dem Befehl docker tag im Nachhinein mit einem Tag versehen.
Auflisten:
Code:
docker images -f dangling=true
Entfernen:
Code:
docker images purge
Entfernen von Images gemäß einem Muster
Sie können alle Images finden, die mit einem Muster übereinstimmen, indem Sie eine Kombination aus docker images und grep nutzen. Wenn Sie damit zufrieden sind, können Sie sie durch awk löschen, um die IDs an `docker rmi` zu übergeben. Beachten Sie, dass diese Dienstprogramme nicht von Docker bereitgestellt werden und nicht unbedingt für alle Systeme verfügbar sind:
Auflisten:
Code:
docker images -a | grep "pattern"
Entfernen:
Code:
docker images -a | grep "pattern" | awk '{print $3}' | xargs docker rmi
Alle Images entfernen
Alle Docker-Images in einem System können aufgelistet werden, indem Sie dem Befehl docker images -a hinzufügen. Wenn Sie sicher sind, dass Sie alle löschen möchten, können Sie das Flag -q hinzufügen, um die Image-ID an docker rmi zu übergeben:
Auflisten:
Code:
docker images -a
Entfernen:
Code:
docker rmi $(docker images -a -q)
Noch eine Hilfe, sollte man mehrere Container laufen haben:
If you want to cleanup docker images and containers
CAUTION: this will flush everything
stop all containers
Code:
docker stop $(docker ps -a -q)
remove all containers
Code:
docker rm $(docker ps -a -q)
remove all images
Code:
docker rmi -f $(docker images -a -q)
Wo liegen die Docker-Images?
Mit folgendem Befehl kann man die Docker-Infos ermitteln:
Code:
sudo docker info
Die Ausgabe länger und die Antwort auf die Frage im letzten Teil der Ausgabe zu sehen:
Code:
user@user:~$ sudo docker info
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Build with BuildKit (Docker Inc., v0.6.1-docker)
scan: Docker Scan (Docker Inc., v0.8.0)
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 20.10.8
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
Default Runtime: runc
Init Binary: docker-init
containerd version: e25210fe30a0a703442421b0f60afac609f950a3
runc version: v1.0.1-0-g4144b63
init version: de40ad0
Security Options:
apparmor
seccomp
Profile: default
Kernel Version: 5.11.0-25-generic
Operating System: Ubuntu 20.04.2 LTS
OSType: linux
Architecture: x86_64
CPUs: 16
Total Memory: 62.73GiB
Name: django
ID: RTKL:M23W:E6CV:JO3K:YVNJ:GXXS:I5XO:3UU3:R654:KJQX:AXYO:L43R
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
Der docker-root-ordner liegt hier:
Zitat:/var/lib/docker
docker ist ein Ordner, der mit einem Schloss versehen ist:
Die Images und Container werden in diesem Pfad abgespeichert, aber nicht namtlich erkennbar, sondern mit SHA256-Codenamen. Somit sind diese Dateien außerhalb der Einflussnahme durch den User, also durch mich. Ich kann nur das Management betreiben. So sieht der Ordner im Midnight-Commander aus:
Somit kann ich nun am 16.08.2021 in das echte Handling von Docker einsteigen.
Docker kann nur Serversoftware verarbeiten. Grafische Oberflächen kann Docker nicht darstellen und war auch nicht Sinn und Zweck für die Entwicklung dieses Tools. Die möglichen Betriebssystem, die in Docker laufen, sind also immer nur die Serverversionen, nie die Desktop-Versionen.
Damit der Normaluser mit Docker arbeiten kann, ist er zur Gruppe Docker hinzuzufügen:
Code:
sudo usermod -aG docker django
Nach einer Neuanmeldung ist die Gruppenzuordnung aktiv.
Exkurs
Im Normalfall wird erst der Pull-Befehl und dann der Run-Befehl ausgeführt. Man kann aber auch direkt den Run-Befehl ausführen. Wird das Images nicht gefunden, wird es heruntergeladen. Also wird der Pull-Befeh implizit ausgeführt.
Die Option -d im Run-Befehl sorgt dafür, dass der Container im Hintergrund läuft.
Die Option -p 8080:80 sorgt dafür, dass man innerhalb des Container einen nach außen geöffneten Port zur Verfügung hat. Bei Webserver, die später im Webbrowser ausgeführt werden, oder bei anderen Webanwendungen (z.B. Ghost) ist das notwendig. Im Browser wäre anzugeben: localhost:8080
Die wichtigsten Befehle nochmal zusammengefasst:
- docker pull imagename
- docker ps
- docker ps -a (zeigt auch laufende Container)
- docker run -d -t --name **platzname** imagename
- docker exec -it **platzname** bash oder sh (wo der Container laufen soll)
- exit (aus Container aussteigen)
- docker stop **platzname** (Container stoppen)
- docker start **platzname** (Container starten)
- docker info
- docker stats
- docker --help
- docker command --help
- docker images -a
- docker container ls -a
- docker image ls
- docker volume ls
- docker container rm ID-Container oder Name
- docker image rm ID-Image oder Name
- docker system prune -a (mit Vorsicht, alles alle Container, die unbenutzt sind.
- docker run --rm image_name (Vorsicht: beim Beenden wird der Container direkt wieder gelöscht)
Eigene Daten sollte man nicht in den Container kopieren, sondern via Volumes bereitstellen, die dann vom Container genutzt werden. Da ist z.B. für einen Webserver gut, der in einem Container läuft und die HTML-Seiten liegen dann im Volume.
Zwar läuft z.B. ein Webserver in einem Container, aber gleichzeitig wird er auch vom Host, also vom eigenen Computer erkannt. Mit folgendem Befehl kann man prüfen, ob z.B. nginx ausgeführt wird, der in eiinem Container läuft:
Code:
ps axu | grep nginx