Docker-Befehle in der Praxis

This page is also available in English
↳

Docker Container können mittels Terminal-Befehle gestartet, upgedatet und verwaltet werden. In dem Beitrag notiere ich Befehle, die ich bisher für Docker benötigt habe und entsprechende Beispiele dazu:

Container starten

Ein Docker-Container kann mit einem einfachen „run“-Befehl gestartet werden: 

 docker run -d \
   --name=testcontainer \
   -p=83:80 \
   --restart=always \
   -v mytestvol:/app \
   nginx:latest

Der Parameter -p 83:80 veröffentlicht den Port 83 und leitet diesen im Container auf Port 80 um. Unser gerade erstellter Container kann im Browser über die IP-Adresse des Hosts und dem Port 83 aufgerufen werden:

Volumes

Ein Volume ist ein Ordner auf dem Host-Betriebssystem um Daten des Containers permanent zu speichern. Der Parameter -v erzeugt ein Volume und bindet dieses im Container ein. 

   -v mytestvol:/app \

Der Ort für das Volume wird standardmäßig von Docker verwaltet und kann mit „docker inspect Containername“ angezeigt werden:

docker inspect testcontainer
...
        "Mounts": [
            {
                "Type": "volume",
                "Name": "mytestvol",
                "Source": "/var/lib/docker/volumes/mytestvol/_data",
...

Wer einen bestimmten Ordner des Host-Betriebssystems verwenden will, kann anstelle des Volumen-Namens auch einen Pfad angeben (Bind-Mount):

   -v /var/docker/mydockerfolder:/app \

„:ro“ am Ende mappt den Ordner nur lesend

   -v /OrdnerNurLesend/:/OrdnerNurLesend:ro

Container-Parameter: Netzwerk

Der Parameter: --net=host verbindet die Netzwerkkarte direkt.

Als Alternative kann der Paramter 

-p=Externer_Port:Port_im_Container verwendet werden:

-p=83:80 würde also dann über die IP des Rechners mit dem Port 83 aufgerufen werden können und intern im Container wird Port 80 verwendet.

Zusätzlich kann mit --network=netzwerkname ein bestimmtes zuvor mit "docker network create" erstelltes Netzwerk verwendet werden. Container innerhalb eines Netzwerkes können nicht nur über die IP, sondern auch über deren Namen (--name) aufgerufen werden: Für den Verbindungsaufbau wird dann schlicht der Name und Port des Containers verwendet.

Container anzeigen

user@rechner:/docker$ docker ps
CONTAINER ID        IMAGE                                    COMMAND                  CREATED             STATUS                    PORTS                                      NAMES
????????????        syncthing/syncthing:latest               "/bin/entrypoint.sh …"   12 minutes ago      Up 12 minutes (healthy)                                              festive_chandrasekhar
????????????        nginx                                    "/docker-entrypoint.…"   4 days ago          Up 12 minutes             80/tcp                                     nextcloud_webserver
????????????        nextcloud:fpm                            "/entrypoint.sh php-…"   4 days ago          Up 12 minutes             9000/tcp                                   nextcloud_fpm
????????????        nginx                                    "/docker-entrypoint.…"   4 days ago          Up 12 minutes             80/tcp                                     laraveldev_webserver
????????????        mediawiki                                "docker-php-entrypoi…"   4 days ago          Up 12 minutes             80/tcp                                     mediawiki
????????????        laravelapp.dockerfile                    "docker-php-entrypoi…"   4 days ago          Up 12 minutes             9000/tcp                                   laravelapp
????????????        phpmyadmin/phpmyadmin                    "/docker-entrypoint.…"   4 days ago          Up 12 minutes             0.0.0.0:8081->80/tcp                       phpmyadmin
????????????        onlyoffice/documentserver                "/bin/sh -c /app/ds/…"   4 days ago          Up 12 minutes             80/tcp, 443/tcp                            onlyoffice
????????????        jrcs/letsencrypt-nginx-proxy-companion   "/bin/bash /app/entr…"   4 days ago          Up 12 minutes                                                        letsencrypt-companion
????????????        mariadb                                  "docker-entrypoint.s…"   4 days ago          Up 12 minutes             3306/tcp                                   mediawikidb
????????????        jwilder/nginx-proxy:alpine               "/app/docker-entrypo…"   4 days ago          Up 12 minutes             0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   proxy
????????????        mariadb                                  "docker-entrypoint.s…"   4 days ago          Up 12 minutes             3306/tcp                                   db
????????????        mariadb                                  "docker-entrypoint.s…"   4 days ago          Up 12 minutes             3306/tcp                                   laraveldb
????????????        redis                                    "redis-server --appe…"   4 days ago          Up 12 minutes             0.0.0.0:6379->6379/tcp                     redis
????????????        laradock_nginx                           "/bin/bash /opt/star…"   3 months ago        Up 11 minutes             0.0.0.0:90->80/tcp, 0.0.0.0:444->443/tcp   laradock_nginx_1
????????????        laradock_php-fpm                         "docker-php-entrypoi…"   3 months ago        Up 11 minutes             9000/tcp                                   laradock_php-fpm_1
????????????        laradock_phpmyadmin                      "/run.sh supervisord…"   3 months ago        Up 12 minutes             9000/tcp, 0.0.0.0:8082->80/tcp             laradock_phpmyadmin_1
????????????        laradock_workspace                       "/sbin/my_init"          3 months ago        Up 12 minutes             0.0.0.0:2222->22/tcp                       laradock_workspace_1
????????????        laradock_mariadb                         "docker-entrypoint.s…"   3 months ago        Up 12 minutes             0.0.0.0:3306->3306/tcp                     laradock_mariadb_1
????????????        laradock_redis                           "docker-entrypoint.s…"   3 months ago        Up 12 minutes             0.0.0.0:6380->6379/tcp                     laradock_redis_1

Container stoppen

docker stop containername

alle Container stoppen

docker stop $(docker ps -a -q)

Container updaten

docker pull IMAGENAME
docker stop CONTAINERNAME
docker rm CONTAINERNAME
docker run CONTAINERNAME -parameters

Docker-Compose Container updaten

docker-compose pull
docker-compose up -d

Container entfernen

docker rm containername

Netzwerk anzeigen

user@rechner:/docker$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
????????????        docker_default      bridge              local
????????????        host                host                local
????????????        laradock_backend    bridge              local
????????????        laradock_default    bridge              local
????????????        laradock_frontend   bridge              local
????????????        nginx-proxy         bridge              local
????????????        none                null                local

Detail zu einem Netzwerk anzeigen

docker network inspect docker_default

Bash eines Containers aufrufen

docker exec -it containername /bin/bash

Bash Befehle innerhalb: mysql, mariadb DB-Restore

gunzip < '/daten/backup.gz' | docker exec -i laradock_mariadb_1 /usr/bin/mysql -u root --password=password dbname

Wartung

nicht benötigte Docker-Images entfernen

docker image prune -a --force

Prune: nicht verwendete Daten löschen

docker system prune --volumes -f 

Ăśberwachen / Status

docker ps

docker ps listet alle Container:

root@l2:~# docker ps
CONTAINER ID   IMAGE                    COMMAND     CREATED       STATUS       PORTS     NAMES
b345697c8b1b   portainer/agent:latest   "./agent"   3 hours ago   Up 3 hours             portainer_agent.l8lte8805fugp6xdc9sfizwbi.dru1imtp8l56zhby9863j9hi8

Performance

Einen Ăśberblick ĂĽber CPU / RAM und Netzwerk bietet der Befehl docker stats

docker stats

Ausgabe der einzelnen Container anzeigen

docker logs -f containername

Troubleshooting

Docker reagiert nicht mehr

wenn z.B. Befehle wie docker ps nicht mehr reagieren, kann der Fehler ĂĽber den Befehl dockerd --debug eingegrenzt werden:

sudo dockerd --debug
INFO[2020-12-27T11:58:52.395359797+01:00] Starting up                                  
failed to start daemon: pid file found, ensure docker is not running or delete /var/run/docker.pid

Die Datei kann mit 

sudo rm /var/run/docker.pid

gelöscht werden.

failed to start daemon: error while opening volume store metadata database: timeout

Mithilfe folgender Befehle konnte ich Docker wieder reparieren:

Alle Docker-Prozesse stoppen:

ps axf | grep docker | grep -v grep | awk '{print "kill -9 " $1}' | sudo sh

Metadata.db löschen

sudo rm /var/lib/docker/volumes/metadata.db

Den Status anzeigen

systemctl status docker

Docker neu installieren

sudo apt-get remove docker-ce
sudo apt-get install docker-ce
positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE fĂĽr deine Bewertung!

Aktualisiert: 29.08.2022 von Bernhard đź””


Top-Artikel in diesem Bereich


ioBroker installieren - Docker
Mit ioBroker können verschiedene Automatisierungslösungen oder Geräte in einem System zusammengefasst werden. Um bestimmte Gateways oder Geräte ansprechen zu können, werden in ioBroker verschiedene Adapter verwendet.

Home-Assistant Docker Conbee 2 und Zigbee2MQTT / deCONZ
Dank zahlreicher Integrationsmöglichkeiten ist Home-Assistant eine einfache Plattform für das Steuern verschiedenster Smart-Home Geräte. Im Vergleich zu ioBroker ist mir der Start mit Home Assistant wesentlich einfacher gefallen. Während ich für ioBroker noch am Suchen war, welches Frontend ich für meine Dashboards verwenden könnte, hatte ich mit Home-Assistant out of the box ein fertig eingerichtetes System. Die Lovelance Dashboards von Home Assistant können einfach in der GUI zusammengeklickt...

Conbee 2: Phoscon deCONZ - Docker Inbetriebnahme | Review
Mit dem kleinen USB-Stick Conbee2 habe ich meinen NAS um ein Zigbee-Gateway erweitert. Conbee2 kann auf Raspbian, Ubuntu, Docker oder Windows installiert werden.

Fragen / Kommentare


Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu Mehr Details