Docker 2024 04/Containers
Im folgenden soll das starten und erstellen von Images erlernt werden.
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 der 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
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
Erstelle einen Ordner für Beispiel 5, i.e: example5.
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
Build Image
docker build . -t dockerschulung/example5:1.0
Using Image
#Starten
docker run --name example5 -d dockerschulung/example5:1.0
#Logs des containers einsehen
docker logs example5
Making it useful
Weder kann der nun auf den Webserver zugegriffen werden, noch hat dieser Zugriff auf das Dateisystem.
#Starten
docker run --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. ?Bei Window muss ein Absoluter Pfad angegeben werden, c:\...? 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. Über das Portmapping wird der Port 8000 des Hostbestriebssystem auf den Port 5000 des Containers gemapped.