Zum Hauptinhalt springen

Commands

Images

docker image ...

image ls - Images auflisten

docker image ls
docker image list

docker images

image pull - Image herunterladen

docker image pull [OPTIONS] NAME[:TAG|@DIGEST]
docker pull

Beispiel:

docker pull ubuntu:latest

image rm - Image löschen

docker image rm [OPTIONS] IMAGE [IMAGE...]

docker image remove my-image
docker rmi my-image

Beispiel:

docker rmi ubuntu:latest

image inspect - Image untersuchen

docker image inspect [OPTIONS] IMAGE [IMAGE...]

Beispiel: Ausgabe der im Dockerfile mit LABEL definierten Labels

docker image inspect -f "{{json .Config.Labels}}" mywebapp

Container

docker container ...

container ls - Container auflisten

Die laufenden Container auflisten:

docker container ls

docker container list
docker container ps
docker ps
ArgumentBedeutung
-azeigt alle Container (auch gestoppte)

container run - Container erstellen

  • wurde der Container noch nicht heruntergeladen, wird dies automatisch erledigt
docker container run [OPTIONS] IMAGE:TAG [COMMAND] [ARG....]

docker run my-image

TAG ist dabei die Version, die (heruntergeladen und) verwendet wird.

Beispiel:

docker run -it --name my-ubuntu-container ubuntu:latest
docker run --name my-apache -p 5000:80 -d httpd
docker run -d --name mariadb-test2 -v myvolume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=geheim mariadb
ArgumentBedeutung
--name ...Namen für Container. Ist dieser nicht gesetzt, wird automatisch ein fantasievoller Name gewählt
--rmlöscht den Container automatisch nach der Ausführung
-itinteraktiv, man erhält interaktive Shell innerhalb des Containers
-dDetach, Ausführung des Containers im Hintergrund, überschreibt -it
-p/--publish HOST-PORT:CONTAINER-PORTVeröffentlichung eines Ports eines Containers auf dem Host
-e/--env KEY=VALUEUmgebungsvariablen des Containers setzen
-v/--volume hostdir:containerdir/volume:containerdirbindet ein Volume an den Container
--network ...Angabe des Netzwerks
--ip=...IPv4-Adresse für Container
--ip6=...IPv6-Adresse für Container

container start - Container starten

docker start my-container

Für Identifikation des Containers können folgende Informationen verwendet werden:

  • Name
  • ganze ID
  • erste, eindeutige Zeichen der ID
ArgumentBedeutung
-istartet interaktive Shell

container stop - Container stoppen

docker stop my-container

container rm - Container löschen

docker container rm [OPTIONS] CONTAINER [CONTAINER...]

docker container remove my-container
docker rm my-container

container exec - Interaktive Shell innerhalb eines Containers

Eine interaktive Shell innerhalb eines Containers wird mit dem Argument -it gestartet.

Auch existiert folgender Befehl, um eine interaktive Shell in einem bereits gestarteten Container zu starten:

docker container exec [OPTIONS] CONTAINER COMMAND [ARG...]

docker exec my-container

Beispiel:

docker container exec -it my-container /bin/bash
ArgumentBedeutung
-iAktivierung des interaktiven Modus
-tZuweisung eines virtuellen Terminals

Meistens werden die Argumente -i und -t zusammen verwendet: -it.

Interaktive Shell verlassen

Die interaktive Shell (2. Terminal) verlassen:

exit

oder CTRL+C

Volumes

docker volume ...

volume ls - Volumes auflisten

docker volume ls
docker volume list

volume create - Volumes erstellen

docker volume create [OPTIONS] [VOLUME]

Beispiel, benanntes Volume erstellen:

docker volume create data

Nun kann das Volume mit -v beim Erstellen eines Containers mit einem Container-Pfad verknüpft werden:

docker run -d -v data:/world busybox ls /world

Das separate Erstellen eines Volumes mit docker volume create ist nicht notwendig, da Docker bei docker run mit dem Parameter -v automatisch ein Volume erstellt, wenn es nicht existiert.

volume inspect - Untersuchung eines Volumes

docker volume inspect [OPTIONS] VOLUME [VOLUME...]

Standard-Befehl:

docker volume inspect myvolume

Ausgabe:

[
{
"CreatedAt": "2020-04-19T11:00:21Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/myvolume/_data",
"Name": "myvolume",
"Options": {},
"Scope": "local"
}
]
ArgumentBeschreibung
-fFilterung von JSON-Elementen

Filterung

EigenschaftBeschreibung
MountpointVerzeichnis, indem Daten des Volumes gespeichert sind
NameName des Volumes

Beispiel:

docker inspect -f '{{.Mountpoint}}' my-volume

inspect -f '{{.Mounts}' - Volumes in Host-Ordner ansehen

Das Volume des Containers befindet sich auf dem Host unter dem zweiten Pfad:

docker inspect -f '{{.Mounts}' my-container

Mit sudo su kommt man in eine privilegierte Subshell. Sonst besitzt man keine Berechtigungen für den Docker-Ordner.

sudo su
cd /var/lib/docker/volumes/my-volume

Inspect

docker inspect [OPTIONS] NAME|ID [NAME|ID...]

Filterung

-f WertBedeutung
'{{.Mounts}}'Anzeige aller Volumes
'{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}'Anzeige der IP-Adresse

Beispiele:

docker inspect -f '{{.Mounts}}' my-container
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my-container

Link:

Network

docker network ...

network create - Netzwerk erstellen

Erstellt ein neues Docker-Netzwerk

docker network create [OPTIONS] NETWORK

Beispiel:

docker network create \
--driver=bridge \
--subnet=172.28.0.0/16 \
--ip-range=172.28.5.0/24 \
--gateway=172.28.5.254 \
bridge-1
ArgumentBedeutung
--gatewayIPv4 oder IPv6 Gateway für das Master-Subnet, kommt nach --subnet
--subnetNetzwerk-Segment als Subnetz im CIDR-Format

network ls - Netzwerke auflisten

docker network ls [OPTIONS]
docker network list [OPTIONS]

Beispiel:

docker network ls --filter id=63d
NETWORK ID NAME DRIVER SCOPE
63d1ff1f77b0 dev bridge local
ArgumentBedeutung
-f, --filter key=valueFilterung

network connect - Verbinden

Verbindet einen Container mit einem bestehenden Netzwerk.

docker network connect [OPTIONS] NETWORK CONTAINER

Beispiel:

docker network connect --ip 10.10.36.122 my-network my-container
ArgumentBedeutung
--ipIPv4-Adresse für Container

network disconnect - Trennen

Trennt einen Container von einem Netzwerk.

docker network disconnect [OPTIONS] NETWORK CONTAINER

Beispiel:

docker network disconnect multi-host-network container1
ArgumentBedeutung
-f, --forcezwingt den Container zur Trennung

network rm - Entfernen

docker network rm NETWORK [NETWORK...]
docker network remove NETWORK [NETWORK...]

network inspect - Network Inspect

Zeigt Details zu einem Netzwerk an (z.B. verbundene Container, Einstellungen, ...).

docker network inspect [OPTIONS] NETWORK [NETWORK...]
ArgumentBedeutung
-f, --formatFormatierung

network prune - Ungenutzte Netzwerke löschen

Entfernt alle Netzwerke, welche nicht von Containern genutzt werden.

docker network prune [OPTIONS]

Build

buildx build - Images aus Dockerfile erstellen

Bildet ein Image aus dem Dockerfile namens Dockerfile im angegebenen Verzeichnis.

docker buildx build [OPTIONS] PATH | URL | -

docker build
docker builder build
docker image build
docker buildx b

Beispiel:

docker build -t hello1 .
ArgumentBedeutung
-t, --tag name:tagAngabe eines Namens und optional eines Tags

CLI reference: dockerdocs - CLI Reference - docker buildx build

Login

  • Anmeldung an einem Registry
docker login [OPTIONS] [SERVER]

Beispiel:

docker login -u <username> -p <password>
docker login -u <username> -p <password> registry.example.com

Logout

  • Abmeldung von einem Registry
docker logout [SERVER]

Beispiel:

docker logout localhost:8080
docker logout registry.example.com
docker logout https://hub.docker.com/

Sonstige

hostname - IP-Adresse

Um die vergebene IP-Adresse eines Containers zu erhalten, gibt es folgende Wege:

docker container exec -it my-container /bin/bash
hostname -I

Beispiele

MySQL

docker run --name gbsdb -d /
--network net --ip 192.168.1.2 /
-v volumename:/var/lib/mysql /
-e MYSQL_DATABASE=joomla_db -e MYSQL_ROOT_PASSWORD=-gbs- /
mysql:8

phpMyAdmin

docker run -d --name phpmyadmin --network net /
-p 8080:80 /
-e PMA_HOST=gbsdb /
phpmyadmin/phpmyadmin

Joomla

docker network create \
--subnet 192.168.1.0/24 \
--gateway 192.168.1.1 \
net

docker run --name mysqldb -d \
--network net --ip 192.168.1.2 \
-v databases:/var/lib/mysql \
-e MYSQL_DATABASE=joomla_db \
-e MYSQL_USER=user \
-e MYSQL_PASSWORD=password \
-e MYSQL_ROOT_PASSWORD=password \
mysql:8

docker run --name phpmyadmin -d \
--network net \
-p 7000:80 \
-e PMA_HOST=mysqldb \
phpmyadmin/phpmyadmin

docker run --name joomla -d \
--network net \
-v joomladata:/var/www/html \
-p 8080:80 \
-e JOOMLA_DB_HOST=mysqldb:3306 \
-e JOOMLA_DB_NAME=joomla_db \
-e JOOMLA_DB_USER=user -e JOOMLA_DB_PASSWORD=password \
joomla

WordPress

docker network create \
--subnet 192.168.1.0/24 --gateway 192.168.1.1 \
net

docker container run --name mariadb -d \
--network net --ip 192.168.1.2 \
-v databases:/var/lib/mysql \
-e MARIADB_ROOT_PASSWORD=password \
-e MARIADB_USER=wordpress \
-e MARIADB_PASSWORD=password \
-e MARIADB_DATABASE=wordpressdb \
mariadb:latest

docker run --name phpmyadmin -d \
--network net \
-p 7000:80 \
-e PMA_HOST=mariadb \
phpmyadmin/phpmyadmin

docker container run --name wordpress -d \
--network net \
-e WORDPRESS_DB_HOST=mariadb:3306 \
-e WORDPRESS_DB_USER=wordpress \
-e WORDPRESS_DB_PASSWORD=password \
-e WORDPRESS_DB_NAME=wordpressdb \
-p 8080:80 \
wordpress

Hinweis: MariaDB erstellt die Datenbank nur bei der ersten Ausführung (wenn /var/lib/mysql bzw. das Volume leer ist). Wenn das Datenbank-Volume bereits Daten von einer früheren MariaDB-Instanz enthält, wird die Variable MARIADB_DATABASE ignoriert.

Vaultwarden

docker run -d --name vaultwarden \
-v vaultwarden:/data/ \
-p 8080:80 \
vaultwarden/server:latest

Filebrowser

Dies funktioniert mit den Daten, jedoch nicht mit den Konfigurationsdateien und der Datenbank:

docker run \
--name filebrowser \
-v /home/vmadmin/Documents/filebrowser:/srv \
-p 8081:80 \
--rm \
filebrowser/filebrowser

Funktioniert nicht ganz:

docker run \
-v $(pwd)/Documents/filebrowser:/srv \
--mount type=bind,source="$(pwd)/Documents/filebrowser/filebrowser.db:/database.db \
--mount $(pwd)/Documents/filebrowser/.filebrowser.json:/.filebrowser.json \
-p 8080:80 \
filebrowser/filebrowser

docker run \
--name filebrowser \
-v /home/vmadmin/Documents/filebrowser:/srv \
-v /home/vmadmin/Documents/filebrowser/filebrowser.db:/database.db \
-v /home/vmadmin/Documents/filebrowser/.filebrowser.json:/.filebrowser.json \
-p 8081:80 \
--rm \
filebrowser/filebrowser