Docker 2024 04/Containers: Unterschied zwischen den Versionen

Aus CCWiki
Zur Navigation springen Zur Suche springen
 
(17 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
Im folgenden soll das starten und erstellen von Images erlernt werden.
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 der 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.
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}}
** Container Details inspizieren
* {{BSL|docker log}}
** Container Ausgabe einsehen
* {{BSL|docker attach}}
** Mit Container verbinden


=== Beispiel 2): Mit Container verbinden ===
=== Beispiel 2): Mit Container verbinden ===
Zeile 105: 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 | bash -
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 113: Zeile 127:
ENTRYPOINT ["npx", "http-serve", "-p", "5000","/var/www"]
ENTRYPOINT ["npx", "http-serve", "-p", "5000","/var/www"]
}}
}}
==== Build Image ====
 
{{BSL|docker build . -t dockerschulung/example5:1.0}}
==== Image erstellen ====
==== Using Image ====
{{BSL|docker build . -t example5:1.0}}
==== Image verwenden ====
{{BML|code=
{{BML|code=
#Starten
#Starten
docker run --rm --name example5 -d dockerschulung/example5:1.0
docker run --rm --name example5 -d example5:1.0
#Logs des containers einsehen
#Logs des containers einsehen
docker logs example5
docker logs example5
}}
}}


==== Making it useful ====
==== Mount verwenden ====
Weder kann der 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 dockerschulung/example5:1.0
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. ?Bei Window muss ein Absoluter Pfad angegeben werden, c:\...?
  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.
=== 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