Docker 2024 04/Containers: Unterschied zwischen den Versionen
Drlue (Diskussion | Beiträge) K Drlue verschob die Seite Docker 2024 04/Images Containers nach Docker 2024 04/Containers, ohne dabei eine Weiterleitung anzulegen |
Drlue (Diskussion | Beiträge) |
||
| (9 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
Folgendes soll einen | Folgendes soll einen grundlegendenden Überblick über das verwalten von Docker Containern bieten. | ||
=== Beispiel 1): Erster Container start === | === Beispiel 1): Erster Container start === | ||
| Zeile 15: | Zeile 15: | ||
9 pts/0 00:00:00 ps | 9 pts/0 00:00:00 ps | ||
}} | }} | ||
Wird | Wird das ausgeführte Programm, in diesem Fall {{BSL|bash}} mit {{BSL|exit}} geschlossen, so wird auch der Container beendet und durch den Parameter {{BSL|--rm}} auch entfernt. | ||
'''Parameter''' | '''Parameter''' | ||
| Zeile 32: | Zeile 32: | ||
=== Wichtige Befehle === | === Wichtige Befehle === | ||
Zu folgenden Befehlen sei angemerkt, dass diese alle {{BSL|--help}} unterstützen. Die Liste ist in keinster Weise vollständig {{BSL|docker --help}}. | Zu folgenden Befehlen sei angemerkt, dass diese alle den Parameter {{BSL|--help}} unterstützen. Die Liste ist in keinster Weise vollständig {{BSL|docker --help}}. | ||
* {{BSL|docker run}} | * {{BSL|docker run}} | ||
** Container erstellen | ** Container erstellen | ||
| Zeile 41: | Zeile 41: | ||
* {{BSL|docker cp}} | * {{BSL|docker cp}} | ||
** Dateien in einen, oder von einem Container kopieren | ** Dateien in einen, oder von einem Container kopieren | ||
* {{BSL|docker image}} | |||
** Verwalten von Images | |||
* {{BSL|docker volume}} | * {{BSL|docker volume}} | ||
** Verwalten von Volumes | ** Verwalten von Volumes | ||
| Zeile 53: | Zeile 55: | ||
* {{BSL|docker build}} | * {{BSL|docker build}} | ||
** Erstellen von images | ** Erstellen von images | ||
* {{BSL|docker tag}} | |||
** Neuen Image Tag mit Link auf bestehendes Image erstellen | |||
* {{BSL|docker push}} | |||
** Images in Registry hochladen | |||
* {{BSL|docker pull}} | |||
** Image aus Registry holen | |||
* {{BSL|docker inspect}} | * {{BSL|docker inspect}} | ||
** Container Details inspizieren | ** Container Details inspizieren | ||
* {{BSL|docker log}} | * {{BSL|docker log}} | ||
** Container Ausgabe einsehen | ** Container Ausgabe einsehen | ||
* {{BSL|docker attach}} | |||
** Mit Container verbinden | |||
=== Beispiel 2): Mit Container verbinden === | === Beispiel 2): Mit Container verbinden === | ||
| Zeile 109: | Zeile 119: | ||
RUN apt-get -y install curl | RUN apt-get -y install curl | ||
#Add new nodejs version to apt repository | #Add new nodejs version to apt repository | ||
RUN curl -sL https://deb.nodesource.com/setup_lts.x | RUN curl -sL https://deb.nodesource.com/setup_lts.x {{!}} bash - | ||
#Update apt again | #Update apt again | ||
RUN apt-get update | RUN apt-get update | ||
| Zeile 117: | Zeile 127: | ||
ENTRYPOINT ["npx", "http-serve", "-p", "5000","/var/www"] | ENTRYPOINT ["npx", "http-serve", "-p", "5000","/var/www"] | ||
}} | }} | ||
==== | |||
{{BSL|docker build . -t | ==== Image erstellen ==== | ||
==== | {{BSL|docker build . -t example5:1.0}} | ||
==== Image verwenden ==== | |||
{{BML|code= | {{BML|code= | ||
#Starten | #Starten | ||
docker run --rm --name example5 -d | docker run --rm --name example5 -d example5:1.0 | ||
#Logs des containers einsehen | #Logs des containers einsehen | ||
docker logs example5 | docker logs example5 | ||
}} | }} | ||
==== | ==== Mount verwenden ==== | ||
Weder kann nun auf den Webserver zugegriffen werden, noch hat dieser Zugriff auf das Dateisystem. Im folgenden wird ein Portmapping und ein Ordner Mount verwendet. | Weder kann nun auf den Webserver zugegriffen werden, noch hat dieser Zugriff auf das Dateisystem. Im folgenden wird ein Portmapping und ein Ordner Mount verwendet. | ||
{{BML|code= | {{BML|code= | ||
#Starten | #Starten | ||
docker run --rm --name example5 -d -v ./http:/var/www -p 8000:5000 | docker run --rm --name example5 -d -v ./http:/var/www -p 8000:5000 example5:1.0 | ||
}} | }} | ||
'''-v ./http:/var/www''' | '''-v ./http:/var/www''' | ||
Ordner mit dem relativen Pfad http wird in Container nach /var/www gemounted. | Ordner mit dem relativen Pfad '''http''' wird in Container nach '''/var/www gemounted'''. | ||
Handelt es sich nicht um einen lokalen Ordner, so wird ein automatisch ein '''Named Volume''' erstellt. | Handelt es sich nicht um einen lokalen Ordner, so wird ein automatisch ein '''Named Volume''' erstellt. | ||
Es können ''beliebig'' viele Verzeichnisse oder Named Volumes gemounted werden. | Es können ''beliebig'' viele Verzeichnisse oder Named Volumes gemounted werden. | ||
'''-p 8000:5000''' | '''-p 8000:5000''' | ||
Für den Container wird ein virtuelles Netzwerkdevice erstellt. Über das Portmapping wird der Port 8000 des Hostbestriebssystem auf den Port 5000 des Containers gemapped. | Für den Container wird ein virtuelles Netzwerkdevice erstellt (bzw. das default Bridge Netzwerk verwendet). Über das Portmapping wird der Port 8000 des Hostbestriebssystem auf den Port 5000 des Containers gemapped. | ||
Nun kann über http://localhost:8000 auf den Webserver zugegriffen werden. | Nun kann über http://localhost:8000 auf den Webserver zugegriffen werden. | ||
| Zeile 149: | Zeile 160: | ||
{{BML|code= | {{BML|code= | ||
#Starten | #Starten | ||
docker run --rm --name example5.1 -d -v www:/var/www -p 8000:5000 | docker run --rm --name example5.1 -d -v www:/var/www -p 8000:5000 example5:1.0 | ||
#Dateien oder Ordner in das Volume kopieren | #Dateien oder Ordner in das Volume kopieren | ||
docker cp index.html example5.1:/var/www | docker cp index.html example5.1:/var/www | ||
Aktuelle Version vom 19. April 2024, 05:37 Uhr
Folgendes soll einen grundlegendenden Überblick über das verwalten von Docker Containern bieten.
Beispiel 1): Erster Container start
docker run --name ubuntu --rm -it ubuntu:22.04 bash
Es öffnet sich nun ein Terminal im Container.
ps
Zeigt sehr anschaulich die Prozessisolierung.
PID TTY TIME CMD
1 pts/0 00:00:00 bash
9 pts/0 00:00:00 ps
Wird das ausgeführte Programm, in diesem Fall bash mit exit geschlossen, so wird auch der Container beendet und durch den Parameter --rm auch entfernt.
Parameter
docker run- Startet Container
--name ubuntu- Legt den Container Name fest, ansonsten wird ein sonderbarer Name generiert
--rm- Löscht den Container nach dem dieser geschlossen wird. Ansonsten bleibt dieser erhalten (im Status Exited)
-it- Standard Input offen halten und Pseudo TTY erstellen (Terminal)
ubuntu:22.04- Name des Images das gestartet werden soll
bash- Kommando das ausgeführt werden soll
Wichtige Befehle
Zu folgenden Befehlen sei angemerkt, dass diese alle den Parameter --help unterstützen. Die Liste ist in keinster Weise vollständig docker --help.
docker run- Container erstellen
docker start- Gestoppten Container starten
docker exec- Befehl in Container ausführen
docker cp- Dateien in einen, oder von einem Container kopieren
docker image- Verwalten von Images
docker volume- Verwalten von Volumes
docker ps- Anzeigen von Containern
docker stats- Statistiken zu Containern anzeigen
docker container- Verwalten von Containern
docker network- Verwalten von Netzwerken
docker build- Erstellen von images
docker tag- Neuen Image Tag mit Link auf bestehendes Image erstellen
docker push- Images in Registry hochladen
docker pull- Image aus Registry holen
docker inspect- Container Details inspizieren
docker log- Container Ausgabe einsehen
docker attach- Mit Container verbinden
Beispiel 2): Mit Container verbinden
Starten des vorhergehenden Images im detached mode, -d. Der Befehl bash benötigt -it, da er sonst beendet wird wie auch der Container selbst.
#Starten
docker run --name ubuntu -it -d --rm ubuntu:22.04 bash
#Container anzeigen -a, auch gestoppte
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3d2986a44d6f ubuntu:22.04 "bash" 2 seconds ago Up 1 second ubuntu
#Erneut mit Container verbinden
docker attach ubuntu
#Bash im Container schließen, beendet auch den Container
exit
Beispiel 3): Befehl in Container ausführen
Starten des vorhergehenden Images im detached mode.
#Starten
docker run --name ubuntu -it -d --rm ubuntu:22.04 bash
#Befehl ausführen, listet alle Dateien im Arbeitsverzeichnis des Containers
docker exec ubuntu ls -la
Beispiel 4): Container starten/stoppen und entfernen
Starten des vorhergehenden Images im detached mode. --rm wird explizit weggelassen. Mit docker ps -a kann jeder Schritt geprüft werden.
#Starten
docker run --name ubuntu -it -d ubuntu:22.04 bash
#Container stoppen
docker container stop ubuntu
#Container starten
docker container start ubuntu
#Container erneut stoppen
docker container stop ubuntu
#Container entfernen
docker container rm ubuntu
Beispiel 5): Node Webserver
Dockerfile
Inhalt in Datei Dockerfile
#Baseimage
FROM ubuntu:22.04
#Don't ask questions apt
ARG DEBIAN_FRONTEND=noninteractive
#Update apt
RUN apt-get update
#Install curl
RUN apt-get -y install curl
#Add new nodejs version to apt repository
RUN curl -sL https://deb.nodesource.com/setup_lts.x | bash -
#Update apt again
RUN apt-get update
#Install nodejs
RUN apt-get -y install nodejs
#Run the node js http-serve as entrypoint
ENTRYPOINT ["npx", "http-serve", "-p", "5000","/var/www"]
Image erstellen
docker build . -t example5:1.0
Image verwenden
#Starten
docker run --rm --name example5 -d example5:1.0
#Logs des containers einsehen
docker logs example5
Mount verwenden
Weder kann nun auf den Webserver zugegriffen werden, noch hat dieser Zugriff auf das Dateisystem. Im folgenden wird ein Portmapping und ein Ordner Mount verwendet.
#Starten
docker run --rm --name example5 -d -v ./http:/var/www -p 8000:5000 example5:1.0
-v ./http:/var/www Ordner mit dem relativen Pfad http wird in Container nach /var/www gemounted. Handelt es sich nicht um einen lokalen Ordner, so wird ein automatisch ein Named Volume erstellt. Es können beliebig viele Verzeichnisse oder Named Volumes gemounted werden. -p 8000:5000 Für den Container wird ein virtuelles Netzwerkdevice erstellt (bzw. das default Bridge Netzwerk verwendet). Über das Portmapping wird der Port 8000 des Hostbestriebssystem auf den Port 5000 des Containers gemapped.
Nun kann über http://localhost:8000 auf den Webserver zugegriffen werden.
Beispiel 5.1): Node Webserver using Named Volume
Im folgenden soll anstatt eines Ordners ein Named Volume verwendet werden. Diese dienen ebenfalls als persistenter Speicher für Container.
#Starten
docker run --rm --name example5.1 -d -v www:/var/www -p 8000:5000 example5:1.0
#Dateien oder Ordner in das Volume kopieren
docker cp index.html example5.1:/var/www
#Dateien oder Ordner aus dem Volume kopieren
docker cp example5.1:/var/www .
#Container beenden
docker container stop example5.1
#Das Volume bleibt bestehen
docker volume ls