Ga naar inhoud

Waarom Docker & Containers op Ubuntu 24.04 LTS?

Binnen een homelab is de verleiding groot om voor elke nieuwe service een aparte Proxmox LXC of VM aan te maken. Dit document legt uit waarom de overstap naar Docker binnen een dedicated VM de efficiΓ«ntie, flexibiliteit en het onderhoud van je homelab naar een hoger niveau tilt.

Opmerking: Deze gids is specifiek geschreven en geoptimaliseerd voor Ubuntu 24.04 LTS (Noble Numbat).


1. Wat lost Docker op? (De voordelen)

Wanneer je applicaties rechtstreeks op een Linux-systeem (of in losse LXC's) installeert, loop je snel tegen problemen aan met afhankelijkheden (dependencies). Applicatie A heeft bijvoorbeeld Python 3.9 nodig, maar Applicatie B vereist Python 3.11. Dit zorgt voor conflicten.

Docker lost dit op door de applicatie én alle benodigde softwarepakketten samen te voegen in één afgesloten pakketje: de container.

De belangrijkste voordelen:

  • Lichtgewicht & Snel: Containers delen de kernel van de host-VM. Ze starten binnen milliseconden op en verbruiken een fractie van het RAM-geheugen in vergelijking met volwaardige VM's.
  • Geen 'Dependency Hell': Elke container heeft zijn eigen geΓ―soleerde bibliotheken (libraries). Je kunt probleemloos verschillende versies van dezelfde software naast elkaar draaien.
  • Consistentie: Een Docker-container draait overal exact hetzelfde. Of dit nu op je lokale pc, je Proxmox cluster of in de cloud is.
  • Snel testen en weggooien: Wil je een nieuwe tool proberen? Je start de container op. Bevalt het niet? Je verwijdert de container en je basissysteem blijft 100% schoon achter zonder restbestanden.

2. Docker vs Proxmox LXC

Hoewel een Proxmox Linux Container (LXC) ook heel lichtgewicht is, zijn er grote verschillen met Docker:

Eigenschap Proxmox LXC Docker Container
Doel Volledig (mini) besturingssysteem Één specifieke applicatie/proces
Beheer Handmatig via apt, yum, etc. Geautomatiseerd via docker-compose.yml
Portabiliteit Gebonden aan het Proxmox platform Draait op elk OS waar Docker op staat
Ecosysteem Beperkt tot OS templates Miljoenen kant-en-klare apps op Docker Hub

3. Waarom Docker binnen een Proxmox VM?

De ultieme opzet voor een stabiel homelab is het draaien van Docker bovenop een stabiele Linux VM (zoals Ubuntu Server 24.04) binnen Proxmox. Dit combineert de kracht van beide platformen:

  • Beveiliging door isolatie: Een VM gebruikt hardware-virtualisatie. Mocht een Docker-container ooit gecompromitteerd worden door een hacker, dan kan deze hacker maximaal de Docker VM overnemen. De Proxmox-host en je fysieke netwerk blijven volledig afgeschermd.
  • Probleemloos netwerken: Docker maakt intern intensief gebruik van netwerkregels (iptables). Als je Docker in een LXC draait, kan dit zware conflicten veroorzaken met de netwerklagen van Proxmox zelf. Een volwaardige VM heeft hier geen last van.
  • Eenvoudig cluster-beheer: Je kunt de complete Docker VM live migreren tussen verschillende Proxmox-nodes, of in één keer back-uppen naar je Proxmox Backup Server (PBS).

4. Infrastructuur als Code (IaC)

Het grootste voordeel voor de homelabber is dat je je volledige serverinrichting kunt vastleggen in tekstbestanden (Docker Compose).

In plaats van urenlang commando's typen om een applicatie te installeren, beschrijf je de opzet één keer in een bestand. Als je server crasht, start je met dat ene tekstbestand je complete applicatielandschap binnen een minuut weer op.


Installatie van Docker op een schone Ubuntu 24.04 LTS

Volg deze specifieke stappen om de officiΓ«le Docker Engine correct te installeren op een kale installatie van Ubuntu 24.04 LTS.

Stap 1: Systeempakketten bijwerken

sudo apt update && sudo apt upgrade -y

Stap 2: Vereiste pakketten installeren

sudo apt install -y ca-certificates curl gnupg

Stap 3: Docker GPG-sleutel toevoegen

Opmerking: Sinds Ubuntu 24.04 is de oude apt-key methode volledig uitgefaseerd. We gebruiken hier de verplichte en veilige .asc sleutelarchitectuur.

sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://docker.com -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

Stap 4: OfficiΓ«le Ubuntu 24.04 Docker Repository instellen

echo \
  "deb [arch=\$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://docker.com \
  \((. /etc/os-release && echo "\)VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Stap 5: Docker Engine & Modern Compose installeren

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Stap 6: Docker zonder sudo uitvoeren (Groepsrechten)

Voeg je huidige gebruiker toe aan de docker-groep en activeer de rechten direct binnen deze terminalsessie met newgrp:

sudo usermod -aG docker \$USER
newgrp docker

Stap 7: Installatie testen op Ubuntu 24.04

docker run hello-world

EssentiΓ«le CLI Commando's

Container Beheer

  • Container starten (achtergrond): docker run -d --name <naam> -p <host_poort>:<container_poort> <image>
  • Actieve containers bekijken: docker ps
  • Alle containers bekijken (inclusief gestopte): docker ps -a
  • Container stoppen: docker stop <naam_of_id>
  • Container starten: docker start <naam_of_id>
  • Container herstarten: docker restart <naam_of_id>
  • Container verwijderen: docker rm <naam_of_id>
  • Live logs inzien: docker logs -f <naam_of_id>

Image Beheer

  • Image handmatig downloaden: docker pull <image_naam>
  • Gedownloade images bekijken: docker images
  • Image verwijderen: docker rmi <image_id>

Beheerprogramma's (Tools)

Docker-containers kunnen via verschillende interfaces worden beheerd:

Programma Type Omschrijving
Portainer Web GUI Populaire en uitgebreide webinterface voor het visueel beheren van containers, volumes en stacks.
Dockge Web GUI Een minimalistische, supersnelle webinterface specifiek gericht op het beheren van docker-compose.yml bestanden.
Lazydocker Terminal UI Een krachtige terminal-gebaseerde interface (TUI) voor beheer rechtstreeks binnen je SSH-sessie.
Docker Compose CLI Tool De ingebouwde standaardtool om applicatie-stacks te beheren via duidelijke YAML-bestanden.

Voorbeeld: Portainer installeren via CLI op Ubuntu 24.04

Opmerking: We slaan dit volume direct veilig op in de home-directory van de gebruiker.

mkdir -p ~/docker/portainer
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v ~/docker/portainer:/data portainer/portainer-ce:latest
Ga hierna in je browser naar: https://<IP_VAN_VM>:9443


Onderhoud via de Commandline op Ubuntu 24.04

Regelmatig onderhoud voorkomt dat de harde schijf van je Ubuntu 24.04 Docker VM ongemerkt volloopt met oude data.

Schijfruimte controleren

docker system df

Grondige schoonmaak (Prune)

Verwijder gestopte containers, ongebruikte netwerken en ongebruikte images (build caches) in één keer:

docker system prune -a --volumes -f

Specifiek opschonen

  • Ongebruikte images verwijderen: docker image prune -a -f
  • Gestopte containers verwijderen: docker container prune -f
  • Ongebruikte volumes verwijderen: docker volume prune -f

Updates Automatiseren

Optie A: Automatisch via Watchtower (Aanbevolen)

Watchtower controleer periodiek op nieuwe image-versies, haalt ze binnen en herstart de container vlekkeloos met behoud van je data.

docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup --interval 86400
Uitleg: Dit controleert elke 24 uur (86400 seconden) op updates en verwijdert de oude image direct (--cleanup) om schijfruimte te besparen.

Optie B: Handmatig updaten via Docker Compose

Als je applicaties draait met Docker Compose, gebruik dan de volgende reeks commando's binnen de applicatiemap om handmatig updates uit te voeren:

# 1. Ga naar de map met je docker-compose.yml file
cd ~/docker/applicatie

# 2. Download de nieuwste images van internet
docker compose pull

# 3. Herstart de containers vlekkeloos met de nieuwe versies
docker compose up -d --remove-orphans

# 4. Ruim de oude, achtergebleven images direct op
docker image prune -f

Optie C: Ubuntu 24.04 Host VM OS Updates

Vergeet niet om het onderliggende Ubuntu 24.04 Linux-systeem ook periodiek bij te werken via de pakketbeheerder:

sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y