Docker 2024 04/Containers: Unterschied zwischen den Versionen
Drlue (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Drlue (Diskussion | Beiträge) |
||
| 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''' | ||
Version vom 17. April 2024, 20:16 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 --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 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 inspect- Container Details inspizieren
docker log- Container Ausgabe einsehen
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"]
Build Image
docker build . -t dockerschulung/example5:1.0
Using Image
#Starten
docker run --rm --name example5 -d dockerschulung/example5:1.0
#Logs des containers einsehen
docker logs example5
Making it useful
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 dockerschulung/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 dockerschulung/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