HomelabIT Praxis

Docker unter Proxmox installieren

Docker als Container-Plattform und Proxmox als Virtualisierungsplattform geben ein hervorragendes und produktives Gespann ab. In diesem Artikel wird gezeigt, wie ein Docker-Host als Linux-Container (LXC) unter Proxmox bereitgestellt wird.

Mit diesem Docker-Host sind Sie in der Lage sehr schnell und flexibel beliebige Dienste und Anwendungen auf Ihrem Server bereitzustellen.


LXC-Container als Docker-Host einrichten (Debian)

Als Basis für den Container in Proxmox wird ein Debian-Image verwendet und die Einrichtung des Containers Schritt für Schritt gezeigt.

Erstellen Sie einen neuen, unprivilegierten Container in Proxmox und folgen Sie den hier beschriebenen Einstellungen:

Allgemeine Einstellungen des Containers in Proxmox
Allgemeine Einstellungen des Containers

Wählen Sie das Debian-Template aus. Sofern dies noch nicht in Ihrer Proxmox-Umgebung vorhanden ist, laden Sie dieses zuvor in Ihrem Storage über CT Templates > Templates herunter.

Auswählen des Templates in Proxmox.
Auswählen des Templates

Die Größe der Root-Disk hängt von Ihren persönlichen Bedürfnissen und den zu installierenden Docker-Anwendungen ab. Es empfiehlt sich, die Docker-Images im Container abzulegen (diese können Sie bei Bedarf ja wieder herunterladen).

Für die veränderlichen Konfigurations- und Nutzdaten werden wir nach der Installation einen externen Storage in den Container einbinden, um so

  • On the fly Container-Konfigurationen durchführen zu können und
  • die Daten in einem Backup-Prozess sichern zu können.

Wie dies erfolgt, zeigen wir in einem separaten Artikel.

Speicherort und Größe der Disk für den Docker Container festlegen
Speicherort und Größe der Disk festlegen

Auch die Anzahl der Cores hängt vom Einsatzzweck und den verwendeten Anwendungen ab. Zwei Cores sind aber für einen normalen Betrieb völlig ausreichend.

Anzahl der Cores für die CPU unter Proxmox festlegen
Anzahl der Cores für die CPU festlegen

Dasselbe gilt für den Speicher (RAM) des Containers. Zum Start sind zwei Gigabyte völlig ausreichend.

Größe des Hauptspeichers für den Docker Container festlegen
Größe des Hauptspeichers festlegen

In den Netzwerkeinstellung konfigurieren Sie die Einstellungen so, wie es in Ihre Umgebung passt.

Netzwerkeinstellungen des Docker Containers festlegen
Netzwerkeinstellungen festlegen

Auf alle Fälle sollte die IP-Adresse des Docker-Hosts statisch sein, wir legen dies allerdings über den Router fest und nicht hier.

Anschließend den Container erstellen lassen, aber noch nicht starten, da noch Einstellungen im Container zur Virtualisierung festgelegt werden müssen.

Dazu in Proxmox den Container auswählen und unter Optionen die Einstellung „Features“ doppelklicken. Hier folgende Optionen auswählen:

Virtualisierungsoptionen für den Container in proxmox aktivieren
Virtualisierungsoptionen für den Container aktivieren

Die Auswahl bestätigen und anschließend den Container starten.

Ist der Container gestartet, einloggen und Docker unter Proxmox installieren.


Docker im Container installieren

Zuerst aktualisieren wir die Paketquellen mit

apt-get update

Anschließend werden notwendige Pakete installiert, um das Docker-Repository über HTTPS zu nutzen

apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

Den offiziellen GPG-Key von Docker dem System hinzufügen

curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -

Die erfolgreiche Prüfung des GPG-Keys sollte wie folgt aussehen:

root@DockerTest:~# apt-key fingerprint 0EBFCD88
pub   rsa4096 2017-02-22 [SCEA]
      9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid           [ unknown] Docker Release (CE deb) <docker@docker.com>
sub   rsa4096 2017-02-22 [S]

Anschließend wird das stable-Docker-Repository hinzugefügt:

add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/debian \
   $(lsb_release -cs) \
   stable"

Jetzt nochmal die Paketquellen aktualisieren:

apt-get update

Und dann Docker installieren, wobei die neue Container-Runtime containerd verwendet wird:

apt-get install docker-ce docker-ce-cli containerd.io

Wenn alles erfolgreich installiert wurde, sollte es ungefähr so aussehen:

root@DockerTest:~# service docker status
* docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2021-02-11 21:47:31 UTC; 27s ago
     Docs: https://docs.docker.com
 Main PID: 8347 (dockerd)
    Tasks: 9
   Memory: 101.8M
   CGroup: /system.slice/docker.service
           `-8347 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
 
Feb 11 21:47:30 DockerTest dockerd[8347]: time="2021-02-11T21:47:30.676485035Z" level=warning msg="Your kernel does not support cgroup blkio weight_device"
Feb 11 21:47:30 DockerTest dockerd[8347]: time="2021-02-11T21:47:30.677331494Z" level=info msg="Loading containers: start."
Feb 11 21:47:30 DockerTest dockerd[8347]: time="2021-02-11T21:47:30.850581966Z" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. D
Feb 11 21:47:30 DockerTest dockerd[8347]: time="2021-02-11T21:47:30.851135398Z" level=warning msg="unable to disable IPv6 router advertisement" error="open /proc/sys/ne
Feb 11 21:47:30 DockerTest dockerd[8347]: time="2021-02-11T21:47:30.851159374Z" level=warning msg="unable to disable IPv6 router advertisement" error="open /proc/sys/ne
Feb 11 21:47:30 DockerTest dockerd[8347]: time="2021-02-11T21:47:30.945945308Z" level=info msg="Loading containers: done."
Feb 11 21:47:30 DockerTest dockerd[8347]: time="2021-02-11T21:47:30.990029740Z" level=info msg="Docker daemon" commit=46229ca graphdriver(s)=vfs version=20.10.3
Feb 11 21:47:30 DockerTest dockerd[8347]: time="2021-02-11T21:47:30.990156263Z" level=info msg="Daemon has completed initialization"
Feb 11 21:47:31 DockerTest systemd[1]: Started Docker Application Container Engine.
Feb 11 21:47:31 DockerTest dockerd[8347]: time="2021-02-11T21:47:31.078816699Z" level=info msg="API listen on /var/run/docker.sock"

Mit der Installation von Docker unter Proxmox sind jetzt die Voraussetzungen für einen sehr flexiblen Docker-Host geschaffen worden. Diesen werden wir in weiterführenden Beiträgen um Standarddienste erweitern, um die Verwaltung und Konfiguration weiterer Dienste und Anwendungen so einfach wie möglich durchführen zu können.

Dazu gehören unter anderem Portainer und ein Reverse Proxy (nginx).


Hardware für das eigene Homelab

Wer in einem eigenen Homelab die hier gezeigten Beispiele ausprobieren und damit lernen möchte, dem empfehlen wir zum Einstieg preisgünstige aber leistungsstarke Hardware, wie zum Beispiel die Minirechner der Firma Minisforum, die sich ideal als Heimserver eignen.

9 Gedanken zu „Docker unter Proxmox installieren

  • Pingback: Portainer unter Docker installieren - kayomo GmbH

  • Daniel

    „Wie dies erfolgt, zeigen wir in einem separaten Artikel.“

    Kommt der Artikel noch? Würde mich sehr interessieren.

    Danke.

    Antwort
  • Coji

    Danke für die Anleitung.
    Ich bin ihr gefolgt aber bekomme den Fehler

    docker run -d -p 8000:8000 -p 9000:9000 –name=portainer –restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
    docker: Error response from daemon: using mount program fuse-overlayfs: fuse: device not found, try ‚modprobe fuse‘ first
    fuse-overlayfs: cannot mount: No such file or directory
    : exit status 1.

    modprobe fuse funktioniert natürlich nicht, weil im LXC kein Kernel installiert ist. Haben sie Ideen, was das Problem ist?

    service docker status
    * docker.service – Docker Application Container Engine
    Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
    Active: active (running) since Sat 2022-01-29 09:56:28 UTC; 3s ago
    TriggeredBy: * docker.socket
    Docs: https://docs.docker.com
    Main PID: 1617 (dockerd)
    Tasks: 8
    Memory: 26.7M
    CPU: 132ms
    CGroup: /system.slice/docker.service
    `-1617 /usr/bin/dockerd -H fd:// –containerd=/run/containerd/containerd.sock

    Jan 29 09:56:27 cloud dockerd[1617]: time=“2022-01-29T09:56:27.935940080Z“ level=info msg=“ccResolverWrapper: sending u>
    Jan 29 09:56:27 cloud dockerd[1617]: time=“2022-01-29T09:56:27.935955768Z“ level=info msg=“ClientConn switching balance>
    Jan 29 09:56:27 cloud dockerd[1617]: time=“2022-01-29T09:56:27.937472548Z“ level=info msg=“[graphdriver] using prior st>
    Jan 29 09:56:27 cloud dockerd[1617]: time=“2022-01-29T09:56:27.953930577Z“ level=info msg=“Loading containers: start.“
    Jan 29 09:56:28 cloud dockerd[1617]: time=“2022-01-29T09:56:28.023268152Z“ level=info msg=“Default bridge (docker0) is >
    Jan 29 09:56:28 cloud dockerd[1617]: time=“2022-01-29T09:56:28.052922866Z“ level=info msg=“Loading containers: done.“
    Jan 29 09:56:28 cloud dockerd[1617]: time=“2022-01-29T09:56:28.058508978Z“ level=info msg=“Docker daemon“ commit=459d0d>
    Jan 29 09:56:28 cloud dockerd[1617]: time=“2022-01-29T09:56:28.058551403Z“ level=info msg=“Daemon has completed initial>
    Jan 29 09:56:28 cloud systemd[1]: Started Docker Application Container Engine.
    Jan 29 09:56:28 cloud dockerd[1617]: time=“2022-01-29T09:56:28.074052755Z“ level=info msg=“API listen on /run/docker.so>

    Antwort
  • Coji

    Hi,
    ich musste in den Features des LXC noch FUSE aktivieren. Jetzt geht es.
    Grüße

    Antwort
  • Hallo Coji,
    habe Deinen Beitrag erst jetzt gesehen, aber ja, das ist dann die Lösung 🙂

    Wobei ich mich frage, warum das bei mir ohne gesetzte FUSE funktioniert?
    Viele Grüße

    Antwort
    • Ingo Veltmann

      vielleicht irgendwo bereits als default aktiviert?

      Antwort
  • Pingback: Kostenlose Teamviewer Alternative - RustDesk - kayomo GmbH

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert