Image

Herunterladen

Image herunterladen:

docker [image] pull [Quelle]/[Name vom Image]:[Version]

Beispiel:

docker pull mariadbbzw.docker pull mariadb:latest
bzw.
docker image pull mariadb

Lokale Images anzeigen

Alle lokalen Images anzeigen:

docker image ls

Historie

Die Historie eines Images abrufen:

docker image history [Name vom Image]

Beispiel:

docker image history ubuntu

Detaillierte Infos zu einem Image

Detaillierte Infos zu einem Image abfragen (z.B.„Created“) 

docker image inspect [Name vom Image]

Beispiel:

docker image inspect ubuntu

Du kannst auch gezielt eine Eigenschaft abfragen.

Beispiel:

docker image inspect ubuntu --format="{{.Created}}"

Tag

Tags erlauben es dir verschiedene Versionen von Images anzusteuern.

docker image tag [Name vom Image] [neuer tag für Image]

Beispiel:

docker image tag ubuntu ubuntu-new

Images löschen

docker image rm [Name vom Image bzw tag]

Beispiel:

docker image rm ubuntu-new

Container

Erstellen

docker [container] create

Beispiel:

docker create nginx
oder
docker create –it ubuntu

Starten

docker [container] start [Name des Containers]

Beispiel:

docker start con_mariadb

Run

Beim Ausführen von docker nun wird immer ein neuer Container erzeugt und gestartet!

docker run

Modes

  • -t (mit einem Terminal)
  • -i (interaktiv)
  • -d (detached -> im Hintergrund)
  • -it (interaktiv und mit Terminal

Alle Container auflisten

docker container ls –a -s
  • -a (zeigt alle Container an; sonst werden nur aktive Container angezeigt)
  • -s (zeigt auch die Größe des Containers an)

Arbeitsspeichernutzung von Container anzeigen:

docker container stats

Detaillierte Infos zu einem Image

docker [container] inspect

Container benennen / umbenennen

Ein Container besitzt immer einen zufällig generierten Namen. Dieser kann angepasst werden.

Eigenen Namen beim Erzeugen festlegen mit der Flag –name

docker create --name ubuntu-test -it ubuntu
docker run --name ubuntu-test -it ubuntu

Namen nachträglich ändern:

docker (container) rename [alter Name] [neuer Name]
docker rename [alter Name] ubuntu-test

Container stoppen, neu starten, pausieren

Container stoppen:

docker stop [ID / Name]

Container pausieren / fortsetzen:

docker pause [ID / Name]
docker unpause [ID / Name]

Container löschen

docker [container] rm [Name/ID vom Container]

Container automatisch nach dem Beenden löschen

Mit der Flag –rm kannst du spezifizieren, dass ein Container direkt nach seinem Beenden automatisch wieder gelöscht wird.

docker run -it --rm ubuntu

Container: Programme starten

docker container run [OPTIONS] IMAGE [COMMAND]
docker container create [OPTIONS] IMAGE [COMMAND]

Container: Zusätzliche Programme starten

docker container exec [OPTIONS] CONTAINER COMMAND

Beispiel:

docker container exec -it linktree-apache-1 bash

Logs

Wenn ein Container im Hintergrund läuft(-d), kannst du mit docker logs die Ausgabe einsehen.

Restart-Policy

Standardmäßig wird ein Container nicht neu gestartet. Mit der Restart-Policy kann dies jedoch veranlasst werden. Folgende Optionen gibt es:

  • on-failure[:max-retries] (wird neu gestartet, wenn ein Fehler passiert – mit X maximalen Versuchen)
  • always (wird immer neu gestartet, auch nach System-Neustart)
  • unless-stopped (bleibt gestoppt, wenn gestoppt wird)

Beispiel:

docker run -d --restart unless-stopped [Image-Name]
docker update --restart unless-stopped [Container-ID / Name]
--restart=always

Ports

Zunächst sind Container nicht über den normalen Rechner verfügbar. Wenn ein Container / Dienst auf einem normalen Rechner ebenfalls angesprochen bzw. verfügbar sein soll, so muss der Container-Port auf einen Port des Hosts gelegt / veröffentlicht werden.

Dies geschieht mit dem Flag -p

docker run –p Host-Port:Container-Port Image-Name

Beispiel:

docker run -p 8888:80 nginx

Danach ist der WebServer nginx über http://localhost:8888 verfügbar.

Es können auch mehrere Ports veröffentlicht werden.

Beispiel:

docker run -p 8080:80 -p 8443:443 nginx

Dateien in Container speichern

Mit dem Befehl docker cp kannst du schnell Dateien oder Ordner in einen Container und aus einem Container kopieren.

Element vom Host-System in einen Container hinein kopieren:

docker cp [Element im Host-System bzw. Pfad dahin] [Name/ID desContainers]:[Verzeichnis im Container]

Element aus einem Container heraus in das Host-System kopieren:

docker cp [Name/ID des Containers]:[Element im Container bzw.Pfad dahin] [Verzeichnis im Host-System]

Mounts

Als Mounts bezeichnet man allgemein die Verknüpfung von der Verzeichnisstruktur eines Containers mit Daten, die außerhalb vom Container liegen.

  • bind (Ein Container wird mit deinem lokalen Dateisystem verknüpft)
  • volume (Bestimmte Daten in deinem Container werden an einen Docker-spezifischen Speicherort ausgelagert)
  • tmpfs (nur unter Linux verfügbar! Daten werden in den Arbeitsspeicher deines lokalen Systems geschrieben.)

Bind Mount

  • Flag –mount setzen und spezifizieren.
  • type=bind
  • source: enthält den Pfad zum lokalen Verzeichnis, das du mit der Verzeichnisstruktur des Containers verknüpfen möchtest
  • destination: enthält den Pfad zum Verzeichnis im Container

Syntax:

--mount type=bind,source=[Pfad zu deinem lokalen Verzeichnis],destination=[Pfad zum Container-Verzeichnis]

Alternative Syntax:

-v [absoluter Pfad zu deinem lokalen Verzeichnis]:[Pfad zum Container-Verzeichnis]

Bind Mount -> ReadOnly

um ,readonly bzw. :ro ergänzen

Syntax:

--mount type=bind,source=[Pfad zu deinem lokalen Verzeichnis],destination=[Pfad zum Container- Verzeichnis],readonly

Alternative Syntax:

-v [absoluter Pfad zu deinem lokalen Verzeichnis]:[Pfad zum Container-Verzeichnis]:ro

Environment

-e PMA_HOST=dbhost

Volume

Eine Möglichkeit, um Daten außerhalb eines Containers zu speichern.

Z.B. für Datenbanken relevant. Nach dem Beenden des Containers wären sonst alle Daten weg. Liegen die Daten in einem Volume, wird nach dem Starten des Containers einfach wieder auf die Datenbank zugegriffen.

Unter Linux werden deine Volumes in deinem lokalen System indem Verzeichnis
/var/lib/docker/volumes/
gespeichert.

Volume erzeugen

docker volume create [Name]

Beispiel:

docker volume create ubu-vol

Alle Volumes anzeigen

docker volume ls

Details zum Volume

docker volume inspect [Name]

Volume löschen

docker volume rm [Name]

Volumes mit Container verknüpfen (–mount)

  • type=volume
  • source: der Name von deinem Volume
  • destination: enthält den Pfad zum Verzeichnis im Container, das du mit dem Volume verbinden möchtest.

Syntax

--mount type=volume,source=[dein Volume],destination=[Pfad zum Container-Verzeichnis]

Volumes mit Container verknüpfen (-v)

-v [Name von deinem Volume]:[Verzeichnis im Container]

Achtung: Das ist sehr ähnlich zur Schreibweise von einem bind mount!

Du kannst natürlich auch einen Container mit mehreren Volumes verbinden (einfach –v mehrfach angeben).

Beispiel mariadb:

docker run -it -v mariadb-vol:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password123 mariadb

Netzwerk

  • Bridge (Standard. Erlaubt die Kommunikation unter den Containern)
  • host (Container sind 1:1 auf dem Host verfügbar)
  • none (kein Netzwerk, wird deaktiviert)

Dockerfiles

Automatisiert eigene Container bauen lassen.


Compose

Mehrere Container automatisiert und mit einer strukturierten Datei starten / erzeugen.

Die entsprechende Datei „compose.yaml“ wird in einem Projekt-Ordner abgespeichert. Der Name des Projekt-Ordners dient anschließend als Name für die Container und das Netzwerk.

Beispiel-Datei für mariadb, phpmyadmin und WordPress:

services:
  db: 
    image: mariadb
    environment:
      - MARIADB_ROOT_PASSWORD=geheim
      - MARIADB_DATABASE=blog
      - MARIADB_USER=blog
      - MARIADB_PASSWORD=geheimes-passwort
    restart: on-failure:10
    volumes: 
      - db-vol:/var/lib/mysql
    profiles:
      - backend
      - debug
      - frontend

  pma: 
    image: phpmyadmin
    environment:
      - PMA_HOST=db
    ports:
      - 6080:80
    restart: on-failure:10
    depends_on: 
      - db
    profiles:
      - debug

  wp: 
    image: wordpress
    environment:
      - WORDPRESS_DB_HOST=db
      - WORDPRESS_DB_USER=blog
      - WORDPRESS_DB_PASSWORD=geheimes-passwort
      - WORDPRESS_DB_NAME=blog
    ports: 
      - 6081:80
    restart: on-failure:10
    depends_on: 
      - db
    profiles:
      - frontend

volumes: 
  db-vol:
    name: mariadb_data

Mehrere Container starten:

docker compose up

Die Container stoppen, die Container und das Netzwerk automatisch löschen, Volumes bleiben natürlich bestehen:

docker compose down

Weitere nützliche Sub-Kommandos.

Container temporär stoppen:

docker compose stop

Container wieder starten:

docker compose start

Container pausieren / fortsetzen:

docker compose pause
docker compose unpause

Docker Swarm

Cluster mit Docker betreiben.