Das war nicht böse gemeint, mich interessiert schlicht der technischer Hintergrund hinter deiner Aussage:Macht wie ihrs denkt, mir ist das egal.
Ich hab alles dazu bereits geschrieben.
Der grund ist halt, das sich in nem LXC Container oft mehr ändert als nur die Packete, Packete werden auch grundsätzlich nie entfernt, nur upgedated/hinzugefügt.
(Entfernt auch aber nur wegen abhängigkeiten wenn ein Packet ein anderes ersetzt, nicht wenns nichtmehr gebraucht wird)
LXC-Container sind Managed. Ein Upgrade der Distribution könnte Änderungen an systemd, init oder anderen Kernkomponenten führen, die mit der Art wie der Container verwaltet wird, in Konflikt stehen.Das war nicht böse gemeint, mich interessiert schlicht der technischer Hintergrund hinter deiner Aussage:
Also: Was sorgt bei den Containern dafür, dass das so ist? Ich dachte bislang immer, dass das nicht der Fall ist.
Ein „verwalteter Container“ bezeichnet eine Umgebung, in der die Konfiguration, Ressourcen und Interaktionen des Containers mit dem Host-System streng kontrolliert und durch eine Container-Laufzeitumgebung (wie LXC) verwaltet werden. Dies steht im Gegensatz zu nicht verwalteten Umgebungen, in denen man zwar mehr direkte Kontrolle hat, aber weniger Integration oder Überwachung.
Im Kontext von LXC-Containern bedeutet „verwaltet“ typischerweise:
1. Abhängigkeit vom Host:
• Der Container ist auf das Host-System für Kernel-Dienste und Ressourcenverwaltung (z. B. CPU, Speicher, Netzwerk) angewiesen.
2. Konfiguration über Tools:
• LXC stellt Tools bereit (lxc-create, lxc-start, lxc-stop usw.) sowie vordefinierte Profile, um Container zu verwalten und zu isolieren. Diese Profile legen fest, worauf der Container zugreifen kann und wie er sich verhält.
3. Isolierung mit Einschränkungen:
• Der Zugriff des Containers auf Ressourcen (z. B. Geräte, Systemaufrufe oder Netzwerk) wird verwaltet, um Isolierung, Stabilität und Sicherheit zu gewährleisten, entsprechend den Richtlinien des Hosts.
4. Vereinfachtes Ressourcenmanagement:
• Das Host-System übernimmt die Ressourcenzuweisung und -begrenzung (z. B. über cgroups für CPU und Speicher). Der Ressourcenverbrauch des Containers wird durch diese Limits gesteuert.
5. Automatische Updates/Anpassungen:
• Verwaltete Umgebungen können Updates für LXC selbst oder für Profile beinhalten, die möglicherweise mit der Konfiguration des Containers in Konflikt geraten oder diese ändern.
Zusammengefasst priorisiert ein „verwalteter Container“ eine strukturierte und vorhersehbare Arbeitsweise, schränkt jedoch bestimmte Konfigurationen ein, wodurch In-Place-Upgrades anfälliger für Konflikte sind als in stärker isolierten Umgebungen wie virtuellen Maschinen.
#!/bin/bash
# Color variables
RED='\033[0;31m'
GREEN='\033[0;32m'
NORMAL='\033[0m'
YELLOW='\033[1;33m'
# custom: Eigene Servicenames zum Anzeigen, min 1
custom_services=("asklepios" "asklepios_mail" "docker")
# docker: Ist Optional, kann leer gelassen werden, aber wenn dann einfach die Container Namen
docker_images=("mariadb" "nginx" "php-8")
format_service_ports() {
ss -Htulpn4 | grep "$1" | awk '{print $5}' | sed -E 's/users:\(\(\"([^"]+).*/\1/' | sed 's/%lo//' | sed -E 's/127\.0\.0\.[0-9]+/local/' | sed 's/0\.0\.0\.0/public/' | uniq | tr '\n' ' '
echo -e '\n'
}
check_services() {
status=$(systemctl is-active "$1")
if [ "$status" != "active" ]; then
echo -e "${RED}$1: Not Running!${NORMAL}"
else
service_ports=$(format_service_ports "$1")
if [ -z "$service_ports" ]; then
echo -e "${GREEN}$1${NORMAL}: Running!"
else
echo -e "${GREEN}$1${NORMAL}: $(format_service_ports "$1")"
fi
fi
}
echo -e "\n --- ${YELLOW}Willkommen auf $(hostname -f)${NORMAL} ---"
echo "Network: $(hostname -I | awk '{print $1}') / $(hostname -f)"
echo "System: $(free -h | awk '/^Mem:/ {print $3 "/" $2 " Mem-Usage"}') | $(df -h / | awk '/\// {print $3 "/" $2 " Disk-Usage"}')"
echo -e "\n --- ${YELLOW}Dienste:${NORMAL}"
for service in "${custom_services[@]}"; do
check_services "$service"
done
failed_services=$(systemctl --failed --plain --no-legend --no-pager)
if [ -z "$failed_services" ]; then
echo -e "${GREEN}Other Services${NORMAL}: Alles funktioniert!"
else
echo -e "${RED}Other Services${NORMAL}: $failed_services"
fi
if [[ " ${custom_services[*]} " =~ " docker " ]]; then
echo -e "\n --- ${YELLOW}Docker Apps:${NORMAL}"
running_containers=$(docker ps --format "{{.Names}}")
for image in "${docker_images[@]}"; do
if [[ ! "$running_containers" =~ "$image" ]]; then
echo -e "${RED}$image: not running!${NORMAL}"
else
status=$(docker ps --filter "name=$image" --format "{{.Names}}: {{.Status}}")
echo -e "${GREEN}$status${NORMAL}"
fi
done
readarray -t running_containers_array <<<"$running_containers"
for container in "${running_containers_array[@]}"; do
if [[ ! "${docker_images[*]}" =~ "$container" ]]; then
status=$(docker ps --filter "name=$container" --format "{{.Names}}: {{.Status}}")
echo -e "${GREEN}$status${NORMAL}"
fi
done
fi
Ich will in diesen Thread jetzt nicht noch mehr abdriften, aber eine Sache: grundsätzlich sind Container schon recht Eng mit dem Host verzahnt, also Kernel und systemd hauptsächlich, denn der Container ist ja, vereinfacht gesagt, hauptsächlich durch Namespaces Features vom Host-Kernel abgebildet, und systemd, das verwendet wird, um ein paar Aspekte zu kontrollieren.Das ist ja alles ganz schön und gut. Hat aber rein gar nichts mit dem Packet- oder Repository management zu tun.
Alles was nicht Hardwae oder IPC nahe ist stellt somit beim Update kein Problem dar.