Docker 2024 04/Containers: Unterschied zwischen den Versionen
Drlue (Diskussion | Beiträge) Die Seite wurde neu angelegt: „Im folgenden soll das starten und erstellen von Images erlernt werden. = Erster Container start = {{BML|code= docker run --name ubuntu --rm -it ubuntu:22.04 bash }} Es öffnet sich nun ein Terminal im Container. {{BML|code= ps }} Zeigt sehr anschaulich die Prozessisolierung. {{BML|code= PID TTY TIME CMD 1 pts/0 00:00:00 bash 9 pts/0 00:00:00 ps }} Wird der Container mit {{BSL|exit}} geschlossen. So wird dieser auch entfernt…“ |
Drlue (Diskussion | Beiträge) |
||
| (35 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
Folgendes soll einen grundlegendenden Überblick über das verwalten von Docker Containern bieten. | |||
= Erster Container start = | === Beispiel 1): Erster Container start === | ||
{{BML|code= | {{BML|code= | ||
docker run --name ubuntu --rm -it ubuntu:22.04 bash | docker run --name ubuntu --rm -it ubuntu:22.04 bash | ||
| 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 30: | Zeile 30: | ||
* {{BSL|bash}} | * {{BSL|bash}} | ||
** Kommando das ausgeführt werden soll | ** Kommando das ausgeführt werden soll | ||
=== Wichtige Befehle === | |||
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}} | |||
** Container erstellen | |||
* {{BSL|docker start}} | |||
** Gestoppten Container starten | |||
* {{BSL|docker exec}} | |||
** Befehl in Container ausführen | |||
* {{BSL|docker cp}} | |||
** Dateien in einen, oder von einem Container kopieren | |||
* {{BSL|docker image}} | |||
** Verwalten von Images | |||
* {{BSL|docker volume}} | |||
** Verwalten von Volumes | |||
* {{BSL|docker ps}} | |||
** Anzeigen von Containern | |||
* {{BSL|docker stats}} | |||
** Statistiken zu Containern anzeigen | |||
* {{BSL|docker container}} | |||
** Verwalten von Containern | |||
* {{BSL|docker network}} | |||
** Verwalten von Netzwerken | |||
* {{BSL|docker build}} | |||
** 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}} | |||
** Container Details inspizieren | |||
* {{BSL|docker log}} | |||
** Container Ausgabe einsehen | |||
* {{BSL|docker attach}} | |||
** Mit Container verbinden | |||
=== Beispiel 2): Mit Container verbinden === | |||
Starten des vorhergehenden Images im detached mode, {{BSL|-d}}. Der Befehl {{BSL|bash}} benötigt {{BSL|-it}}, da er sonst beendet wird wie auch der Container selbst. | |||
{{BML|code= | |||
#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. | |||
{{BML|code= | |||
#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. {{BSL|--rm}} wird explizit weggelassen. Mit {{BSL|docker ps -a}} kann jeder Schritt geprüft werden. | |||
{{BML|code= | |||
#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''' | |||
{{BML|code= | |||
#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 ==== | |||
{{BSL|docker build . -t example5:1.0}} | |||
==== Image verwenden ==== | |||
{{BML|code= | |||
#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. | |||
{{BML|code= | |||
#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. | |||
{{BML|code= | |||
#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 | |||
}} | |||
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