Zurück zum Blog

Was ist Docker? Docker auf Ubuntu installieren

Was ist Docker? Docker auf Ubuntu, Debian und AlmaLinux installieren, wichtige Befehle, Apps mit Docker Compose betreiben und die Falle mit der Firewall.

Nodesty-Team6 Min. LesezeitServer
Der Schriftzug Docker mit Containers, Images und Compose auf dunklem Nodesty-Hintergrund

Docker ist eine Open-Source-Plattform, die Anwendungen zusammen mit allem, was sie brauchen, in isolierten Paketen ausführt, den sogenannten Containern. Bibliotheken, Laufzeitumgebung und Einstellungen einer Anwendung stecken in einem einzigen Image, das auf jedem Server mit Docker gleich läuft. Das beendet das Problem „Bei mir lief es doch“ und erlaubt es, Dutzende Dienste auf einem Server zu betreiben, ohne dass sie sich in die Quere kommen.

In dieser Anleitung erklären wir, was Docker ist, wie es sich von einem vServer unterscheidet, wie Sie Docker auf Ubuntu, Debian und AlmaLinux installieren, welche Befehle Sie brauchen und wie Sie eine Anwendung mit Docker Compose betreiben.

Was ist Docker und wofür nutzt man es?

Drei Begriffe reichen, um Docker zu verstehen:

  • Image: Eine schreibgeschützte Vorlage mit allem, was eine Anwendung zum Laufen braucht. Tausende fertige Images wie nginx, mysql oder node gibt es auf Docker Hub.
  • Container: Eine laufende Instanz eines Images. Aus demselben Image können Sie beliebig viele Container starten.
  • Volume: Dauerhafter Speicher, der auch nach dem Löschen eines Containers erhalten bleibt. Datenbankdateien und hochgeladene Inhalte liegen hier.

Docker ist besonders nützlich für:

  • Einfache Installation: Eine Datenbank, ein Monitoring-Tool oder eine Webanwendung starten Sie mit einem einzigen Befehl.
  • Keine Konflikte: Anwendungen, die unterschiedliche Node.js-, PHP- oder Python-Versionen brauchen, laufen nebeneinander auf demselben Server.
  • Portabilität: Um eine Anwendung auf einen neuen Server umzuziehen, kopieren Sie nur ihre Konfigurationsdateien und Daten.
  • Einfache Updates und Rollbacks: Sie laden das Image der neuen Version und legen den Container neu an; geht etwas schief, ist der Weg zurück eine einzige Zeile.

Docker und vServer im Vergleich

MerkmalvServer (VPS)Docker-Container
BetriebssystemJeweils ein vollständiges OS mit eigenem KernelTeilt sich den Kernel des Hosts
StartzeitMinutenSekunden
OverheadJeder betreibt ein eigenes BetriebssystemSehr gering, nur die Anwendung
IsolationVirtualisierung auf Hardware-EbeneIsolation auf Prozess-Ebene
EinsatzDer Server selbstDie Anwendungen auf dem Server

Beides ergänzt sich, statt zu konkurrieren: Typischerweise mieten Sie einen vServer, installieren darauf Docker und betreiben Ihre Anwendungen als Container.

Docker auf Ubuntu und Debian installieren

Das Paket docker.io aus den Paketquellen der Distribution ist oft veraltet. Wir empfehlen das offizielle Docker-Repository. Nachdem Sie sich per SSH mit Ihrem Server verbunden haben, führen Sie diese Befehle nacheinander aus.

  1. Voraussetzungen installieren und den Signaturschlüssel von Docker hinzufügen:
    sudo apt update
    sudo apt install ca-certificates curl
    sudo install -m 0755 -d /etc/apt/keyrings
    sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
    sudo chmod a+r /etc/apt/keyrings/docker.asc
    
  2. Das Docker-Repository hinzufügen:
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    
  3. Docker und das Compose-Plugin installieren:
    sudo apt update
    sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    
  4. Die Installation testen:
    sudo docker run hello-world
    

    Erscheint „Hello from Docker!“, ist die Installation abgeschlossen.

Unter Debian gehen Sie genauso vor, ersetzen aber in den Adressen aus Schritt 1 und 2 ubuntu durch debian.

AlmaLinux und Rocky Linux

Auf RHEL-basierten Distributionen nutzen Sie das RHEL-Repository von Docker:

sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker

Docker ohne sudo nutzen

Wenn Sie nicht vor jeden Befehl sudo schreiben möchten, fügen Sie Ihren Benutzer der Gruppe docker hinzu und melden sich neu an:

sudo usermod -aG docker $USER

Beachten Sie: Ein Mitglied der Gruppe docker hat praktisch Root-Rechte. Nehmen Sie nur Benutzer auf, denen Sie vertrauen.

Wichtige Docker-Befehle

BefehlWas er tut
docker psListet laufende Container auf (-a für alle)
docker imagesListet heruntergeladene Images auf
docker pull nginxLädt ein Image herunter
docker logs -f containerZeigt die Ausgabe eines Containers live an
docker exec -it container bashÖffnet eine Shell im laufenden Container
docker stop containerStoppt einen Container
docker rm containerLöscht einen gestoppten Container
docker system pruneRäumt ungenutzte Container, Netzwerke und Images auf

Einen einzelnen Container starten Sie mit docker run:

docker run -d --name web -p 8080:80 --restart unless-stopped nginx

-d startet den Container im Hintergrund, -p 8080:80 verbindet Port 8080 des Servers mit Port 80 des Containers, und --restart unless-stopped sorgt dafür, dass der Container nach einem Neustart des Servers automatisch wieder läuft.

Anwendungen mit Docker Compose betreiben

Viele Optionen oder mehrere Container über lange docker run-Befehle zu verwalten, wird schnell unübersichtlich. Docker Compose fasst die gesamte Konfiguration in einer einzigen Datei compose.yaml zusammen. Als Beispiel richten wir Uptime Kuma ein, ein Open-Source-Tool, das überwacht, ob Ihre Websites und Server erreichbar sind.

Legen Sie einen Ordner an und schreiben Sie darin eine Datei compose.yaml:

services:
    uptime-kuma:
        image: louislam/uptime-kuma:1
        restart: unless-stopped
        ports:
            - '3001:3001'
        volumes:
            - ./data:/app/data

Führen Sie dann im selben Ordner aus:

docker compose up -d

Die Anwendung ist jetzt unter http://server-ip:3001 erreichbar. Ihre Daten liegen im Verzeichnis data neben der Datei und bleiben auch erhalten, wenn Sie den Container löschen. Die wichtigsten Compose-Befehle:

  • docker compose ps: Zeigt den Status Ihrer Dienste.
  • docker compose logs -f: Zeigt die Logs aller Dienste live an.
  • docker compose pull && docker compose up -d: Lädt neue Images und legt die Container mit der neuen Version neu an.
  • docker compose down: Stoppt die Dienste und löscht die Container; Volumes und eingebundene Ordner bleiben erhalten.

Für eine echte Website empfehlen wir, die Anwendung nicht direkt freizugeben, sondern einen Reverse Proxy wie Nginx oder Caddy davorzuschalten und sie unter Ihrer Domain mit einem SSL-Zertifikat auszuliefern.

Docker und die Firewall

Das überrascht Docker-Nutzer am häufigsten: Von Docker veröffentlichte Ports umgehen ufw. Docker legt für Ports, die Sie mit -p oder ports: freigeben, eigene iptables-Regeln an, und diese greifen vor den Regeln von ufw. Ein Datenbank-Port, der in ufw geschlossen aussieht, kann also aus dem Internet erreichbar sein.

Um das zu verhindern, binden Sie Ports, die nur lokal gebraucht werden, an die Loopback-Adresse:

ports:
    - '127.0.0.1:3306:3306'

Noch besser: Veröffentlichen Sie die Ports von Diensten wie Datenbanken gar nicht. Dienste in derselben Compose-Datei erreichen sich gegenseitig über ihren Dienstnamen (zum Beispiel db:3306); geben Sie nur die Ports frei, die wirklich öffentlich sein müssen. Wie Ports und Firewalls funktionieren, erklären wir in Was ist ein Port?

Docker aktuell und gesund halten

  • Image-Versionen festlegen. Nutzen Sie eine Hauptversion wie postgres:16 statt latest, damit ein Update nicht unerwartet eine Hauptversion überspringt.
  • Regelmäßig aktualisieren. Docker Engine wird mit den Systempaketen per apt upgrade aktualisiert. Ihre Images frischen Sie regelmäßig mit docker compose pull auf.
  • Speicherplatz im Blick behalten. Alte Images und Logs sammeln sich mit der Zeit an. docker system df zeigt die Belegung, docker system prune räumt auf.
  • Volumes sichern. Server-Backups helfen, aber zusätzlich regelmäßige Datenbank-Dumps anzulegen ist der sicherste Weg.

Nodesty-Server für Docker

Um Docker voll auszuschöpfen, brauchen Sie einen Server mit Root-Zugriff und KVM-Virtualisierung. Die AMD Ryzen 9 9950X vServer von Nodesty eignen sich mit ihrer hohen Single-Core-Leistung für Webanwendungen und Gameserver, die AMD EPYC 7763 vServer bieten viel RAM für zahlreiche Container und Datenbanken. Beide Pakete umfassen NVMe-Speicher, nShield-DDoS-Schutz und kostenlose tägliche Backups mit 7 Tagen Aufbewahrung; wählen Sie Ubuntu, Debian oder AlmaLinux, und Docker läuft in wenigen Minuten.

Häufig gestellte Fragen

Ist Docker dasselbe wie ein vServer?

Nein. Ein vServer (VPS) betreibt ein vollständiges Betriebssystem mit eigenem Kernel. Docker-Container sind voneinander isolierte Prozesse, die sich den Kernel des Hosts teilen. Docker läuft in der Regel innerhalb eines vServers oder eines dedizierten Servers.

Ist Docker kostenlos?

Docker Engine, die Sie auf Servern einsetzen, ist Open Source und kostenlos. Lizenzkosten betreffen nur größere Unternehmen, die Docker Desktop kommerziell auf Arbeitsplatzrechnern nutzen, sowie einige kostenpflichtige Docker-Hub-Tarife.

Wie viel RAM braucht Docker?

Docker Engine selbst kommt mit wenigen hundert MB aus. Den eigentlichen Bedarf bestimmen die Anwendungen in Ihren Containern. Für einige kleine Webdienste und eine Datenbank sind 2–4 GB ein guter Start, für viele Dienste oder große Datenbanken eher 8 GB und mehr.

Läuft Docker auf Windows Server?

Linux-Container laufen am reibungslosesten auf Linux-Servern, und die große Mehrheit der Docker-Images ist für Linux gebaut. Windows Server kann Windows-Container ausführen; wenn Sie Docker auf einem Server nutzen möchten, empfehlen wir aber eine Linux-Distribution wie Ubuntu oder Debian.

Gehen meine Daten verloren, wenn ich einen Container lösche?

Daten, die im Container selbst gespeichert werden, sind beim Löschen des Containers weg. Für alles, was bestehen bleiben soll, nutzen Sie ein Volume oder einen Bind Mount auf einen Ordner des Hosts. So überstehen Ihre Daten Image-Updates und das Neuanlegen von Containern.

Warum ist ein von Docker veröffentlichter Port trotz ufw erreichbar?

Docker legt für veröffentlichte Ports eigene iptables-Regeln an, die vor den ufw-Regeln greifen. Ein Port, der in ufw geschlossen aussieht, kann über Docker also trotzdem aus dem Internet erreichbar sein. Binden Sie Ports, die nur lokal gebraucht werden, an 127.0.0.1.

Nodesty

Über den Autor

Nodesty-Team · Infrastruktur und Support

Das Nodesty-Team betreibt unsere Server, unser Netzwerk und unseren DDoS-Schutz im Alltag und beantwortet Support-Anfragen rund um die Uhr. Diese Ratgeber entstehen aus dieser Arbeit.

Verwandte Artikel

Starte deinen Server jetzt.

Erstellen, wachsen und skalieren Sie Ihre Projekte grenzenlos auf der Premium-Infrastruktur von Nodesty.

                                                                                                                                                                                                                            
                                                                                                                                                                                                                            
                                                                                                                                                                                                                            
                                                                                                                             ············································                                                   
                                                ··································································································..........···························                                     
                                       ················..........................................................................................................................··············                             
                                  ·············.................::::::::::::::::::::::::::::::::::::::::::::::....................:::::::::::::::::::::::::::::::::::::::................···········                        
                             ············................:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::............·········                     
                         ············.................:::::::::::::::::::::::::::::::::::::::::::::::::::------------::::::::::::::::::::::::::::::----------------:::::::::::::::::::::..........········                  
                    ············......................::::::::::::::::::::::::::::::::::::------------------------------------------------------------------------------------:::::::::::::.........········                
                ··········.............................................::::::::::::::::::-------------==========================================-----------------------------------:::::::::::........·······               
             ········..................:.....................................::::::::::--------=======+++++++++++++++++++++++++++++++++++++=========================------------------::::::::::.......·······              
           ······.........::::::::::::::::::::................................:::::::-----=====++++xxxxxx**************************xxxxxxxxx++++++++++++++===================------------::::::::.......·······             
          ·····.......:::::::::::::::::::::::::::.............................:::::----===+++xxx****%%%%&&&&&&#############&&&&&&&%%%%%*******xxxxxxxx++++++++++++++==============----------:::::::......······             
         ····......::::::::-------------:::::::::::..........................::::---===+++xx***%%%&&&####@@@@@@@@@@@@@@@@@@@@@@@@####&&&&&%%%%*******xxxxxxxxx+++++++++++++===========--------::::::......·····             
        ····.....:::::::--------------------:::::::::.......................::::---===++xxx**%%&&&###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###&&&&%%%%%********xxxxxxxxxxx++++++++++++========------::::::.....······            
        ····.....:::::--------------------------::::::::....................::::---===++xx***%%&&&####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###&&&&&%%%%%**********xxxxxxxxxxxxx+++++++++=======------:::::.....·····            
        ····....::::::-------=============---------:::::::::................:::::---===+++xx***%%%&&&#####@@@@@@@@@@@@@@@@@@@@@@@@@#####&&&&&%%%%%%*************xxxxxxxxxxxxxx+++++++++======-----:::::....·····            
         ····....:::::-------================---------:::::::::...............:::::----===++++xxx***%%%%&&&&&&#################&&&&&&%%%%%%%*******************xxxxxxxxxxxxxxxxx++++++++======----:::::....·····            
         ·····....:::::--------=================---------::::::::::..............:::::::-----====+++++xxxxxx**************************xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx++++++++=====-----::::....·····            
          ·····.....:::::--------=================----------:::::::::::.................:::::::::-------=============++++++++++++++++++++++++++++++++++++xxxxxxxxxxxxxxxxxxxxxxx++++++++======-----::::....·····            
            ·····.....:::::::----------===========-------------::::::::::::.........................::::::::::::::::::------------------=============+++++++++++++++++++++++++++++++++=======-----::::.....·····            
              ······......:::::::---------------------------------:::::::::::::........................................:::::::::::::::-----------============+++++++++++++++++++++========------:::::.....·····             
                 ······........:::::::::---------------------------:::::::::::::::::...........................................:::::::::::::------------=============================--------::::::.....······              
                    ·········.........:::::::::::::::-------------::::::::::::::::::::::::.......................................::::::::::::::::--------------------------------------::::::::......·······                
                          ··········............::::::::::::::::::::::::::::::::::::::::::::::::::................................::::::::::::::::::::::::::-------------:::::::::::::::.........········                   
                                  ············..................:::::::::::::::::::::::::::::::::::::::::::.........................:::::::::::::::::::::::::::::::::::::................···········                        
                                             ················.............................................................................................................·················                                 
                                                           ······················................................................................···························                                                
                                                                               ·········································································