Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
server:docker [2022/03/10 17:11] – [Clustering] st | server:docker [2024/04/24 12:02] (aktuell) – podman st | ||
---|---|---|---|
Zeile 12: | Zeile 12: | ||
* Docker zieht eine Abstraktionsebene ein, d.h. die darunterliegende Struktur (LAN, Storage, Distribution und Paketabhängigkeiten) muss bei der Anwendung nicht betrachtet werden. Überall lauffähig, nur die docker-version muss beachtet werden | * Docker zieht eine Abstraktionsebene ein, d.h. die darunterliegende Struktur (LAN, Storage, Distribution und Paketabhängigkeiten) muss bei der Anwendung nicht betrachtet werden. Überall lauffähig, nur die docker-version muss beachtet werden | ||
* Ressourceneinsatz (Massenhosting) | * Ressourceneinsatz (Massenhosting) | ||
+ | * Disk: VM (Debian): ~500-800MB (je nach installierter Komponenten), | ||
+ | * Arbeitsspeicher | ||
+ | * Kernel: VM: ~60MB je VM (incl. rsyslog), Container: kernel vom Betriebssystem wird genutzt | ||
+ | * Applikationsprozess nimmt genauso viel | ||
+ | * Cache: VM -> RAM muss reserviert werden, Virtualisierung kann aber ungenutzen Speicher neu verteilen; Container -> Cache kann gemeinsam von allen Containern benutzt werden | ||
* Skalierbarkeit (Lastspitzen abfangen) | * Skalierbarkeit (Lastspitzen abfangen) | ||
- | * Deployment kann schnell und oft erfolgen | + | * Deployment kann schnell, häufig |
Zeile 50: | Zeile 55: | ||
- cron (logging) | - cron (logging) | ||
- container bestehen nicht nur aus der app sondern auch die Laufzeit-umgebung: | - container bestehen nicht nur aus der app sondern auch die Laufzeit-umgebung: | ||
- | - Alpine veröffentlich nur Daten zu bereits zu gefixten Problemen! Updategeschwindigkeit eher schlecht | + | - Alpine veröffentlich nur Daten zu bereits zu gefixten Problemen! Updategeschwindigkeit eher schlecht: [[https:// |
siehe auch [[https:// | siehe auch [[https:// | ||
Zeile 142: | Zeile 147: | ||
- | ==== Routingkonflikte mit docker networks ==== | + | ==== Routingkonflikte mit docker networks |
- | Netze die sich mit Docker überlappen (172.17., | + | Netze die sich mit Docker überlappen (172.17., ...) sind ein Problem. |
Die Config " | Die Config " | ||
Zeile 151: | Zeile 156: | ||
Es gibt nur einen funktionierenden workaround: explizit eine route im System setzen: | Es gibt nur einen funktionierenden workaround: explizit eine route im System setzen: | ||
- | Beispiel Redhat (ens192 mit Standard-GW 172.16.0.1) z.B. mit ''/ | + | Beispiel Redhat (ens192 mit Standard-GW 172.17.0.1) z.B. mit ''/ |
| | ||
Bei Swarm muss initial die docker_gwbridge | Bei Swarm muss initial die docker_gwbridge | ||
Zeile 158: | Zeile 163: | ||
- neu anlegen mit anderem Netz (muss vor join erfolgen!):< | - neu anlegen mit anderem Netz (muss vor join erfolgen!):< | ||
docker network create \ | docker network create \ | ||
- | --subnet | + | --subnet |
--opt com.docker.network.bridge.name=docker_gwbridge \ | --opt com.docker.network.bridge.name=docker_gwbridge \ | ||
--opt com.docker.network.bridge.enable_icc=false \ | --opt com.docker.network.bridge.enable_icc=false \ | ||
Zeile 444: | Zeile 449: | ||
* [[https:// | * [[https:// | ||
+ | |||
+ | |||
+ | ===== docker vs. podman===== | ||
+ | |||
+ | |||
+ | * docker daemon immer noch als root (-> podman mit systemd unit + port >1024 expose) | ||
+ | * podman -> restart polic via systemd-unit | ||
+ | * ggf. rootless container in einen pod (namespace für ipc, net, cgroups) packen (teilen sich einen network namespace) | ||
+ | * compose files nicht vorhanden, Alternativen: | ||
+ | * https:// | ||
+ | * oder minikube, k3d, .k8s, ... | ||
+ | * CNI vs. Netavark/ | ||
+ | * Netavark: A network setup tool that configures network bridges, firewall rules, and system settings to give containers access to external networks | ||
+ | * Aardvark: An authoritative DNS server for A and AAAA container records, enabling containers to resolve connections to other containers by their names or aliases. | ||
+ | |||
+ | **networking**: | ||
+ | - bridge (Standard für rootful container) -> internes Interface mit NAT | ||
+ | - macvlan (bridge mit eigener mac + IP auf interface, erfordert rootful | ||
+ | - slirp4netns (Standard für rootless containers) -> Tunnel durch TAP device (containers are completely isolated from each other! no virtual network | ||
+ | |||
+ | v4/ | ||
+ | - podman macht IPv4, v6 oder Dualstack (v4 + v6) | ||
+ | - docker does ipv4 OR (ipv4 and ipv6), nur v6 geht nicht! | ||
+ | |||
+ | ==== Links ==== | ||
+ | |||
+ | * https:// | ||
+ | * https:// | ||
+ | * https:// | ||
Zeile 517: | Zeile 551: | ||
===== IPv6 ===== | ===== IPv6 ===== | ||
- | Docker hat beim Design | + | Docker hat beim Design |
- | Ob NAT (analog zu v4) jemals offiziell mit IPv6 umgesetzt wird, ist unklar. Möglich wäre es, dazu würden aus dem Unique Local Addresses | + | **docker unterstützt kein SLAAC oder DHCPv6** und kann daher nicht selbstständig Präfixe beziehen, d.h. es müssen statische IPs zugewiesen werden und diese via DNS propagiert werden |
+ | Hiermit | ||
- | Alternativ kann intern | + | NAT66 (analog zu v4) mit Adressen aus dem Unique Local Addresses (ULA)-Bereich fd00::/8 Adressen ist eine schlechte Idee und führt zu Problemen, auch der userland-proxy ist Mist. |
- | / | + | |
- | <code bash> | + | Funktionierende Lösungen: |
+ | * ein öffentliches | ||
{ | { | ||
" | " | ||
" | " | ||
- | } | + | }</ |
- | </ | + | |
- | Weiterhin unterstützt docker | + | |
- | Hiermit werden jedoch sämtliche Ports öffentlich zugänglich gemacht (nicht nur diese via EXPOSE) und müssen daher via firewall abgesichert werden. | + | |
Siehe auch: https:// | Siehe auch: https:// | ||
:!: Für IPv6-only ist dank der Rückständigkeit bei Dritten (Docker registry, Github etc.) Krücken wie DNS64 + NAT64 nötig. | :!: Für IPv6-only ist dank der Rückständigkeit bei Dritten (Docker registry, Github etc.) Krücken wie DNS64 + NAT64 nötig. | ||
- | |||
- | |||
===== Clustering ===== | ===== Clustering ===== | ||