Docker bei nur 512MB RAM?

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
Lookbehind
Beiträge: 143
Registriert: 12.08.2011 18:09:13

Docker bei nur 512MB RAM?

Beitrag von Lookbehind » 30.04.2017 13:22:30

Hallo zusammen,

ich betreibe einen kleinen Home-Server. Das ist ein alter Laptop mit 1,7GHz Einkern-Prozessor und 512 MB RAM. Nicht üppig, aber läuft. Und das seit inzwischen rund 6 Jahren. Anfangs mit Squeeze, und seit es Stable ist, mit Wheezy. Nun ist Wheezy inzwischen schon Old-Stable und ich schätze wir werden dieses Jahr noch den Release von Stretch erleben. Höchste Zeit den längst überfälligen Schritt zu was neuerem zu machen. Durch einige ... sagen wir mal ... gewachsene Strukturen *hust* möchte ich bei der Gelegenheit einmal reinen Tisch machen, die Kiste komplett plätten und "vernünftig" wieder neu aufsetzen.

Bei der Planung kommt auch das Thema Trennung der Dienste auf. Idealerweise würde man das per Virtualisierung lösen. "Richtige" Virtualisierung kann ich aufgrund der Hardware allerdings mit an Sicherheit grenzender Wahrscheinlichkeit vergessen. Docker-Container hingegen würde zumindest der Prozessor sehr wahrscheinlich packen. Allerdings mache ich mir dann doch ein wenig Sorgen um den RAM.
Ich bräuchte mindestens einen Storage-Container (Samba/NFS), einen Web-Container (Apache, NextCloud, ...) und einen Jabber-Container. Auch liebäugele ich derzeit noch mit LDAP.
Wie schaut das bei Docker aus? Reserviert es eine Menge X an RAM pro Container? Dann wird das auf jeden Fall knapp. Oder ist der RAM je nach Bedarf aufgeteilt? Und wenn ja, wie groß is der Overhead? Könnte das noch hin kommen? Oder kann ich das Thema gleich vergessen?

Ja, 512MB RAM sind generell nicht viel. Es ist auch knapp, aber es geht. Derzeit läuft das System eigentlich sehr zufriedenstellend. Von der alten Software mal abgesehen.
Nein, ich habe noch keine Erfahrung mit Docker. Ich würde mich diesbezüglich dann in das Thema einarbeiten. Wollte aber gerne vorher wissen, ob sich der Aufwand für diesen Einsatzzweck auch lohnt.

Gruß

Look

Benutzeravatar
TRex
Moderator
Beiträge: 8040
Registriert: 23.11.2006 12:23:54
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: KA

Re: Docker bei nur 512MB RAM?

Beitrag von TRex » 30.04.2017 15:12:57

Docker startet keine virtuelle Maschine im klassischen Sinne, du führst also nur das Programm im Container isoliert aus. Du kannst zwar den Speicher begrenzen, aber ich wüsste nicht, dass man Speicher reserviert.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

wanne
Moderator
Beiträge: 7448
Registriert: 24.05.2010 12:39:42

Re: Docker bei nur 512MB RAM?

Beitrag von wanne » 01.05.2017 03:39:10

Prinzipiell reservierst du keinen Speicher pro Container. Aber du hast halt keine shared Memory. Hast du 5 mal python laufen, brauchst du nur ein mal python in den RAM laden. Hast du 5 mal python in unterschiedlichen Containtern laufen, hast du 5 mal python im RAM.
NFS läuft eh im Kernel und smb und ldap nutzen nicht viele librarys nur der web Container könnte da stark profitieren. Da aber keine anderen Dienste laufen die ähnlich sind, gewinnst du auch da wenig zu einem nativen Setup. Bei dem Setup würde ich tippen dass du halt so ca. ~50MiB an RAM "verschwendest" wenn du Container nutzt.
Durchaus vertretbar.
Dazu kommt die Docker Engine, denke dass sich auch die einigermaßen im Rahmen hälte. Denke aber bei Moderner Software sind gerne mal 100MiB weg. Kann das aber absolut nicht genauer sagen. Im Moment habe ich keine Docker Installation mehr und die Kisten auf denen bei uns docker lief hatten halt 50GiB RAM da hat mich das nie so interessiert.
Fazit: Kann man aber alles machen.

Die Sache ist eher mit was du das verwaltest. Kubernetis oder docker swarm läuft eher nicht auf einem 1,7GHz single core. Und Docker Hub führt die Idee von nem Home-Server ja etwas add absurdum.

Würde aber grundsätzlich den Sinn mal in frage stellen. (Bin kein Fan von dem Virtualisierungswahnsinn.) Separierung im Sinn von Ressourcenmanagement und Sicherheit kannst du mit usern und cgroups weit mehr machen als mit Docker.
Und am ende hast du halt den Wartungsaufwand für 3 Systeme. Docker macht IMHO Sinn wenn du 5 Scheißanwendungen hast, die je mit genau einer anderen angepassten Version vom Apache, mysql und python laufen, die dann auch noch mit genau der richtigen Version vom pgi kompiliert worden sein muss, oder so.
Aber was du da laufen hast ist doch alles rock solid. Ein mal einrichten regelmäßig ein system updaten und auf Änderungen anpassen und sonst nicht mehr dran denken.
Mit 5 VMs klafft da doch immer in einer irgend ein Sicherheitsloch weil noch nicht upgedated oder läuft nicht, weil noch nicht auf den neuen hostnahmen angepasst oder oder oder…
rot: Moderator wanne spricht, default: User wanne spricht.

nudgegoonies
Beiträge: 939
Registriert: 16.02.2009 09:35:10

Re: Docker bei nur 512MB RAM?

Beitrag von nudgegoonies » 22.06.2017 13:19:39

Es kommt auch auf Deine Docker Container an. Wenn Du schön minimale Container baust/nutzt die nur einen Prozess starten sollte es funktionieren. Wenn Du Docker Container wie virtuelle Maschinen benutzt, also mit Init System darin, dann wird es knapp, weil dann in jedem Container noch eine ganze Menge Dienste mitläuft.

Was ich mich bei Docker generell frage ist, wie es mit shared Libraries aussieht. Wenn zwei Prozesse gleichzeitig laufen und die libXYZ nutzen liegt deren read only Codesegment ja nur einmal im Speicher. Der Speicer aber wird an unterschiedlichen Adressen in den virtuellen Speicher der beiden Prozesse eingeblendet. Ich würde vermuten, dass dies mit Containern nicht mehr geht. Das bedeutet, dass zwei Prozesse auf dem Host weniger Speicher brauchen als wenn sie jeweils isoliert im Container laufen, obwohl in beiden Container die selbe Version der libXYZ liegt bzw. diese aus dem selben Layer gemountet wird.
Soft: Bullseye AMD64, MATE Desktop. Repo's: Backports, kein Proposed, eigene Backports. Grafik: Radeon R7 360 MESA.
Hardware: Thinkstation S20, Intel X58, 16GB, Xeon W3530, BCM5755 NIC, EMU10K1 SND, SATA SSD+HDS und DVD+RW.

Benutzeravatar
MSfree
Beiträge: 10686
Registriert: 25.09.2007 19:59:30

Re: Docker bei nur 512MB RAM?

Beitrag von MSfree » 22.06.2017 13:31:29

nudgegoonies hat geschrieben:Wenn zwei Prozesse gleichzeitig laufen und die libXYZ nutzen liegt deren read only Codesegment ja nur einmal im Speicher.
Ist das wirklich so?
Ich würde fast behaupten, daß beide Prozesse eine Kopie der Codesegmente bekommen. Somit läge die libXYZ auch zweimal im Speicher. Ich werfe mal als Stichwort Address Randomization ein, die mit geteilten Codesegmenten nach meinem Verständnis nicht möglich wäre.

nudgegoonies
Beiträge: 939
Registriert: 16.02.2009 09:35:10

Re: Docker bei nur 512MB RAM?

Beitrag von nudgegoonies » 22.06.2017 16:41:06

Ich meine ja. Ich habe jetzt das Betriebssystembuch vom Tanenbaum nicht zur Hand, aber ich meine da stand es drin. Die Libraries adressieren ja auch alle relativ. Ich habe jetzt nur kurz zeit zum Googlen und bin über eine ähnliche Frage gestolpert: https://stackoverflow.com/questions/313 ... -processes

Ich meine das ganze ist auch unabhängig vom CPU NX Flag. Linux macht da glaube ich ähnlich wie beim Forken eines Prozesses copy on write.
Soft: Bullseye AMD64, MATE Desktop. Repo's: Backports, kein Proposed, eigene Backports. Grafik: Radeon R7 360 MESA.
Hardware: Thinkstation S20, Intel X58, 16GB, Xeon W3530, BCM5755 NIC, EMU10K1 SND, SATA SSD+HDS und DVD+RW.

wanne
Moderator
Beiträge: 7448
Registriert: 24.05.2010 12:39:42

Re: Docker bei nur 512MB RAM?

Beitrag von wanne » 22.06.2017 17:08:03

MSfree hat geschrieben:Ist das wirklich so?
Ja natürlich.
Ohne wärst du zumindst bis vor einigen Jahren einfach nur am swappen gewesen.

Guck dir mal an, wieviel Platz das brächte, wenn du alles shared librarys für jeden Prozess zusammenführst:

Code: Alles auswählen

cat /proc/*/smaps | grep ^Size:  | awk '{ SUM += $2} END { print SUM/1024^2 }'
(Ausgabe in GiB)
Ich hoffe ich verstehe die Ausgabe von smaps richtig…

Klar waren die Libs von ein paar jahren noch kleiner aber da hattest du halt auch nur 0.5GiB RAM oder so. Und um den Faktor 20 Sind die jetzt nicht größer geworden in den letzten 5 Jahren.
rot: Moderator wanne spricht, default: User wanne spricht.

nudgegoonies
Beiträge: 939
Registriert: 16.02.2009 09:35:10

Re: Docker bei nur 512MB RAM?

Beitrag von nudgegoonies » 23.06.2017 16:15:52

Guter Tip. Ich habe es jetzt mit /proc/ID/maps probiert.

Wenn ich das selbe Programm zwei mal auf dem selben Host laufen lasse stimmen die inodes alle überein. Nur der virtuelle Adressraum ist anders für den Heap und die Libraries ist anders.

Wenn ich in zwei Containern basierend auf dem selben Image je das selbe Programm starte stimmen auch alle inodes überein. Das würde doch bedeuten, dass auch in Containern über den inode der Speicher geteilt wird. Allerdings nur bei Containern, die das selbe Image haben. Ob das bei allen docker storage Treibern so ist weiß ich aber nicht. Ich nutze overlay2 basierend auf overlayfs. Und es wird nichts mit den Libraries auf dem Host geteilt, da das Docker Image ja ein komplettes Linux Filesystem enthält.

Wenn ich in zwei Containern basierend auf dem selben Image je das selbe Programm installiere und laufen lasse stimmen die inodes der libraries wie libc, etc. noch überein. Aber die durch das Programm neu installierten Libraries nicht mehr. Ist ja auch klar, weil die Libraries dupliziert in den jeweils neuen Layern auf der Platte liegen.
Soft: Bullseye AMD64, MATE Desktop. Repo's: Backports, kein Proposed, eigene Backports. Grafik: Radeon R7 360 MESA.
Hardware: Thinkstation S20, Intel X58, 16GB, Xeon W3530, BCM5755 NIC, EMU10K1 SND, SATA SSD+HDS und DVD+RW.

Antworten