Docker 2024 04/Containers: Unterschied zwischen den Versionen

Aus CCWiki
Zur Navigation springen Zur Suche springen
Zeile 109: Zeile 109:
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

Version vom 17. April 2024, 16:18 Uhr

Folgendes soll einen Grundlegendenden Überblick über das verwalten von 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 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
  • 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. ?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.

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